从广播接收器向android中的正在运行的服务发送意图

时间:2010-12-12 05:12:38

标签: android service android-intent broadcastreceiver

这是我的广播接收器。

public class SmsReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context ctx, Intent intent) {
            Log.d(DEBUG_TAG, SmsReceiver.class.getSimpleName()+ " action: " + intent.getAction());
            // here is codes for sending intent to my running service 

    }  }

这是我的清单xml文件中的广播接收器和服务节点。

<service android:name=".SMSGatewayService" />

<receiver android:name=".SmsReceiver">
    <intent-filter>
         <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>

如何将广播接收器的意图发送到正在运行的服务。 提前谢谢。

1 个答案:

答案 0 :(得分:10)

理想情况下,您没有正在运行的服务。服务只应在他们正在做某事时才在内存中,并且当SMS到达时你的代码不会做任何事情。

话虽如此,您的接收者可以拨打startService()。这会将服务的Intent传递给onStartCommand(),无论服务是否已在运行。理想情况下,您的服务是IntentService,旨在使用命令模式,并在处理完命令时关闭。

此外,由于SMS消息可以在设备处于睡眠状态时到达,您可能需要使用WakeLock来确保设备保持清醒足够长的时间以便控制传递到服务并使服务能够执行任何操作它正在做。一种方法是使用我的WakefulIntentService,它包含IntentService + WakeLock模式。