Android BroadcastReceiver广播(一)

什么是 BroadcastReceiver?

BroadcastReceiver 作为 Android 四大基础组件之一,可以方便地实现不同基础组件、不同应用程序进程之间的通信,它可以监听全局的广播信息,这些广播信息可以由开发者自行开发的程序发出,也可以由 Android 系统程序发出,BroadcastReceiver 可以监听并接收这些广播信息。

BroadcastReceiver的意义?

再举个场景使用的案例:当在 Activity 中启动 Service 后,Activity 和 Service 在运行过程往往需要进行数据传递,例如由 Activity 控制 Service 中的音乐播放器是否播放、Service 定时向 Activity 传递数据的下载情况以便 Activity 更新 UI界面等,此时,通过 BroadcastReceiver 可以比较方便地实现不同基础组件之间的数据传递工作。

【发送广播信息】

发送广播信息的两种方式

  • 第一种为:发送普通广播
  • 意思:所有接受者都可以同时接收到这个广播信息,但不能修改广播信息。
  Intent intent = new Intent();
  intent.setAction("ccv.turbosnail.broadcastdemo");	//接收方匹配 Action 才能接收广播
  intent.putExtra("data","普通广播信息");
  sendBroadcast(intent);				//	发送 普通 广播
  • 第二种为:发送有序广播
  • 意思:优先级高的广播接受者最先接收,低优先级的后接收,优先级高的广播接受者可以控制广播停止传播,也可以修改广播传递消息的内容
  Intent intent = new Intent();
  intent.setAction("ccv.turbosnail.broadcastdemo");	//接收方匹配 Action 才能接收广播
  intent.putExtra("data","普通广播信息");
  sendOrderedBroadcast(intent,null);	//	发送 有序 广播

【接收广播信息】
1.
广播接收器 BroadcastReceiver 对象用来监听和接收广播信息,接收到相应广播后,会自动回调 onReceive() 方法,因此,接收广播信息后的处理、与其它组件的交互操作一般都可以放在 onReceive() 方法中。

   @Override
    public class MyReceiver extends BroadcastReceiver{
    
    
        @Override
        public void onReceive(Context context, Intent intent) {
    
    
            String data = intent.getStringExtra("data");
            Toast.makeText(ReceiverActivity.this,data,Toast.LENGTH_LONG).show();
        }
    }

修改获取到的值的方法:

Bundle bundle = new Bundle();
bundle.putString("data",data + "追加的数据");
setResultExtras(bundle);

注册广播接收器(两种方式):
方式一:

可以在AndroidManifest.xml 里通过<receive> 标签注册自定义的广播接收器
	  <receiver android:name=".ReceiverActivity$MyReceiver">
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
            </intent-filter>
      </receiver>

对于有序的广播来说,需要在标签中添加优先级属性说明,优先级的取值范围在[-1000,1000],数值越大,优先级越高。具体写法如下:

  <intent-filter android:priority="900"></intent-filter>

方式二:

        MyReceiver myReceiver = new MyReceiver();
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("ccv.turbosnail.broadcastdemo");
        registerReceiver(myReceiver,intentFilter);

通过java代码来注册,但是要注意!在使用完成后记得取消注册!代码如下:

unregisterReceiver(myReceiver);

一般情况下,建议在 onResume() 方法中注册广播接收器,在 onPause() 方法中取消注册

猜你喜欢

转载自blog.csdn.net/qq_27494201/article/details/96360960#comments_26144152