gpt4 book ai didi

java - 通过 "Always on Display"启动应用程序并锁定屏幕

转载 作者:太空宇宙 更新时间:2023-11-03 11:00:50 26 4
gpt4 key购买 nike

我有一个应用程序,如果它收到一条消息,它会自行启动。为此,我使用这个启动参数:

后台服务.java:

Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD)
.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED)
.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON)
.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
startActivity(intent);

MainActivity.java --> onCreate:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

现在我从我的应用程序的用户那里收到一条消息,说这不适用于他的“Samsung Galaxy S7”,他注意到他使用了“始终显示”功能。

我在网上搜索了一段时间,但没有找到解决方案。是否还有更多“标签”要添加?

最佳答案

我遇到了类似的问题。您添加到 Intent 的标志不是针对 Intent,而是针对 Window - 无需将它们添加到那里。您在 onCreate() 中正确使用它们。但问题不是由标志引起的。

在我的例子中,问题是我试图启动的 Activity 使用了一个主题,它有 <item name="android:windowIsFloating">true</item>在里面。我修改了我的逻辑,所以我不必使用它。如果您绝对必须使用“android:windowIsFloating”,另一种可行的解决方法是使用

PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);

screenWakeLock = powerManager.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, "TEST");

然后你就可以调用

screenWakeLock.acquire(5000);

在设置标志之前。您当然可以编辑超时。这有点 hack,因为 PowerManager.SCREEN_DIM_WAKE_LOCK 已被弃用。但它确实适用于 Android 8.0 和 Samsung Experience 版本 9.0 的三星。整个事情显然是一些三星问题,因为相同的代码,没有变通办法,就像 Pixel Ambient 显示的魅力一样,始终开启。

关于java - 通过 "Always on Display"启动应用程序并锁定屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43641964/

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