首页 > 解决方案 > 设备锁定时启动活动 android 8+

问题描述

我在 android 中有一个非常简单的应用程序,在第一页有一个按钮,当您在几秒钟后单击它时,它将打开另一个活动,但我想在设备锁定在 android 8,9 和 10 时显示第二个活动什么是最好的解决方案?

标签: androidandroid-activitylockscreen

解决方案


从理论上讲,您应该能够添加一个BroadcastReceiver来监视屏幕关闭时ACTION_SCREEN_OFF触发,然后启动该活动。

文档

广播动作:当设备进入睡眠状态并变为非交互时发送。

由于历史原因,这个广播动作的名称是指屏幕的电源状态,但它实际上是为了响应设备整体交互状态的变化而发送的。

当设备变为非交互式时发送此广播,这可能与屏幕关闭无关。要确定屏幕的实际状态,请使用 Display.getState()。

您需要先创建一个接收器类:

public class SomeReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            .
            .
            .

然后注册它:

class MainActivity : AppCompatActivity() {

    private val someReceiver = SomeReceiver()

    override fun onStart() {
        super.onStart()

        val intentFilter = IntentFilter();
        intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
        registerReceiver(someReceiver, intentFilter)
    }

    override fun onDestroy() {
        unregisterReceiver(someReceiver)

        super.onDestroy()
    }

}

请记住新的后台执行限制,这很可能不是用户想要的。考虑改为安排 aJobIntentService进行突发工作。

编辑

由于 Android 7 和 8 的更改以及与后台执行限制相关的更改,以 API 级别 26 或更高级别为目标的应用程序无法再在其清单中为隐式广播注册广播接收器。您可以在此处找到一些例外情况


推荐阅读