Как получить действие BroadcastReceiver внутри Сервиса - PullRequest
0 голосов
/ 21 сентября 2011

У меня проблема с получением намерения, отправленного виджетом как PendingIntent:

intent = new Intent(MyService.MY_ACTION);
pendingIntent = PendingIntent.getService(this, 0, intent, 0);
views.setOnClickPendingIntent(R.id.button, pendingIntent);

Я добавил широковещательный приемник в MyService:

private BroadcastReceiver mIntentReceiver = new BroadcastReceiver()
{
    @Override
    public void onReceive(Context context, Intent intent) 
    {
        Log.d(TAG, "Intent command received");
        String action = intent.getAction();

        if( MY_ACTION.equals(action))
        {
            doSomeAction();
        }
    }
};

и, наконец, я зарегистрировал этого получателя в onCreate.Метод службы:

IntentFilter filter = new IntentFilter();
filter.addAction(MY_ACTION);
registerReceiver(mIntentReceiver, filter);

И теперь, когда MyService запущен и я нажимаю кнопку, я получаю:

09-21 14:21:18.723: WARN/ActivityManager(59): Unable to start service Intent { act=com.myapp.MyService.MY_ACTION flg=0x10000000 bnds=[31,280][71,317] }: not found

Я также попытался добавить фильтр намерений (сДействие MY_ACTION) для манифестации файла в MyService, но это вызывает вызов метода onStartCommand MyService.И это не то, что я хочу.Мне нужно вызвать метод onReceive mIntentReceiver.

Ответы [ 2 ]

3 голосов
/ 21 сентября 2011

Что вы хотите сделать?

Если вы зарегистрируете широковещательный приемник в своем методе Service onCreate, тогда:

  • Вы должны поднять намерение вещания , а не служебное намерение.Измените это:

    pendingIntent = PendingIntent.getService (this, 0, intent, 0);

На это:

pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
  • Ваша служба должна быть запущенной для прослушивания этого широковещательного события, это не будет запускать вашу службу, так как вы регистрируете получателя при создании службы.
1 голос
/ 21 сентября 2011

Для таких целей вам следует продлить срок службы с IntentService.Вы будете получать трансляцию способом onHandleIntent() вашего сервиса.

...