安卓笔记之BroadcastReceiver广播

广播分类

  • 标准广播(Normal broadcasts):异步执行,广播发出后,所有广播接收器几乎同时收到。不可截断。
  • 有序广播(Ordered broadcasts):同步执行,广播发出后,按照优先级顺序接收,同一时刻只有一个广播接收器能够收到。可截断。

注册方式

  • 动态注册
    在Activity代码中注册,程序运行时有效。在代码中指定IntentFilter,然后添加相应的Action。动态注册的广播需使用unregisterReceiver取消注册。
//自定义一个BroadcastReceiver,在onReceive()方法中完成广播要处理的事务
public class MyBroadcastReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(
         context,"网络状态发生改变~",Toast.LENGTH_SHORT).show();
    }
}
public class MainActivity extends AppCompatActivity {

    MyBroadcastReceiver myReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //核心部分代码:
        myReceiver = new MyBroadcastReceiver ();
        IntentFilter itFilter = new IntentFilter();
        itFilter.addAction(
        "android.net.conn.CONNECTIVITY_CHANGE");
        registerReceiver(myReceiver, itFilter);
    }

    //别忘了将广播取消掉哦~
    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(myReceiver);
    }
}
  • 静态注册:即在AndroidManifest.xml文件中注册,程序未启动时仍可监听。
//自定义一个BroadcastReceiver,重写onReceive完成事务处理
public class BootCompleteReceiver extends BroadcastReceiver {
    private final String 
    ACTION_BOOT = "android.intent.action.BOOT_COMPLETED";
    @Override
    public void onReceive(Context context, Intent intent) {
        if (ACTION_BOOT.equals(intent.getAction())){
            Toast.makeText(context,
                     "开机完毕~", 
                     Toast.LENGTH_LONG).show();
        }
    }
}
//在AndroidManifest.xml中对该BroadcastReceiver进行注册,添加相应的intent-filter
<receiver android:name=".BootCompleteReceiver">
    <intent-filter>
        <action android:
            name = "android.intent.cation.BOOT_COMPLETED">
    intent-filter>
receiver>


<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

发送广播
标准广播和有序广播都是先设定Intent对象的action,再发送广播,但两者调用的方法不同。

标准广播,直接调用Context的sendBroadcast()方法:

sendBroadcast(intent);

有序广播,调用Context的sendOrderedBroadcast()方法:

//receiverPermission为指定接收权限的字符串
sendOrderedBroadcast(Intent intent, String receiverPermission)

此外,有序广播的接收器需要在内指定优先级,并且可以在某一接收器内调用abortBroadcast()进行截断。

你可能感兴趣的:(android,安卓笔记)