gpt4 book ai didi

java - 处理 FLAG_ACTIVITY_NEW_TASK 的 onNewIntent

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:39:13 25 4
gpt4 key购买 nike

我的 Activity 以 singleTop 模式和 C2DM 接收器运行。根据某些通知,我需要运行该 Activity ,并且我是这样做的:

Intent activity = new Intent(context, klass);
activity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(activity);

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

如何通知正在运行的 Activity 有关通知?

最佳答案

斯凯瑞德,我相信我有完全相同的情况。但是我注意到当手机处于 sleep 状态并且一个新的 Intent 被发送到 Activity 时它不会启动 Activity 直到屏幕打开(出于我的目的我想要屏幕打开)。

我的解决方案是在我的 C2DM 接收器中获取唤醒锁。

PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK|PowerManager.ACQUIRE_CAUSES_WAKEUP, TAG);
mWakeLock.acquire();

当然,请务必在您的 Activity 中使用 mWakeLock.release() 释放锁。

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

getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);

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

关于java - 处理 FLAG_ACTIVITY_NEW_TASK 的 onNewIntent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9816334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com