android kotlin-手机锁定/屏幕关闭后运行的应用

时间:2018-08-04 05:31:23

标签: android kotlin android-broadcastreceiver

我有以下代码,我尝试在手机打开或解锁时进行一些工作,此代码有效。但是,当我尝试在手机关闭或锁定时运行时。这是行不通的

class ScreenReceiver : BroadcastReceiver() {
    internal var screen: ScreenReceiver? = null
    internal var context: Context? = null
    override fun onReceive(context: Context, intent: Intent) {
        this.context = context
        if (intent.action == Intent.ACTION_SCREEN_ON) {
            // do some work here
        }
        if (intent.action == Intent.ACTION_SCREEN_OFF) {
            // do some work here. But it does not seem to work
        }
    }
}

Andridmanifest.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_OFF" />
                <action android:name="android.intent.action.SCREEN_ON" />
                <action android:name="android.intent.action.USER_PRESENT" />


                <category android:name="android.intent.category.DEFAULT"></category>
            </intent-filter>
        </receiver>

任何人都可以帮助我,为什么它不起作用以及如何解决?

谢谢

1 个答案:

答案 0 :(得分:1)

您必须使用 registerReceiver(BroadcastReceiver, IntentFilter)。在清单中声明接收者无效。您可以在代码中注册这样的广播:

val filter = IntentFilter(Intent.ACTION_SCREEN_ON)
filter.addAction(Intent.ACTION_SCREEN_OFF)
filter.addAction(Intent.ACTION_USER_PRESENT)
filter.addAction(Intent.ACTION_BOOT_COMPLETED)
registerReceiver(ScreenReceiver(), filter)

从Android 8.0(API级别26)开始,系统对清单声明的接收者施加了其他限制。如果您的应用定位到API级别26或更高级别,则您不能使用清单为大多数隐式广播(不专门针对您的应用的广播)声明接收方。

有关其他详细信息,请参见https://developer.android.com/guide/components/broadcasts