多个类可以接收相同的广播接收器意图

时间:2012-05-10 15:58:18

标签: android android-intent broadcastreceiver manifest

我已经回答了How does android resolve multiple entries in the AndroidManifest for the same broadcast receiver with different permissions and intent-filters?的答案,但我的问题略有不同。

如果我的应用程序中有2个类,1个用于启动服务,而另一个用于根据不同的系统事件停止服务,那么它们是否都可以接收相同的广播。

我想要启动或停止我的服务,具体取决于用户是打开还是关闭飞行模式。在我的清单中使用以下条目触发两个类中的onReceive()。

    <receiver android:name=".StartService">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
            <action android:name="android.intent.action.BATTERY_OKAY"/>
            <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>"
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.AIRPLANE_MODE"/>
        </intent-filter>
    </receiver>

    <receiver android:name=".StopService" >
        <intent-filter>
            <action android:name="android.intent.action.BATTERY_LOW"/>
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.AIRPLANE_MODE"/>
        </intent-filter>

        <!-- for power testing only -->
        <!--<intent-filter>
            <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
        </intent-filter>-->
    </receiver>

2 个答案:

答案 0 :(得分:2)

我不确定这是否可行,但另一种方法是在StartService接收器中捕获它,然后检查服务的状态。如果您的服务已经启动,请启动您的on broadcast并在StopService中捕获它吗?

答案 1 :(得分:1)

如果我没记错的话,你可以在班级听众中注册以捕捉这些事件。即连接管理器。因此,您可以将一个类作为服务运行,捕获连接的变化(此时您可以检测您是否处于飞行模式)并执行任何操作,或者在当前处于活动状态的活动中注册以侦听这些事件也是如此。 Personaly我几乎在所有情况下都会在后台运行服务。

编辑: 读完你的问题后,听起来就像是你开始使用一个类的服务,并希望用另一个类杀死该服务。在这种情况下,我认为不一定是最好的方式。而是在您已启动的服务中,注册以捕获连接中的更改并使服务停止。