【问题标题】:Restrict Broadcast Receiver to application将广播接收器限制为应用程序
【发布时间】:2011-04-20 04:14:36
【问题描述】:

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

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

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

【问题讨论】:

    标签: android broadcastreceiver


    【解决方案1】:

    你说的是不可能的。在清单中包含意图过滤器的全部目的是无论您的应用程序是否正在运行,都能够接收到意图。做你想做的事情的唯一方法是通过代码注册/注销接收器 [registerReceiver]

    【讨论】:

    • 谢谢您的回复。当我收到广播时,有没有其他方法可以检查应用程序是否正在运行,我的意思是在接收该广播的同一个班级中我可以检查它吗?
    • 您的广播接收器类是应用程序的一部分。因此,当它启动时,这意味着即使您的应用程序的任何其他组件没有运行,该应用程序也在运行!
    • 如果你想在清单中保留你的接收器,你也可以从 Packagemanager 启用/禁用接收器。
    【解决方案2】:
    【解决方案3】:

    您说“如果在未打开应用程序时没有收到任何内容,我的问题将解决”。

    在这里,我如何理解您的问题和适当的答案。

    android:enabled

    广播接收器是否可以被系统实例化——如果可以,则为“true”,否则为“false”。默认值为“真”。

    如果您想在运行时启用您的接收器,您可以在最初将状态设置为禁用。您可以在清单文件中这样做:

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

    【讨论】:

    • 如果您要求应用只在运行时接收一些广播,最好在运行时在代码中注册该广播接收器,并在不需要时取消注册。它比启用和禁用清单中的条目更清楚地实现了目的,清单中的唯一目的是允许系统在您的应用未运行时发送意图。
    猜你喜欢
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多