应用程序启动时触发BroadcastReceiver中的onReceive

时间:2017-07-05 16:24:46

标签: android broadcastreceiver

我正在制作一个样本并发现如果我在应用启动时在代码onReceive触发器中注册接收器。但如果我在上下文中注册一个,那不是为什么?

Activity:
public class MainActivity extends AppCompatActivity {
private BroadcastReceiver mBroadcastReceiver;
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String message = intent.getExtras().getString("SomeString");
        Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();
    }
};

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

@Override
protected void onResume() {
    super.onResume();
    mBroadcastReceiver = new SomeReceiver();
    registerReceiver(mBroadcastReceiver, new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION));
    LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,new IntentFilter("DanMan"));
}


@Override
protected void onPause() {
    super.onPause();
    unregisterReceiver(mBroadcastReceiver);
    LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
}

}

接收器:

public class SomeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    Log.d("receiver", "action :" + intent.getAction());
    intent.setAction("DanMan");
    LocalBroadcastManager.getInstance(context).sendBroadcast(intent.putExtra("SomeString", "Hello world!"));
}

}

1 个答案:

答案 0 :(得分:0)

尝试这样做,让我知道它是否有效

  1. 在onCreate之前使用
  2. 创建一个BroadcastReceiver对象
    private BroadcastReceiver mMessageReceiver;
    
    1. 使用
    2. 在onCreate()中实例化注册表对象
      mMessageReceiver = new BroadcastReceiver() {
          @Override
          public void onReceive(Context context, Intent intent) {
              String message = intent.getExtras().getString("SomeString");
              Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();
          }
      };