我正在研究广播接收器并遇到问题。
我在Manifest文件中收到广播接收器。
<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注册和取消注册广播来尝试它并且它可以工作。但我想通过Manifest文件实现相同的目标。
如果在没有打开应用程序时没有收到任何内容,我的问题就会解决。
答案 0 :(得分:3)
你在说什么是不可能的。在清单中使用intent过滤器的整个目的是能够接收您的应用程序是否正在运行的意图。通过从代码注册/取消注册接收器来实现您想要的唯一方法[registerReceiver]
答案 1 :(得分:1)
很久以前就提出了这个问题,但是如果有人在搜索时登陆此页面,It is possible to register and unregister broadcast receiver from code instead of doing that from manifest file。 (Checking the Networking Connectivity using BroadcastReceiver in Android)
答案 2 :(得分:0)
你说“如果在没有打开申请时没有收到任何东西,我的问题就会解决”。
在这里我如何理解你的问题和适当的答案。
android:enabled
广播接收器是否可以由系统实例化 - 如果可以,则为“true”,否则为“false”。默认值为“true”。
如果要在运行时启用接收器,可以将状态设置为最初禁用。您可以在清单文件中执行此操作:
<receiver
android:name=".YourReceiver"
android:enabled="false" >
<!-- your intent filter -->
</receiver>
<强>来源: http://developer.android.com/guide/topics/manifest/receiver-element.html#enabled
http://www.grokkingandroid.com/enabling-and-disabling-broadcastreceivers/