@j__m が言ったように、TYPE_KEYGUARD
サポートされなくなりました。他の質問で議論されている他の多くの方法がありますが、最新の API レベルでは機能しません。私はあなたの労力を節約し、私が行ったいくつかの検索、試行錯誤を共有したいと思います. 多くの方法を試しましたが、API レベル 17 ではどれもうまくいきませんでした。
Androidでホームボタンが押されたときにメソッドを呼び出す、
Androidでホームボタンの押下を検出し、
私が試したもののいくつか(上記の回答を含む)、機能しなかったのは次のとおりです。
keyCode==KeyEvent.KEYCODE_HOME
上記のように、さまざまな方法で使用します。さて、
KeyEvent.KEYCODE_HOMEのドキュメントを読むと、 と書かれていThis key is handled by the
framework and is never delivered to applications
ます。そのため、現在は有効ではありません。
使ってみonUserLeaveHint()
ました。.The documentation says:
Called as part of the activity lifecycle when an activity is about
to go into the background as the result of user choice.
For example,
when the user presses the Home key, onUserLeaveHint() will be
called,
but when an incoming phone call causes the in-call Activity
to be automatically brought to the foreground
ホームボタンを検出している現在のアクティビティ内からアクティビティを呼び出していない場合は、このアプローチを使用できる可能性があります。Activity
それに関する問題は、私の場合のように、呼び出しているアクティビティ内から開始すると、メソッドも呼び出されることですonUserleaveLint()
。詳細については、 Android onBackPressed/onUserLeaveHintの質問を参照してください。したがって、ホームボタンを押すだけで通話できるかどうかはわかりません。
最後に、次のことがうまくいきました:
Androidで現在実行中のアプリケーションを確認する方法を参照してください。、ホームボタンを長押しすると表示される最近のタスクである場合、バックグラウンドに送信されたと言えます(つまり、ホームボタンが押されました)。
したがって、onPause()
押されたホームボタンを検出しようとしているアクティビティの中で、アプリケーションがバックグラウンドに送信されたかどうかを確認できます。
@Override
public void onPause() {
if (isApplicationSentToBackground(this)){
// Home button pressed
// Do what you want to do on detecting Home Key being Pressed
}
super.onPause();
}
自分のアプリが最後にバックグラウンドに送信されたアプリかどうかを確認する関数:
public boolean isApplicationSentToBackground(final Context context) {
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> tasks = am.getRunningTasks(1);
if (!tasks.isEmpty()) {
ComponentName topActivity = tasks.get(0).topActivity;
if (!topActivity.getPackageName().equals(context.getPackageName())) {
return true;
}
}
return false;
}
Home Button
これを使用して、クリックを正常に検出できました。これがあなたにとってもうまくいくことを願っています。