我已经回答了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>
答案 0 :(得分:2)
我不确定这是否可行,但另一种方法是在StartService接收器中捕获它,然后检查服务的状态。如果您的服务已经启动,请启动您的on broadcast并在StopService中捕获它吗?
答案 1 :(得分:1)
如果我没记错的话,你可以在班级听众中注册以捕捉这些事件。即连接管理器。因此,您可以将一个类作为服务运行,捕获连接的变化(此时您可以检测您是否处于飞行模式)并执行任何操作,或者在当前处于活动状态的活动中注册以侦听这些事件也是如此。 Personaly我几乎在所有情况下都会在后台运行服务。
编辑: 读完你的问题后,听起来就像是你开始使用一个类的服务,并希望用另一个类杀死该服务。在这种情况下,我认为不一定是最好的方式。而是在您已启动的服务中,注册以捕获连接中的更改并使服务停止。