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

时间:2011-04-20 04:14:36

标签: android broadcastreceiver

我正在研究广播接收器并遇到问题。

我在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文件实现相同的目标。

如果在没有打开应用程序时没有收到任何内容,我的问题就会解决。

3 个答案:

答案 0 :(得分:3)

你在说什么是不可能的。在清单中使用intent过滤器的整个目的是能够接收您的应用程序是否正在运行的意图。通过从代码注册/取消注册接收器来实现您想要的唯一方法[registerReceiver]

答案 1 :(得分:1)

答案 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/