2

バックグラウンドで実行されるサービスがあります。特定のアクティビティが実行されている場合にのみ、アクションを実行できればいいのにと思います。アクティビティが実行されているかどうかをサービスからテストするにはどうすればよいですか?

4

3 に答える 3

2

パッケージ マネージャーとアクティビティ マネージャーを使用できます。

PackageManager : デバイスに現在インストールされているアプリケーション パッケージに関連するさまざまな種類の情報を取得するためのクラス。このクラスは次の方法で見つけることができますgetPackageManager().

ActivityManager : システムで実行されているアクティビティ全体と対話します。

ただし、より簡単なアプローチは次のとおりです。Activity(onCreate/onResume) を開始するときに、service.send(..) でメッセージを送信するか、service.onStartCommand(..) でインテントを送信して、特定のアクティビティが終了したことをサービスが認識できるようにします。始めました。

于 2012-11-16T08:41:58.590 に答える
0

逆に、アクティビティからサービスにインテントを送信することもできます。

たとえば、 Activity にインテントを送信してonResume、アクティビティがライブであるonPauseことをサービスに伝え、別のインテントを に送信して、アクティビティが停止したことをサービスに伝えることができます。

于 2012-11-16T08:43:23.610 に答える
0

パッケージ名で以下のメソッドを使用します。アクティビティのいずれかがフォアグラウンドにある場合は 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;
}
于 2012-11-16T08:45:13.933 に答える