android - 设备锁定时启动活动 android 8+
问题描述
我在 android 中有一个非常简单的应用程序,在第一页有一个按钮,当您在几秒钟后单击它时,它将打开另一个活动,但我想在设备锁定在 android 8,9 和 10 时显示第二个活动什么是最好的解决方案?
解决方案
从理论上讲,您应该能够添加一个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 或更高级别为目标的应用程序无法再在其清单中为隐式广播注册广播接收器。您可以在此处找到一些例外情况
推荐阅读
- c# - 授予 docker 容器对 azure 存储帐户 blob 容器的访问权限
- ios - 无效更新:UITableView 部分行数无效问题
- amazon-web-services - 如何修复 Redshift db 中的历史表?
- r - 比较两个数据集的百分位数的线性回归
- reactjs - Material-UI 自动完成分组逻辑不支持重复项
- c++ - 当我的条件应该为假时,如果语句仍在执行
- r - 如何在 R 中使用交互效应和滞后进行固定效应回归?
- java - 下载 libGDX 设置
- r - RSelenium - 网页抓取 - Zepp - 个人足球数据
- python - 有没有办法将这个基本网址与列表连接起来,我已经尝试了所有可能的方法,但无济于事