0

私のアプリケーションでは、A がメインのアクティビティです。このA、B、C、Dなどのようなものをナビゲートします.Googleクラウドプッシュ通知を実装しました。プッシュ通知が来ると、通知が生成され、クリックするとアクティビティ X に移動します。スタックが空でない場合は問題ありません。スタックが空で、プッシュ通知から起動されたアクティビティ x が起動アクティビティとして機能する場合。つまり、ホーム ボタンを長押ししてアプリを選択すると、スタックが再び空になり、A アクティビティではなく X アクティビティ (通知から起動されたアクティビティ) に移動します。 。私を助けてください。

4

1 に答える 1

2

onUserLeaveHint()最も簡単なのは、Activityをオーバーライドして終了することです。

保護されたボイドに関するドキュメントからonUserLeaveHint()

ユーザーの選択の結果、アクティビティがバックグラウンドに移行しようとしているときに、アクティビティ ライフサイクルの一部として呼び出されます。たとえば、ユーザーがホーム キーを押すと onUserLeaveHint() が呼び出されますが、電話の着信によって通話中のアクティビティが自動的に前面に表示されると、中断されたアクティビティで onUserLeaveHint() は呼び出されません。 . 呼び出される場合、このメソッドはアクティビティの onPause() コールバックの直前に呼び出されます。

このコールバックと onUserInteraction() は、アクティビティがステータス バーの通知をインテリジェントに管理できるようにすることを目的としています。具体的には、活動が通知をキャンセルする適切な時期を決定するのを支援するためです。

疑似コード、

    @Override
    protected void onUserLeaveHint() {
        super.onUserLeaveHint();
        finish();
    }

参考までに確認することもできthis answerます。

UPDATE:

HOME キーが押されたことを検出する別の回避策は、ActivityManager でアクティビティを確認することです。HOME ボタンを押すと、BaseActivity はアクティビティ リストの 2 番目の位置に留まります。したがって、以下のように ActivityManager を使用して確認できます。

 @Override
    protected void onUserLeaveHint() {
        super.onUserLeaveHint();
        Log.e("onUserLeaveHint()", "Yes");
        ActivityManager activityManager = (ActivityManager)
                                getSystemService(Context.ACTIVITY_SERVICE);
        List<RunningTaskInfo> recentTasks = activityManager
                                       .getRunningTasks(Integer.MAX_VALUE);
        for (int i=0; i<recentTasks.size(); i++) {
            if (i == 1 && recentTasks.get(i).baseActivity.toShortString()
                                        .indexOf(getPackageName()) > -1) {
                Log.e("Home Pressed", "Yes");
                break;
            }
        }
    }

また、追加することを忘れないでください

<uses-permission android:name="android.permission.GET_TASKS"/>

AndroidManifest ファイルのアクセス許可。詳細は から参照できますthis blog

于 2012-08-27T04:45:50.330 に答える