Я пытаюсь использовать BroadcastReceiver внутри своей службы, но он не работает должным образом.

Я начинаю свою службу в onCreate в своей деятельности. Затем в сервисах onCreate я вызываю следующее, чтобы зарегистрировать приемник Broadcast:

    IntentFilter filter = new IntentFilter();
    registerReceiver(DataUpdateReceiver, filter);

Вот широковещательный приемник, который я пытаюсь зарегистрировать:

    private BroadcastReceiver DataUpdateReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {

        Toast.makeText(context, "Test", Toast.LENGTH_LONG).show();

    }
};

Тогда еще где в Activity я пытаюсь вызвать это, поэтому будет отображаться сообщение Toast.

            Intent i = new Intent();
            sendBroadcast(i);

Но тост не отображается, я также пробовал вести журнал, но ничего не отображается. Если бы кто-нибудь мог мне помочь в этом, я был бы признателен, ty.

0
Jack 24 Фев 2015 в 23:24

2 ответа

Лучший ответ

На мой взгляд, вы должны указать действие (или действия), которое запускает метод onReceive(). Что-то вроде этого может вам помочь:

IntentFilter filter = new IntentFilter("some_action");
registerReceiver(DataUpdateReceiver, filter);

...

Intent i = new Intent("some_action");
sendBroadcast(i);
1
skywall 24 Фев 2015 в 20:36

Объявить на вершине класса

public final static String MY_RECEIVER_START = "com.yourcompanyname.appname.MY_RECEIVER_START";

private Radio radio;

В конструкторе сервиса

    //Initiate our receiver
    radio = new Radio();

    //Activate our recevier
    context.registerReceiver(radio, new IntentFilter(MY_RECEIVER_START));

Также в сервисе создайте класс получателя и метод, показывающий тост

/**
 * Receiver Class
 * This setup checks for the incoming intent action to be able to
 * attach more messages to one receiver.
 */
private class Radio extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {

        if (intent.getAction().equals(MY_RECEIVER_START)){
            //show toast


        }

    }
}

После из любой точки приложения отправьте сообщение на наше радио

context.sendBroadcast(new Intent("com.yourcompanyname.appname.MY_RECEIVER_START"));
1
J.Vassallo 24 Фев 2015 в 20:46