Трансляция динамической регистрации, "onReceive" не вызывается - PullRequest
0 голосов
/ 04 июля 2019

Это мой простой тестовый код, в котором я пытаюсь динамически зарегистрировать получателя, но он не работает.

public class MainActivity extends AppCompatActivity {
    MyBroadacast broadacast;
    IntentFilter intentFilter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("xyz");
        this.registerReceiver(broadacast, intentFilter);

        Intent intent = new Intent("xyz");
        intent.putExtra("some_text", "text");
        this.sendBroadcast(intent);

        broadacast = new MyBroadacast() {
            @Override
            public void onReceive(Context context, Intent intent) {
                super.onReceive(context, intent);
                String g = intent.getStringExtra("some_text");
                Log.d("ololo", "onReceive " + g);
            }
        };
    }
}

Он должен показывать сообщения журнала, но это не так.

1 Ответ

1 голос
/ 04 июля 2019

Просто измените код заказа

  1. Инициализация трансляции
  2. Инициализировать intentFilter
  3. Отправить трансляцию

Сначала инициализировать трансляцию

broadacast = new MyBroadacast() {
        @Override
        public void onReceive(Context context, Intent intent) {
            super.onReceive(context, intent);
            String g = intent.getStringExtra("some_text");
            Log.d("ololo", "onReceive " + g);
        }
    };

Затем инициализируйте intentFilter

  IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("xyz");
        this.registerReceiver(broadacast, intentFilter);

Затем отправьте трансляцию

Intent intent = new Intent("xyz");
    intent.putExtra("some_text", "text");
    this.sendBroadcast(intent);
...