我需要为我的应用程序结构提供一些建议。它是关于使用GCM进行消息传递的。
所以我在GcmListenerService中获取了onMessageReceived调用(带有消息数据)。
现在有两种情况:
a)活动堆栈中已经有一个聊天活动,我应该发送一个含有新消息信息的Intent,以便活动更新其视图
b)目前还没有打开的聊天活动,所以我只是要显示通知。
重要的是,如果在堆栈顶部有活动,我不想显示通知。
如何检测活动堆栈中是否有聊天活动?
答案 0 :(得分:0)
可以使用 ActivityManager检查当前任务及其堆栈。
因此,要确定活动是否是最后一个活动:
在清单中请求 android.permission.GET_TASKS 权限。
使用以下代码:
ActivityManager mngr = (ActivityManager) getSystemService( ACTIVITY_SERVICE );
List<ActivityManager.RunningTaskInfo> taskList = mngr.getRunningTasks(10);
if(taskList.get(0).numActivities == 1 &&
taskList.get(0).topActivity.getClassName().equals(this.getClass().getName())) {
Log.i(TAG, "This is last activity in the stack");
}
只有当您有单个任务时,上述代码才有效。如果您的应用程序可能存在多个任务 - 您需要检查其他taskList元素。阅读有关任务任务和后台堆栈的更多信息
第二个解决方案是
public boolean isRunning(Context ctx) {
ActivityManager activityManager = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> tasks = activityManager.getRunningTasks(Integer.MAX_VALUE);
for (RunningTaskInfo task : tasks) {
if (ctx.getPackageName().equalsIgnoreCase(task.baseActivity.getPackageName()))
return true;
}
return false;
}