kma*_*mur 8 java android push-notification google-cloud-messaging
我有几个活动和一个处理GCM传入消息的意图服务.
现在,每次推送,我都会发送一个通知,在用户点击它之后,他会被重定向到适当的屏幕.
我想改变这种行为,即如果应用程序可见(任何活动在前台),而不是通知,则显示对话框消息(通过适当的操作).
知道如何实现它吗?
我有2个想法,但没有一个是完美的:
还有其他方法吗?
我没有测试它,但文档说您可以获取每个任务正在运行的活动的数量。
尝试在当前正在运行的任务中找到您的应用程序的任务:
ActivityManager acitivityManager = (ActivityManager)
context.getSystemService(Context.ACTIVITY_SERVICE);
// Get the top of running tasks, limit by 100
List<RunningTaskInfo> tasks = acitivityManager.getRunningTasks(100);
for (RunningTaskInfo taskInfo : tasks) {
if (YOUR_PACKAGE_NAME.equals(taskInfo.baseActivity.getPackageName())) {
if (taskInfo.numRunning > 0) {
// Show dialog
} else {
// Show notification
}
break;
}
}
Run Code Online (Sandbox Code Playgroud)
谷歌添加了一条注释getRunningTasks()
:
注意:此方法仅用于调试和呈现任务管理用户界面。这不应该用于应用程序中的核心逻辑,例如根据此处找到的信息在不同行为之间做出决定。此类用途不受支持,并且将来可能会中断。例如,如果多个应用程序可以同时主动运行,则出于控制流目的而对此处数据的含义所做的假设将是不正确的。
因此,使用它需要您自担风险。
还要检查 GCM 广播是否已排序。如果是这样,您可以BroadcastReceiver
使用每个活动中的其他默认值“覆盖”您的默认值。就玩s的优先级IntentFilter
吧。当BroadcastReceiver
具有较高优先级的接收到该消息时,它可以中止其进一步的传播。对于您的应用程序来说,这意味着当某些应用程序Activity
运行时,它会注册显示对话框的接收器并中止广播。如果没有活动活动,则您的默认接收器会显示通知。
归档时间: |
|
查看次数: |
641 次 |
最近记录: |