2010-12-12 1 views
2

Вот мой широковещательный приемник.Отправка намерения от широковещательного приемника к запущенной службе в android

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> 

Как я могу отправить намерение от широковещательного приемника на свой текущий сервис. благодарит заранее.

ответ

10

В идеале у вас нет обслуживания. Службы должны быть только в памяти, когда они что-то делают, и вероятность того, что ваш код ничего не сделает, когда придет SMS.

Это, как говорится, ваш ресивер может позвонить startService(). Это передает Intent на номер onStartCommand() услуги, независимо от того, запущен ли он или нет. В идеале, ваш сервис - это IntentService, один из которых предназначен для работы с шаблоном команды и завершения работы, когда выполняется обработка команды.

Кроме того, поскольку SMS-сообщения могут поступать, пока устройство спит, вам, вероятно, понадобится использовать WakeLock, чтобы обеспечить достаточное количество времени, достаточное для того, чтобы управление проходило к сервису, и чтобы служба выполняла все, что бы это ни было делается. Один из подходов для этого - использовать мой WakefulIntentService, который обертывает шаблон IntentService + WakeLock.