編輯:關於Android編程
昨天需要處理一個問題,需要監聽home鍵。最開始想到使用onKeydonwn這個方法。但是發現home不能這樣處理,onKeydonwn可以處理菜單鍵和back鍵,但home不能。因為home鍵是系統鍵,情況特殊一些。
看了一下網上的資料,說下面的方法可以。(其實不行)
復制代碼 代碼如下:
@Override
public void onAttachedToWindow() {
// TODO Auto-generated method stub
Log.d("aeon","onAttachedToWindow");
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
super.onAttachedToWindow();
}
加了權限之後也不行。
復制代碼 代碼如下:
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" >
</uses-permission>
實驗幾次之後(android4.1 和android4.2)發現在單個的activity裡面有以下幾個方法可以使用:
方法1:onSaveInstanceState方法
下面這個方法可以處理home的監聽問題。
復制代碼 代碼如下:
protected void onSaveInstanceState(Bundle outState)
但這個方法不是很好,不推薦
方法2:onUserLeaveHint方法
復制代碼 代碼如下:
@Override
protected void onUserLeaveHint() {
Log.d("aeon","onUserLeaveHint");
super.onUserLeaveHint();
}
這個方法會在onSaveInstanceState之前執行,根據api的解釋,這個方法還比較合適的。
方法3:ACTION_CLOSE_SYSTEM_DIALOGS
在使用廣播監聽方面可以使用ACTION_CLOSE_SYSTEM_DIALOGS
復制代碼 代碼如下:
//注冊Receiver
HomeKeyEventBroadCastReceiver receiver = new HomeKeyEventBroadCastReceiver();
registerReceiver(receiver, new IntentFilter(
Intent. ACTION_CLOSE_SYSTEM_DIALOGS));
方法4:framework PhoneWindowManager.java 處理
想要完全監聽home鍵需要在framework層去處理。
/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
裡面去修改private void handleLongPressOnHome() 這個方法。
復制代碼 代碼如下:
private void handleLongPressOnHome() {
// We can't initialize this in init() since the configuration hasn't been loaded yet.
if (mLongPressOnHomeBehavior < 0) {
mLongPressOnHomeBehavior
= mContext.getResources().getInteger(R.integer.config_longPressOnHomeBehavior);
if (mLongPressOnHomeBehavior < LONG_PRESS_HOME_NOTHING ||
mLongPressOnHomeBehavior > LONG_PRESS_HOME_RECENT_SYSTEM_UI) {
mLongPressOnHomeBehavior = LONG_PRESS_HOME_NOTHING;
}
}
if (mLongPressOnHomeBehavior != LONG_PRESS_HOME_NOTHING) {
performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false);
sendCloseSystemWindows(SYSTEM_DIALOG_REASON_RECENT_APPS);
// Eat the longpress so it won't dismiss the recent apps dialog when
// the user lets go of the home key
mHomeLongPressed = true;
}
if (mLongPressOnHomeBehavior == LONG_PRESS_HOME_RECENT_DIALOG) {
showOrHideRecentAppsDialog(RECENT_APPS_BEHAVIOR_SHOW_OR_DISMISS);
} else if (mLongPressOnHomeBehavior == LONG_PRESS_HOME_RECENT_SYSTEM_UI) {
try {
IStatusBarService statusbar = getStatusBarService();
if (statusbar != null) {
statusbar.toggleRecentApps();
}
} catch (RemoteException e) {
Slog.e(TAG, "RemoteException when showing recent apps", e);
// re-acquire status bar service next time it is needed.
mStatusBarService = null;
}
}
}
只要把handleLongPressOnHome裡面做出相對應的處理就ok
webservice 的概念 webservice 就是一個應用程序,它提供一種通過web方式訪問的api.解決兩個系統或者(應用程序)
魅族這次推出的魅藍metal是基於yunos版本的flymeOS,一些喜歡搞機的用戶當然希望能用回基於Android的flyme,那麼小編來給出一些消息和刷
上上周寫的一個demo,仿照網易一元奪寶的下拉刷新效果。原效果是(第一部分)一個小太陽拉下來,然後松開回彈上去,(第二部分)再掉下來一個硬幣進行中軸旋轉。本文實現的效果的
上一篇文章中我們講解了android app中的升級更新操作,app的升級更新操作算是App的標配了,升級操作就是獲取App的升級信息,更新操作是下載,安裝,更新app,