启动应用程序"始终在显示"并锁定屏幕

时间:2017-04-26 18:31:40

标签: java android galaxy

我有一个应用程序,如果它收到一条消息,则从它开始。 为此,我使用此启动参数:

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 ;功能

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

1 个答案:

答案 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显示器一样具有魅力。