这更让人怀疑。目前,我的代码运行良好,但我想确保我以正确的方式进行操作。
我有一项服务,它检查活动是否在前台运行。如果是,它会向 Activity 发送广播,因此 Activity 会更新屏幕上的一些内容。
我在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);
}