問題1:監聽home鍵
第一種方式:android 對home鍵的監聽,加上了權限,必須取得對處理home鍵事件的權限,才能對home鍵進行操作,
只對2.2及以前的系統有效。
1,加上權限
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
就是讓鍵盤守衛失去能了,根據英文大體是這個意思
2,重載以下兩個方法@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(KeyEvent.KEYCODE_HOME==keyCode){
//寫要執行的動作或者任務
}
return super.onKeyDown(keyCode, event);
}
@Override
public void onAttachedToWindow(){
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
super.onAttachedToWindow();
}
第二種方式:通過廣播方式監聽
class HomeKeyEventBroadCastReceiver extends BroadcastReceiver {
static final String SYSTEM_REASON = "reason";
static final String SYSTEM_HOME_KEY = "homekey";//home key
static final String SYSTEM_RECENT_APPS = "recentapps";//long home key
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
String reason = intent.getStringExtra(SYSTEM_REASON);
if (reason != null) {
if (reason.equals(SYSTEM_HOME_KEY)) {
// System.out.println("***************home key處理點 ***************");
// home key處理點
DemoApplication.Home_key=true;
// showNotification();
} else if (reason.equals(SYSTEM_RECENT_APPS)) {
// long home key處理點
}
}
}
}
}
註冊廣播
HomeKeyEventBroadCastReceiver receiver = new HomeKeyEventBroadCastReceiver();
registerReceiver(receiver, new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
問題2:安裝系統SD卡里面的apk或者原有的程序更新版本的時候,會遇到升級安裝成功之後的一個選擇——“打開”和“完成”,點擊完成沒有問題,但是,如果點擊了"打開",然後按Home鍵,從應用程序列表裏面選擇應用程序圖標進入,這個時候就會重新啓動了一個應用程序,退出之後就正常了。
解決方案:監聽home鍵,當home後設全局變量DemoApplication.Home_key=true;然後啓動應用的時候判斷DemoApplication.Home_key
if(DemoApplication.Home_key){//home鍵後點擊應用入口
finish();
}else{
//正常啓動入口
}
或者在程序入口的activity中檢測該activity是不是程序的root Activity。如果不是就可以直接finish此activity,程序會從棧中還原以前的狀態。
具體代碼如下:
在應用啓動的activity的Oncreate方法中添加如下代碼即可:
if (!isTaskRoot()) {
// Android launched another instance of the root activity into an existing task
// so just quietly finish and go away, dropping the user back into the activity
// at the top of the stack (ie: the last state of this task)
finish();
return;
}else{
}
問題3:返回鍵模擬home鍵,
Intent intent2 = new Intent();
intent2.setAction(Intent.ACTION_MAIN);
intent2.addCategory(Intent.CATEGORY_HOME);
startActivity(intent2);