現在表示されているユーザーのアプリケーションを特定しようとしています。 これを行うには、activityManager.getRunningAppProcesses()
メソッドを使用します。activityManager.getRunningAppProcesses()を使用してフォアグラウンドプロセスを取得する(リアル)
この方法はAndroid 5.1.1ではサポートされていません。これは問題ありません。
最初は魅力的でしたが、私はRunningAppProcessInfosのリスト を繰り返して重要性をチェックしています。
tl; dr 現在のフォアグラウンドプロセスを取得し、誤検出を防止する正しい方法は何ですか?リストの順序はどのように行われますか?APIは指定されていないと指示します。それらを正しく注文する方法はありますか?私がやっていること
:
を不幸にActivityManagerによって返されたリストは、すべてのデバイス上で異なっています。一部のデバイスは、プロセスが現在表示されていなくても、重要度100(FOREGROUND)の複数の情報を返します。
これは、私が誤検出が多いという問題を引き起こしました。 たとえば、 のfacebookがフォアグラウンドになるたびに、facebookでテストし、トーストを作成しました。私はホームに切り替えたので、ランチャーには がフォアグラウンドプロセスになっているはずです。それは10秒後、そのあとフェイスブック がリストに重要なFOREGROUNDで表示されました(それは開いていても見えませんでした)、私は偽陽性になりました。
一部のデバイスでは、最近のプロセスによってリストが上に並べられていることが認識されました。 だから私は、次のようなアプローチしようとすることを決めた:appProcesses.get(0)で
ActivityManager.RunningAppProcessInfo appProcess = appProcesses.get(0);
final String processName = appProcess.processName;
final String packageName = removeProcessSuffix(processName);
if (appProcess.importance == FOREGROUND || appProcess.importance == VISIBLE){
//do something, like the toast
}
を。私は最初の要素だけを調べ、バグは消えました。もはや偽陽性はない。
しかし、、今では一部のデバイスでは、フォアグラウンドプロセスがもうありません。彼らは決してリストを注文しないので。 たとえば、ソニーの一部のスマートフォンが候補者の一部です。私はリストを取得しますが、実際に目に見えるプロセスはインデックス11程度です。
偽陽性のない、現在のフォアグラウンドプロセスを得るために何をすべきかわからない。
現在のフォアグラウンドプロセスを取得し、誤ったポストを防ぐ正しい方法は何ですか?リストの順序はどのように行われますか?APIは指定されていないと指示します。 正しく注文する方法はありますか?
ありがとうございました!
これはhttp://stackoverflow.com/questions/2166961/determining-the-current-foreground-application-from-a-background-task-or-serviceの似ています。 – alzee
私はテストしませんでしたが、これはあなたに役立つように見えます:http://stackoverflow.com/a/33886313/4973904 –
@ÁlissonMoraisさて、最初は応答に感謝しましたが、完全な質問をお読みですか?返されたリストの最初の項目のみを使用することはできません。これは、30%のデバイスではリストがソートされないためです。 – JacksOnF1re