0

このコードの何が問題なのかわかりません。

リスナーは、アクティビティの onCreate にあります。

private BroadcastReceiver receiver;
private Context context;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
    context = getApplicationContext();

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

            Log.e("MAIN onCreate: ", "It is never shown.");

        }
    };
}

登録は、アクティビティの onResumen にあります。

@Override
protected void onResume() {
    super.onResume();
    registerReceiver(receiver, new IntentFilter("receiveMyService"));
}

送信者はボタンにあり、ログが完全に機能していることがわかりますが、test の値は false です。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        Intent intent = new Intent("receiveMyService");
        Boolean test = LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
        Log.e("Button", "It works but test is always false: " + test);
        return true;
    }
    return super.onOptionsItemSelected(item);
}

BroadcastReceiver のコード - onReceive が実行されないのはなぜですか?

4

1 に答える 1

1

これを置き換えるのではBroadcastReceiverなく、登録するため:LocalBroadcastReceiver

registerReceiver(receiver, new IntentFilter("receiveMyService"));

これとともに

LocalBroadcastManager.getInstance(this).registerReceiver(receiver, new IntentFilter("receiveMyService"));
于 2016-09-20T16:50:55.370 に答える