LocalBroadcastManager не получает трансляции в действии

Я использую LocalBroadcastManager для трансляции своих действий и услуг с использованием APPLICATION CONTEXT , например:

public class CommonForApp extends Application{
    public void broadcastUpdateUICommand(String[] updateFlags,
                String[] flagValues) {
            Intent intent = new Intent(UPDATE_UI_BROADCAST);
            for (int i = 0; i < updateFlags.length; i++) {
                intent.putExtra(updateFlags[i], flagValues[i]);
            }

            mLocalBroadcastManager = LocalBroadcastManager.getInstance(mContext);
            mLocalBroadcastManager.sendBroadcast(intent);

        }}

Теперь, используя прослушиватель в моей службе, я вызываю трансляциюUpdateUICommand(), например:

public class mService extends Service {
    public BuildNowPLaylistListListener buildCursorListener = new BuildNowPLaylistListListener() {

            @Override
            public void onServiceListReady() {
    mApp.broadcastUpdateUICommand(
                        new String[] { CommonForApp.INIT_DRAWER},
                        new String[] {""});

            }}}

И я получаю трансляцию в своей деятельности, например:

public class mActivity extends Activity{
    BroadcastReceiver mReceiver = new BroadcastReceiver() {

            @Override
            public void onReceive(Context context, Intent intent) {
           mtoast.showtext("in onreceive"); //toast to check 

                if (intent.hasExtra(CommonForApp.INIT_DRAWER))
                    initialiseDrawer();

    }};


}

mApp является экземпляром приложения. CommonForApp — мой класс приложений.

Но в моей деятельности я не получаю никакой трансляции (менеджер вещания инициализируется с использованием контекста приложения).

Может ли кто-нибудь предложить мне, почему я не получаю трансляцию в своей деятельности? ..

.Заранее спасибо !


person Animesh Mangla    schedule 07.06.2016    source источник
comment
Причина понижения голоса... Пожалуйста   -  person Animesh Mangla    schedule 07.06.2016
comment
Работает ли Activity, когда вы отправляете широковещательную рассылку? Вы уверены, что регистрируете Receiver с правильным IntentFilter в Activity? Кроме того, почему бы вам просто не вести прямую трансляцию с Service?   -  person Mike M.    schedule 07.06.2016
comment
где регистрация на сообщения в активности?   -  person Stepan Maksymov    schedule 07.06.2016
comment
@МайкМ. Да, активность запущена; я не могу напрямую транслировать из службы в соответствии с моей реализацией кода.   -  person Animesh Mangla    schedule 07.06.2016
comment
@StepanMaksymov Sendbroadcast() находится в контексте приложения, поэтому мне не нужно его регистрировать.   -  person Animesh Mangla    schedule 07.06.2016
comment
О, нет. Вам все еще нужно зарегистрировать Receiver.   -  person Mike M.    schedule 07.06.2016
comment
@МайкМ. Как я зарегистрируюсь? Не могли бы вы предложить мне. Я новичок в использовании вещательных приемников.   -  person Animesh Mangla    schedule 07.06.2016
comment
О чем ты говоришь? LocalBroadcastManager.getInstance(this).registerReceiver(... // in activity in onCreate и LocalBroadcastManager.getInstance(this).unregisterReceiver(...// in onDestroy   -  person Stepan Maksymov    schedule 07.06.2016
comment
@StepanMaksymov Я тоже пробовал ... но это все еще не работает ... мне нужно также регистрироваться в манифесте?   -  person Animesh Mangla    schedule 07.06.2016
comment
проверьте этот developer.android.com/training/run-background- сервис/   -  person Bharatesh    schedule 07.06.2016
comment
проверьте мой ответ, чтобы быть ясным.   -  person Stepan Maksymov    schedule 07.06.2016
comment
@skadoosh да, я ошибался в фильтре намерений .... большое спасибо, что указали на это :)   -  person Animesh Mangla    schedule 07.06.2016


Ответы (1)


в деятельности:

protected BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, final Intent intent) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if(intent.hasExtra("type")){
                    // Do some action
                }
            }
        });

    }
};

@Override
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
    super.onCreate(savedInstanceState, persistentState);
    LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
            new IntentFilter("data-loaded"));
}

protected void onDestroy() {
    super.onDestroy();
    LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
}

затем вы отправляете трансляцию:

public static void sendBroadcastMessageDataLoaded(Context context, String dataType){
    Intent intent = new Intent("data-loaded");
    intent.putExtra("type", dataType);
    LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
}
person Stepan Maksymov    schedule 07.06.2016
comment
BRoadcastreceiver не работает через какое-то время...почему? - person Animesh Mangla; 07.06.2016
comment
активность может быть убита при нехватке памяти) - person Stepan Maksymov; 07.06.2016
comment
@developer У меня в службе был широковещательный приемник, и я заметил, что на некоторых телефонах Android через некоторое время убивает службу - тогда широковещательный приемник переставал работать :/ - person Someone Somewhere; 26.10.2016
comment
зависит от того, как вы запускаете службу, и вы можете проверить, запущена ли служба перед отправкой трансляции, если она не запущена, вы можете ее запустить) - person Stepan Maksymov; 26.10.2016
comment
ты спас мой день - person Molly; 29.11.2018