2

我已经回顾了android 如何为具有不同权限和意图过滤器的同一个广播接收器解析 AndroidManifest 中的多个条目的答案?但我的问题略有不同。

如果我的应用程序中有 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>
4

2 回答 2

2

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

于 2012-05-10T16:05:06.767 回答
1

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

编辑:读过你的问题后,听起来你开始使用一个类的服务,并想用另一个类终止该服务。在这种情况下,我认为不一定是最好的方法。相反,在您已启动的服务中,注册以捕获连接更改并让服务自行停止。

于 2012-05-10T16:05:47.643 回答