Android Lollipop - 绕过弹出 Activity 的锁屏

标签 android android-activity popup android-5.0-lollipop lockscreen

我有Activity1,它是项目列表屏幕。每个项目都可以在单独的 Activity2 中查看,该 Activity 显示为弹出窗口。 Activity1 可以从后台启动并在屏幕锁定时显示。 Activity1 还可以选择通过启动 Activity2 自动在列表屏幕中显示项目的内容。我们可以绕过锁定屏幕,因为这两个 Activity 都在 OnCreate 方法中启用了 WindowManagerFlags.DismissKeyguard

在 Android Lollipop 之前,一切都按预期运行。但现在除非手动解锁设备,否则弹出的 Activity2 不可见。如果我将 Activity2 更改为全屏 Activity,那么一切似乎都可以正常工作(除了从一个 Activity 转换到另一个 Activity 会短暂显示锁定屏幕)。关于如何彻底解决这个问题有什么想法吗?

此外,我只尝试过具有新的 Knox 安全功能的 Galaxy S6/S6 Edge 设备。

编辑 我已将 Activity2 更改为 DialogFragment 而不是 Activity。这对我来说效果最好,因为建议的答案使用了已弃用或过时的代码,具体取决于目标 sdk。 Activity1 使用以下标志在需要时绕过锁定屏幕。

getWindow().addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD);
getWindow().addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED);

由于 Activity2 现在只是一个 DialogFragment,因此它使用父 Activity1 的窗口标志。我还删除了“android.intent.action.SCREEN_OFF”操作上的这些标志,以便 Activity 仅在作为通知启动时绕过锁定屏幕,而不是每次 Activity 位于顶部时堆。需要答案中提到的权限。

最佳答案

这个 fragment 肯定会对您有所帮助(适用于 Lollipop):

        PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
        wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "My Tag");
        wl.acquire();

        KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
        keyguardLock = keyguardManager.newKeyguardLock("TAG");
        keyguardLock.disableKeyguard();

以及离开您的 Activity 时(即 onStop()、onPause() 和 onDestroy()):

keyguardLock.reenableKeyguard();

另外,不要忘记权限:

    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />

关于Android Lollipop - 绕过弹出 Activity 的锁屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29995138/

相关文章:

javascript - Jquery FullCalendar 未在弹出窗口中加载

android - 已安装 Google Play 服务,但文件夹 google_play_services_lib 不存在

Android:如何从 SystemClock.elapsedRealTime 转换为人类可读的 CharSeq?

android - 如何获取调用静态函数的 Activity 的上下文?

javascript - 检测弹出窗口何时关闭

ios - 在首次启动时加载弹出窗口,而不是 iOS 中的 UIAlertView

android - 我的 "Android"首选项中缺少 "Eclipse Juno 4.1"

Android 字体 createFromAsset

android - 启动 Activity 不会将应用程序置于前台

android - 使用 Fragment 时相机预览不会填满整个屏幕