这是我的广播接收器。
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>
如何将广播接收器的意图发送到正在运行的服务。 提前谢谢。
答案 0 :(得分:10)
理想情况下,您没有正在运行的服务。服务只应在他们正在做某事时才在内存中,并且当SMS到达时你的代码不会做任何事情。
话虽如此,您的接收者可以拨打startService()
。这会将服务的Intent
传递给onStartCommand()
,无论服务是否已在运行。理想情况下,您的服务是IntentService
,旨在使用命令模式,并在处理完命令时关闭。
此外,由于SMS消息可以在设备处于睡眠状态时到达,您可能需要使用WakeLock
来确保设备保持清醒足够长的时间以便控制传递到服务并使服务能够执行任何操作它正在做。一种方法是使用我的WakefulIntentService
,它包含IntentService
+ WakeLock
模式。