Android Galaxy S4 - 在锁定屏幕上可见的活动

how*_*rad 14 android lockscreen android-alarms android-notification-bar android-activity

几年前,我写了一个适用于Android 2的闹钟应用程序,我现在正尝试将其升级到适用于Android 4.的功能,特别是在三星Galaxy S4上.

在Android 2上,如果手机正在睡眠,它会唤醒手机并在锁定屏幕上显示"贪睡或关闭"屏幕.

在Android 4上,它会唤醒手机,但您必须将其解锁,然后打开通知区域,然后单击闹钟的通知,然后才能点击"关闭".

我一直在使用这段代码来唤醒:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
            | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
            | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
            | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
Run Code Online (Sandbox Code Playgroud)

关于此事,我已经阅读了8个不同的stackoverflow问题.他们中的大多数都给出了上面的代码,这在几年前在Android 2中起作用,但在Android 4中不起作用.但是他们都没有帮助我解决这个问题.以下是我阅读和尝试过的问题:

Android:以编程方式删除或禁用Samsung Galaxy S2设备上的锁定屏幕

如何显示全屏TYPE_SYSTEM_ALERT窗口?

如何创建在锁定屏幕顶部可见的活动

如何在不解锁屏幕的情况下启动可以单击的对话框(如闹钟dimiss/snooze)

Android活动超过默认锁定屏幕

android设备已锁定,但希望闹钟声音和对话框出现

锁定屏幕上的Android对话框

在Android 2.3中通过锁屏显示触摸事件的对话框

有没有人对Android 4中可能导致此问题的变化有任何想法?

编辑:这是我见过的一个最简单的例子,它没有出现"最小化"的警报对话框.它没有像写的那样出现在锁屏上,但是你可以用它来修复它WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED

http://wptrafficanalyzer.in/blog/setting-up-alarm-using-alarmmanager-and-waking-up-screen-and-unlocking-keypad-on-alarm-goes-off-in-android/

它是用FragmentActivity和DialogFragment编写的,但它仍然可以作为Activity使用.它使用AlertDialog.Builder来创建对话框,如果您尝试使用XML布局,它将无法工作.为什么?

how*_*rad 17

我明白了,答案与我的预期完全不同.

这段代码包含在Android 2的闹钟示例中,在AlarmAlert.java活动中:

@Override
protected void onStop() {
    super.onStop();
    // Don't hang around.
    finish();
}
Run Code Online (Sandbox Code Playgroud)

作为参考,您可以在此处看到Git过去的示例代码中的文件,其中包含上述onStop函数.它从未在Android 2中引起过问题.

但是在Android 4中,如果手机关闭,这onStop会在手机醒来之前触发,有效地"最小化"活动.一旦我删除了这个功能,它立即再次工作.

但我想知道,这是其他人喜欢@radley和@Guardanis的问题吗?这似乎不太可能,但如果这也解决了你的问题,请告诉我.

如果您将来访问此答案,并且您遇到此问题,我会尝试的是:

  1. 取出任何onStop功能.

  2. 将此代码添加到Activity:

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
            | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
            | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
            | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
    
    Run Code Online (Sandbox Code Playgroud)
  3. 确保您使用的是全屏主题,而不是对话框主题.

  4. 这对我没什么影响,但您可以尝试在清单中显式设置showOnLockScreen: <activity android:name="com.example.MyActivity" android:showOnLockScreen="true"/>

  5. 第二件事对我没什么影响,但你可能会尝试添加旗帜 WindowManager.LayoutParams.FLAG_FULLSCREEN

我希望这有助于其他人!

  • 特别是不使用对话框主题有所作为! (4认同)

归档时间:

查看次数:

11425 次

最近记录:

6 年,3 月 前