端末Backキーの動作をHomeキーの動きに | Change back key operation to home key action | Android

スポンサーリンク

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自体は大量に存在します。詳しくは

https://developer.android.com/reference/android/view/KeyEvent.html

をご参照ください。

よく使う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);
    }
}