4

そのコードにより、4.0未満のバージョンでHomeKeyを処理することに成功しましたが、4.0以降のバージョンでHomekeyを処理するのに問題があります。4.0以降のバージョンでHomeKeyプレスを処理するためにその問題を解決するのを手伝ってください.Homeプレスを無効にするわけではないからです.

@Override
    public void onAttachedToWindow() 
    {
        // TODO Auto-generated method stub
      if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) 
      {
        super.onAttachedToWindow();
        this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
             getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
}

    }   
4

2 に答える 2

2

@j__m が言ったように、TYPE_KEYGUARDサポートされなくなりました。他の質問で議論されている他の多くの方法がありますが、最新の API レベルでは機能しません。私はあなたの労力を節約し、私が行ったいくつかの検索、試行錯誤を共有したいと思います. 多くの方法を試しましたが、API レベル 17 ではどれもうまくいきませんでした。

Androidでホームボタンが押されたときにメソッドを呼び出す

Androidでホームボタンの押下を検出し

私が試したもののいくつか(上記の回答を含む)、機能しなかったのは次のとおりです。

  1. keyCode==KeyEvent.KEYCODE_HOME上記のように、さまざまな方法で使用します。さて、 KeyEvent.KEYCODE_HOMEのドキュメントを読むと、 と書かれていThis key is handled by the framework and is never delivered to applicationsます。そのため、現在は有効ではありません。

  2. 使ってみ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これを使用して、クリックを正常に検出できました。これがあなたにとってもうまくいくことを願っています。

于 2013-07-23T04:59:55.027 に答える
0

TYPE_KEYGUARD非システム アプリではサポートされなくなりました。ホーム キーを処理する唯一の方法は、ランチャーになることです。

于 2013-07-23T04:55:26.473 に答える