我让Activity在singleTop模式和C2DM接收器中运行。在某些通知中,我需要运行该活动,并且我这样做:
Intent activity = new Intent(context, klass);
activity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(activity);
当活动如果背景(例如之前按下Home按钮),一切正常。
但是当我按下电源按钮关闭屏幕时,无法通知运行活动有关某些更改(onNewIntent
从未调用过)。
如何通知有关通知的正在运行的活动?
答案 0 :(得分:4)
Skayred, 我相信我的情况完全相同。然而,我注意到当手机睡着并且新的意图被发送到活动时,它将不会启动活动,直到屏幕打开(为了我的目的,我希望屏幕打开)。
我的解决方案是在我的C2DM接收器中获取唤醒锁。
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK|PowerManager.ACQUIRE_CAUSES_WAKEUP, TAG);
mWakeLock.acquire();
当然,请务必在活动中使用mWakeLock.release()释放锁。
这是一种奇怪的行为,似乎与其他Android活动行为不一致。在我的情况下,我使用singleTask活动(我不确定你使用什么类型的活动,你没有说明)。如果堆栈顶部没有活动实例,并且手机处于睡眠状态,我的活动将启动,我可以在onCreate()中使用以下内容:
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
但是,如果活动位于堆栈顶部且手机处于睡眠状态,则在我打开屏幕之前不会启动活动。希望这适合你。如果您不需要屏幕,我会尝试使用其他标志为唤醒锁。
答案 1 :(得分:1)
根据您的配置,这应该有效:
这也是在您的应用中获得更好设计的好机会。