从清单注册时未调用广播接收器

Posted

技术标签:

【中文标题】从清单注册时未调用广播接收器【英文标题】:BroadcastReceiver not called when registering from manifest 【发布时间】:2018-01-11 10:21:56 【问题描述】:

这就是我的清单的样子:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.lcukerd.earphonereminder">

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver
            android:name="ConnectivityActionReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
                <action android:name="android.net.wifi.WIFI_STATE_CHANGE" />
            </intent-filter>
        </receiver>
    </application>

</manifest>

我的接收器在从活动注册时工作正常,但我想从清单注册,以便即使在应用程序关闭时它也可以运行。问题是什么?为什么它不起作用?

【问题讨论】:

你怎么称呼它? @JakubGabčo 我打开和关闭 wifi。期待它在 wifi 重新连接时运行。如果这就是你要问的? 【参考方案1】:

从 Android Oreo 开始,接收器必须在运行时使用

注册

context.registerReceiver(receiver, intentFilter);

接收隐含意图

您仍然可以接收显式意图和一些特殊的隐式操作,例如 boot_completed 或 locale_changed

更多信息请看下面的链接

https://developer.android.com/about/versions/oreo/background.html#broadcasts

【讨论】:

【参考方案2】:

尝试使用.ConnectivityActionReceiver 而不是ConnectivityActionReceiver。当您致电ConnectivityActionReceiver 时,接收者将不会被注册,因为没有找到课程

    <receiver
        android:name=".ConnectivityActionReceiver"
        android:enabled="true"
        android:exported="true">
        <intent-filter android:priority="100">
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            <action android:name="android.net.wifi.WIFI_STATE_CHANGE" />
        </intent-filter>
    </receiver>

参考这个Question了解更多

【讨论】:

这个类是否被放置在任何其他包(或子包)中 您正在查看哪个手机?版本? 不,它是主包。 “com.lcukerd.myapp” @jyubinpatel oreo 你知道奥利奥的广播接收器限制吗?

以上是关于从清单注册时未调用广播接收器的主要内容,如果未能解决你的问题,请参考以下文章

android 广播接收不到可能是哪里出了问题

android 学习随笔十八(广播与服务 )

Android广播接收器与服务[重复]

12、注册广播有几种方式,这些方式有何优缺点?请谈谈Android引入广播机制的用意。

android 注册广播有多少种方式

使用 Manifest 注册广播接收器