Androidのbackキーブロック処理

4046 ワード

Backキーは携帯電話の後退キーで、Androidでこのボタンのイベントを取得するには2つの方法があります.**
一:Backキーイベントのキャプチャ方法
**
1.ボタン押下イベントを直接取得し、ActivityのonKeyDownメソッドを直接書き換える.コードは以下の通り.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { //      BACK,      
           Toast.makeText("lyj_test","now_is_back_event",1).show();
            return true;
    }
       return super.onKeyDown(keyCode, event);
}

2、onBackPressedの書き換え方法
Android 2.0では、ActivityがBackキーの押下イベントを単独で取得できるように、onBackPressedメソッドを直接書き換える新しい方法が追加されました.コードは以下の通りです.
@Override
public void onBackPressed() {
    //         ,    :       2.0     sdk
    return;
}

**
二:Androidホームキーとbackキーの違い
**
backキーAndroidのプログラムは意図的に終了する必要はありません.携帯電話のbackキーを押すと、システムはプログラムスタックの最上位レベルのActivityのDestroy()メソッドをデフォルトで呼び出し、現在のActivityを破棄します.このActivityが他のActivityによって起動すると、OnCreate()メソッドが再起動され、スタック内のすべてのActivityがポップアップ終了すると、アプリケーションは終了する.プログラム中にサービス等が存在すると言うのであれば、適切な位置で傍受処理してもよい.
ホームキーAndroidプログラムの非表示は、携帯電話のホームキーを押すと、プログラムスタックの最上位のActivityのstop()メソッドがデフォルトで呼び出され、アプリケーション全体が非表示になります.携帯電話のデスクトップのアプリケーションアイコンを再度クリックすると、最上位のActivityのOnResume()メソッドが呼び出され、プログラムを再開するのではなく、直接入ります.プログラムスタックの最上位レベルのActivityが直接表示されます.
backキーはデフォルトで現在のActivityをfinishに、homeキーはActivityをonStopに与えるだけです.HOMEキーとBACKキーを押すActivityのライフサイクルを見てみましょう.HOMEキーの実行順序:onPause->onStop->onRestart->onStart->onResume BACKキーの順序:onPause->onStop->onDestroy->onCreate->onStart->onResume onPauseあまり時間のかかる作業はしないでください.
三:Backキーを押すとホームキーを押す時の効果を実現する
1:Android 2.0の前にボタンイベントを傍受する必要があり、backキーが押されたかどうかを判断する2:Android 2.0の後にシステムは、backキーイベントを傍受するためのonBackPressed()メソッドを提供しているので、onBackPressed()メソッドを書き換えるだけでよい
@Override
public void onBackPressed() { 
    //  Home    
    //super.onBackPressed();        ,         back     
    Intent intent= new Intent(Intent.ACTION_MAIN); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    intent.addCategory(Intent.CATEGORY_HOME); 
    startActivity(intent);  
}

また、アプリケーションを終了したい場合は、以下のように自分で方法を書くことができます.
public void exitProgrames(){ 
        Intent startMain = new Intent(Intent.ACTION_MAIN); 
        startMain.addCategory(Intent.CATEGORY_HOME); 
        startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        startActivity(startMain); 
        android.os.Process.killProcess(android.os.Process.myPid()); 
}