安卓笔记之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()进行截断。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值