ActivityManager イベントをリッスンしますか?
-
20-09-2019 - |
質問
何らかの方法で ActivityManager のイベントをリッスンすることは可能ですか。活動はいつ始まりますか?ActivityManager はブロードキャストを送信しますか?それを示すものは何も見つかりませんでした。
基本的にやるべきこと:特定の(サードパーティの)アプリが起動またはフォーカスされるたびに、自分のアプリでアクティビティの 1 つを起動したいと考えています。問題は、サードパーティのアプリが実際に表示される前にこれを行う必要があることです。
回避策としてこれまで試したことは次のとおりです。
- Logcat の出力:0.8秒ごとにlogcatをクエリします(ActivityManagerイベントのみを表示するようにフィルタリングされています)が、これにより多くのリソースが消費されます
- getRunningTasks:電話の速度も大幅に低下し、アクティビティが実行中であっても現在フォーカスされていない可能性があるため、あまり安全ではありません
何か案は?
解決
私はglabalシステム状態を処理するために、何実際に他のレガシー方法がないと仮定し、唯一の
(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
ActivityManager.getRecentTasks() - 。後のために、最新のある第1及び古いもので、現在実行中のタスクのリストを返します。
詳細はドキュメントのチェックのために
AndroidはLinuxのですが、おそらくあなたは、
のようなシステムツールを実行することができますRuntime.getRuntime().exec("ps -aux | grep smth")
しかし、私は特定のJavaアプリケーションを検出するのは難しいことだと思います。
他のヒント
私はあなたがトップレベルに起動するためにどのアクティビティを決定するために起動モードを使用することができると思います。質問をご確認ください:アンドロイドsingleTaskやsingleInstance起動モードをに。多分それはあなたを助けるでしょう。
私はAndroidのソースで見ていたが、放送されたすべてのイベントがあるように思えません。
https://android.googlesource.com/platform/packages/providers/ApplicationsProvider の
所属していません StackOverflow