cod*_*ber 6 android android-c2dm android-activity
我正在使用C2DM,我的BroadcastReceivers将C2DM事件传播到本地服务.该服务通过将id发送到我的webserver来完成注册,它负责让设备知道新消息,但是如果应用程序(其中一个活动)已启动,我们希望用新数据向该活动发送意图,它可以更新,如果不是NotificationManager用于通知用户.
问题是,如何知道活动正在运行?Application对象不是一个选项,因为Service是应用程序的一部分,它显然会出现.在每个应用程序的onDesroy中取消注册也不是一个选项,因为它可能会在方向更改中发生...
完成任何标准方法吗?
ρяσ*_*я K 17
解决方案1: 您可以使用ActivityManager检查活动是否正在运行:
public boolean isActivityRunning() {
ActivityManager activityManager = (ActivityManager)Monitor.this.getSystemService (Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> activitys = activityManager.getRunningTasks(Integer.MAX_VALUE);
isActivityFound = false;
for (int i = 0; i < activitys.size(); i++) {
if (activitys.get(i).topActivity.toString().equalsIgnoreCase("ComponentInfo{com.example.testapp/com.example.testapp.Your_Activity_Name}")) {
isActivityFound = true;
}
}
return isActivityFound;
}
Run Code Online (Sandbox Code Playgroud)
需要为您的清单添加权限..
<uses-permission android:name="android.permission.GET_TASKS"/>
Run Code Online (Sandbox Code Playgroud)
解决方案2: 您可以在活动中使用静态变量来检查它是否正在运行,并将其存储在服务或广播接收器访问的位置:
static boolean CurrentlyRunning= false;
public void onStart() {
CurrentlyRunning= true; //Store status of Activity somewhere like in shared //preference
}
public void onStop() {
CurrentlyRunning= false;//Store status of Activity somewhere like in shared //preference
}
Run Code Online (Sandbox Code Playgroud)
我希望这可以帮到你!
| 归档时间: |
|
| 查看次数: |
18018 次 |
| 最近记录: |