【问题标题】:Why LocalBroadcastManager of Android is not running?为什么Android的LocalBroadcastManager没有运行?
【发布时间】:2016-09-20 16:34:30
【问题描述】:

我不明白这段代码有什么问题。

Listener在activity的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.");

        }
    };
}

注册在activity的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 的代码永远不会运行?

【问题讨论】:

  • 发布完整代码

标签: android localbroadcastmanager


【解决方案1】:

因为您注册的是 BroadcastReceiver 而不是 LocalBroadcastReceiver
替换这个:

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

有了这个

LocalBroadcastManager.getInstance(this).registerReceiver(receiver, new IntentFilter("receiveMyService"));

【讨论】:

    猜你喜欢
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多