0

アプリケーション全体がフォーカスを失った場合 (着信やホーム キーなど) にのみ、イベントをログに記録する必要があります。

同じアプリ内の別のアクティビティではなく、外部イベントからアクティビティが一時停止または停止されたことを伝える最良の方法は何ですか?

ありがとう

4

2 に答える 2

2

onStop()アクティビティが停止したときに、アプリがまだメソッドの一番上にあるかどうかを確認できます。

private boolean isAppOnTop(){
    ActivityManager am = (ActivityManager) getSystemService(Service.ACTIVITY_SERVICE); 
    List<ActivityManager.RunningTaskInfo> tasks; 
    tasks = am.getRunningTasks(1); 
    RunningTaskInfo running = tasks.get(0);
    if(running.topActivity.getPackageName().equals("your.package.name")){
        return true;
    }
    else{
        return false;
    }
}

このメソッドは、実行中のすべてのタスクを最初に照会します。一般に、フォーカスのあるタスクはスタックの一番上にあります。このタスクがパッケージに属しているかどうかを確認してください。

于 2012-11-08T18:47:39.910 に答える
1

したがって、get_tasks権限を設定する場合に完全に有効なデニスの回答とともに、次のオプションを検討しました(主に、onstop / onpauseが呼び出されたときに何らかのフラグを設定することに基づいています)。

  • 新しいアクティビティを開始するとき。onStopメソッドで、フラグがtrueに設定されている場合、割り込みはアプリの新しいアクティビティによって引き起こされました。

  • アクティブなビューをカウントするグローバル変数があります。onStartsでインクリメントし、onStopsでデクリメントします。0の場合、目に見えるアクティビティはありません。

  • onStartは、アクティビティに対してアクティブフラグをtrueに設定します。onStopはフラグをfalseに設定します。(状態は設定に保存することもできます)。アクティビティがフォーカスを失った場合、すべてのフラグを確認できます。

アプリは比較的シンプルなので、最初のオプションを選択しました。

于 2012-11-13T17:38:33.167 に答える