我有一个应用程序,如果它收到一条消息,则从它开始。 为此,我使用此启动参数:
BackgroundService.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);
现在我从我的应用程序的用户那里收到一条消息,说这不适用于他的"三星Galaxy S7",他注意到,他使用的是" Always On Display&#34 ;功能
我在网上搜索了一段时间,但我找不到解决方案。 是否还有更多"标签"添加?
答案 0 :(得分:0)
我遇到了类似的问题。您添加到Intent的标志不是为Intent而是为Window所用的-无需在其中添加它们。您可以在onCreate()中正确使用它们。但是问题不在于标志。
在我的情况下,问题是我尝试启动的活动使用主题,其中包含<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 Version 9.0的Samsung上使用。 整个事情显然是三星的一个问题,因为没有变通办法的相同代码可以像始终打开的Pixel Ambient显示器一样具有魅力。