Android 将广播接收器限制为应用程序

Android 将广播接收器限制为应用程序,android,broadcastreceiver,Android,Broadcastreceiver,我正在处理广播接收机,遇到了一个问题 我正在接收清单文件中的广播接收器 <receiver class=".MyClass" android:name=".MyClass"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> <action android:name="android.

我正在处理广播接收机,遇到了一个问题

我正在接收清单文件中的广播接收器

<receiver class=".MyClass" android:name=".MyClass">
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            <action android:name="android.net.ConnectivityManager.CONNECTIVITY_ACTION" />
            <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
            </intent-filter>
    </receiver>

这工作正常,只要连接发生变化,它就会调用MyClass

现在的问题是,每当我的应用程序没有运行时,这个类就会接收广播接收器。我希望在应用程序运行时接收它

我通过扩展BroadcastReceiver在该类文件中注册和取消注册广播进行了尝试,效果良好。但我想通过清单文件实现同样的功能


如果应用程序未打开时未收到任何信息,我的问题将得到解决。

您所说的是不可能的。在清单中设置意图过滤器的全部目的是,无论应用程序是否正在运行,都能够接收意图。唯一的方法是从代码[registerReceiver]注册/取消注册接收者。这个问题很久以前就被问到了,但万一有人在搜索时登陆了这个页面。()

您说过“如果应用程序未打开时未收到任何内容,我的问题将得到解决”。 下面是我如何理解你的问题和恰当的回答。
android:enabled
广播接收器是否可以由系统实例化——如果可以,则为“真”,如果不能,则为“假”。默认值为“true”

如果要在运行时启用接收器,可以将状态初始设置为禁用。您可以在清单文件中执行此操作:

<receiver
android:name=".YourReceiver"
android:enabled="false" >
<!-- your intent filter -->
</receiver>

来源

谢谢您的回复。当我接收广播时,是否有其他方法可以检查应用程序是否正在运行,我的意思是,在接收广播的同一类中,我可以检查它吗?您的广播接收器类是应用程序的一部分。因此,当它启动时,这意味着即使应用程序的任何其他组件没有运行,应用程序也在运行!如果要将接收器保留在清单中,还可以从Packagemanager启用/禁用接收器。如果要求应用程序仅在运行时接收一些广播,最好在运行时在代码中注册该广播接收器,在不需要时取消注册。它比启用和禁用清单中的条目(其唯一目的是允许系统在应用程序未运行时发送意图)更清楚地实现了目的。