これはもっと疑問です。現在、私のコードは正常に動作していますが、正しい方法で実行していることを確認したいと考えています。
アクティビティがフォアグラウンドで実行されているかどうかをチェックするサービスがあります。そうである場合は、アクティビティにブロードキャストを送信するため、アクティビティは画面上のいくつかのものを更新します。
サービスで作成しIntentFilter
ました:
com.harkdev.ServerStatus.SERVER_UPDATED
ここで、サービスはアクティビティがフォアグラウンドにあるかどうかを知る必要があるためIsActivityRunning()
、実行中のタスクを から読み取る メソッドを使用しApplicationManager
ます。これは、GET_TASKS
許可を設定する必要があることを意味します。
SERVICE と ACTIVITY の両方が同じパッケージに含まれているため、この情報を取得するより良い方法はありますか?? そして、GET_TASKS
パーミッションの設定を避けてみてください??
これは私のサービスのコードです:
if (IsActivityRunning()) {
Intent localIntent = new Intent(SERVER_UPDATED);
SendBroadcast(localIntent, null);
}
IsActivityRunning()
メソッド:
public bool IsActivityRunning() {
ActivityManager manager = (ActivityManager) GetSystemService(ActivityService);
IList<ActivityManager.RunningTaskInfo> runningTaskInfo = manager.GetRunningTasks(1);
ComponentName componentInfo = runningTaskInfo[0].TopActivity;
if (componentInfo.PackageName == "com.harkdev.ServerStatus")
return true;
return false;
}
そして、これは私の活動のコードです:
protected override void OnCreate (Bundle bundle) {
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView (Resource.Layout.Main);
IntentFilter filter = new IntentFilter(ServerStatusCheckService.SERVER_UPDATED);
_receiver = new ServiceBroadcastReceiver ();
_receiver.Received += Receiver_Received;
RegisterReceiver(_receiver, filter);
}