Отправка намерения из широковещательного приемника на работающий сервис в Android - PullRequest
2 голосов
/ 12 декабря 2010

Вот мой приемник вещания.

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 Ответ

10 голосов
/ 12 декабря 2010

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

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

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

...