使用 Kotlin 解锁设备时如何启动活动?

Posted

技术标签:

【中文标题】使用 Kotlin 解锁设备时如何启动活动?【英文标题】:How to launch an activity when device is unlock with Kotlin? 【发布时间】:2020-06-30 13:55:12 【问题描述】:

我想在设备解锁时开始一项活动,但此代码不起作用:

androidManidest.xml:

<receiver android:name=".ScreenReceiver" android:enabled="true">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
        <action android:name="android.intent.action.SCREEN_ON" />
        <action android:name="android.intent.action.USER_PRESENT" />
        <action android:name="android.intent.action.USER_PRESENT"/>
    </intent-filter>
</receiver>

ScreenRececiver.kt:

override fun onReceive(context: Context?, intent: Intent?) 
    if (intent?.action.equals(Intent.ACTION_USER_PRESENT) ||
        intent?.action.equals(Intent.ACTION_SCREEN_ON) ||
        intent?.action.equals(Intent.ACTION_BOOT_COMPLETED)) 
        var myIntent = Intent(context, MainActivity::class.java)
        myIntent?.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
        context?.startActivity(myIntent)
    

【问题讨论】:

这段代码不起作用到底是什么意思? 解锁手机后没有调用activity。理论上,这段代码会导致这种情况发生 隐式广播不再适用于 Android 8+ 中清单声明的接收器。 developer.android.com/guide/components/broadcasts#android_80 【参考方案1】:

如上面 cmets 中提到的@Tenfour04,在 Android 8+ 中,隐式广播不再适用于清单声明的接收器,您需要在您的班级中这样做:

private val myScreenReceiver: MyScreenReceiver = MyScreenReceiver()

/**
 * Register for broadcast that will be triggered when the phone is unlocked
 * (when the keyguard is gone)
 */
private fun registerForScreenUnlockReceiver() 
    val screenStateFilter = IntentFilter()
    screenStateFilter.addAction(Intent.ACTION_USER_PRESENT)
    registerReceiver(myScreenReceiver, screenStateFilter)


override fun onDestroy() 
    super.onDestroy()
    // Unregister the screenr reicever
    unregisterReceiver(myScreenReciever)

注意:如果您需要每次用户调用此接收器 解锁他的屏幕然后你需要使用前台服务并使用 这段代码在那里

【讨论】:

以上是关于使用 Kotlin 解锁设备时如何启动活动?的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin:片段内的按钮需要在开始活动之前单击两次。如何一键启动活动?

Kotlin基础初探

Kotlin从基础到开发 - 总目录

在 Kotlin 的 AsyncTask 中启动新活动

按下设备的主页键后,如何始终在图标按下时打开当前活动

当我使用 Kotlin 在 Android Studio 中更改为另一个活动时如何停止崩溃