2011-06-20 17 views
2

私が知るしようとしている私の、あるいは全くBroadcastReceiverから次のコードを使用して、フォアグラウンドのアプリケーション:フォアグラウンドで私のAndroidアプリがどのように検出されますか?

boolean inForeground = false; 
ActivityManager actMngr = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE); 
List<RunningAppProcessInfo> runningAppProcesses = actMngr.getRunningAppProcesses(); 
for (RunningAppProcessInfo pi : runningAppProcesses) { 
    if (context.getPackageName().equals(pi.processName)) { 
     inForeground = pi.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND; 
    } 
} 

しかし、このコードは常に、バックグラウンドでも、私のアプリケーションを返します。

if (actMngr.getRunningTasks(1).get(0).topActivity.getPackageName().equals(context.getPackageName())){ 
    Log.d(TAG, "My"); 
} else { 
    Log.d(TAG, "Not my"); 
} 

は、このコードが正しいかどうか: 私は次の解決策を見つけましたか? または、誰かがもっとシンプルな変種を知っていますか? ありがとう!

+0

あなたの2番目の解決策はほぼ正しいと私は思います。 'get(0)'によって返されたRunningTaskInfoの 'numRunning'フラグをチェックする必要があります。一番上のアクティビティが停止され、持続される可能性があります。 –

答えて

4

最も直接的な方法は、onResume()onPause()を使用してフォアグラウンドステータスをトラッキングすることです。 Activity lifecycle modelを参照してください。

+0

しかし、もし私が100以上の活動をしていて、私は** BroadcastReceiver **から私の、または、何のアプリも知る必要がありますか? ** BroadcastReceiver **は、AndroidManifest.xmlファイルで定義されているため、1つのアクティビティを参照することはありません。 – Sergikoff

+0

あなたは何を達成しようとしていますか?つまり、フォアグラウンドのアクティビティが同じパッケージに含まれているかどうかを知る必要があるのはなぜですか? –

関連する問題