Backキーを感知する
端末のBackキーを押した場合とHomeキーを押した場合、挙動が異なります。
そのため、Homeキーの扱いにしたいこともあります。今回はその方法です。
また、Backキーを無効にしたいこともあるでしょう。
その方法も記載します。Intentを使います。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) { //BACKキーを押した場合
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
return super.onKeyDown(keyCode, event);
// return true; //無効にするには trueを返せばよい
} else {
return super.onKeyDown(keyCode, event);
}
}
となります。これで、HOMEと同じ扱いになります。
※無効化はユーザーにストレスを与えたり、不具合、場合によっては故障したと勘違いさせることもありますので、お勧めしません。
BackとHomeの違いは?
ライフサイクル絡みが異なります。まぁ、この点お分かりいただいているからこそ、必要な機能ではあると思いますが。
論より何とか、、ということで次のサンプルコードを実行してBackキーやHomeキーを押してみてください。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("Log0","onCreate");
}
@Override
protected void onResume(){
super.onResume();
Log.d("Log0","onResume");
}
@Override
protected void onPause(){
super.onPause();
Log.d("Log0","onPause");
}
@Override
protected void onDestroy(){
super.onDestroy();
Log.d("Log0","onDestroy");
}
}
BackキーとHomeキーの違いを理解できると思います。
これがいわゆる、ライフサイクルです。ただし、BackやHomeの挙動は端末によって必ずしもすべて一致するわけではないことに注意しなければなりません。
また、残念ながらユーザーは何をするかわかりません。メモリクリーナーを使うかもしれません。この機能は過度に頼るべきではないように思います。
その他のKeyEvent
KeyEvent自体は大量に存在します。詳しくは
KeyEvent | API reference | Android Developers
をご参照ください。
よく使うKeyEventは、
| キー | 対象 |
| KEYCODE_APP_SWITCH | アプリケーション切り替え |
| KEYCODE_BACK | Backキー |
| KEYCODE_HOME | Homeキー |
| KEYCODE_VOLUME_DOWN | ボリュームDown |
| KEYCODE_VOLUME_UP | ボリュームUp |
となります。
実際は下のサンプルコードを走らせて取得したほうが楽ですし、わかりやすいでしょう。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
Log.d("Log0","keyCode:"+keyCode+" event:"+event);
return super.onKeyDown(keyCode, event);
}
}