バックグラウンドで実行されるサービスがあります。特定のアクティビティが実行されている場合にのみ、アクションを実行できればいいのにと思います。アクティビティが実行されているかどうかをサービスからテストするにはどうすればよいですか?
3 に答える
パッケージ マネージャーとアクティビティ マネージャーを使用できます。
PackageManager : デバイスに現在インストールされているアプリケーション パッケージに関連するさまざまな種類の情報を取得するためのクラス。このクラスは次の方法で見つけることができますgetPackageManager().
ActivityManager : システムで実行されているアクティビティ全体と対話します。
ただし、より簡単なアプローチは次のとおりです。Activity
(onCreate/onResume) を開始するときに、service.send(..) でメッセージを送信するか、service.onStartCommand(..) でインテントを送信して、特定のアクティビティが終了したことをサービスが認識できるようにします。始めました。
逆に、アクティビティからサービスにインテントを送信することもできます。
たとえば、 Activity にインテントを送信してonResume
、アクティビティがライブであるonPause
ことをサービスに伝え、別のインテントを に送信して、アクティビティが停止したことをサービスに伝えることができます。
パッケージ名で以下のメソッドを使用します。アクティビティのいずれかがフォアグラウンドにある場合は true を返します。
public boolean isForeground(String myPackage){
ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
List< ActivityManager.RunningTaskInfo > runningTaskInfo = am.getRunningTasks(1);
ComponentName componentInfo = runningTaskInfo.get(0).topActivity;
if(componentInfo.getPackageName().equals(myPackage)) return true;
return false;
}