处理FLAG_ACTIVITY_NEW_TASK的onNewIntent

ska*_*red 5 java notifications android android-intent

我让Activity在singleTop模式和C2DM接收器中运行.在某些通知中,我需要运行该活动,并以这种方式执行:

Intent activity = new Intent(context, klass);
activity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(activity);
Run Code Online (Sandbox Code Playgroud)

当活动如果背景(例如之前按下Home按钮),一切正常.但是,当我按下电源按钮关闭屏幕时,无法通知运行活动有关某些更改(onNewIntent从未调用过).

如何通知有关通知的运行活动?

Pat*_*ick 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();
Run Code Online (Sandbox Code Playgroud)

当然,一定要在 Activity 中使用 mWakeLock.release() 释放锁。

这是奇怪的行为,它似乎与其他 Android Activity 行为不一致。就我而言,我使用的是 singleTask 活动(我不确定您使用的活动类型,您没有说明)。如果堆栈顶部没有 Activity 的实例,并且手机处于睡眠状态,我的 Activity 将启动,我可以在 onCreate() 中使用以下内容:

getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
Run Code Online (Sandbox Code Playgroud)

但是,如果该活动位于堆栈顶部并且手机处于睡眠状态,则在我打开屏幕之前该活动不会启动。希望这对你有用。如果您不需要屏幕打开,我会尝试使用唤醒锁的其他标志。