【第一行代码】BroadcastTest和BroadcastTest2

广播定义

顾名思义,广播的定义就是一个地方(应用)发送广播,其他多个地方(应用)可以选择接收或者不接收。

广播的用法就是,应用可以注册自己想要的广播进行接受,这些被注册的广播可能发自系统或者其他的应用。

广播的类型

标准广播,是一种无序异步执行的广播,在广播发送之后,所有注册过的接收器几乎可以同步接收到这条广播。

有序广播,是一种有序同步执行的广播,在广播发送之后,同一时刻只能被一个注册过的接收器接收,当这个接收器处理完成后才能传到下一个接收器。根据优先级高低排序且优先级高的广播接收器可以选择截断广播。

广播的注册

动态注册,在代码中注册;

静态注册,在 AndroidManifest.xml 中注册;

广播的使用

动态注册关键代码

新建一个类继承 BroadcastReceiver

class NetworkChangeReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        ConnectivityManager connectivityManager = (ConnectivityManager)
            getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
        if(networkInfo != null && networkInfo.isAvailable()) {
            Toast.makeText(context, "network is available", Toast.LENGTH_SHORT).show();
        }else {
            Toast.makeText(context, "network is unavailable", Toast.LENGTH_SHORT).show();
        }

    }
}

在 onCreate 动态注册广播,onDestroy 释放注册。

//注册监视网络状态广播
intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
networkChangeReceiver = new NetworkChangeReceiver();
registerReceiver(networkChangeReceiver, intentFilter);

//释放
unregisterReceiver(networkChangeReceiver);

在 AndroidManifest.xml 添加权限,这是 Android 为了保护用户设备的安全和隐私。

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

静态注册关键代码

在 AndroidManifest.xml 进行注册。

<receiver
    android:name=".BootCompleteRecevier"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

新建广播接收器类收广播

public class BootCompleteRecevier extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "Hello World!", Toast.LENGTH_SHORT).show();
    }
}

开机广播也需要添加权限

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

发送有序广播

主要在于注册广播的时候需要加上优先值保证接收的有序,发送的地方调用的函数需要改变。

//发送广播改为
Intent intent = new Intent();
intent.setAction("com.example.broadcasttest.MY_BROADCAST");
sendOrderedBroadcast(intent, null);

//注册带优先值的广播
broadcastReceiver = new MyBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("com.example.broadcasttest.MY_BROADCAST");
filter.setPriority(1000);
registerReceiver(broadcastReceiver, filter);

发送本地广播

保证广播只在应用内部传播

//获取实例
private LocalBroadcastManager localBroadcastManager;
localBroadcastManager = localBroadcastManager.getInstance(this);

//发送广播
Intent intent = new Intent();
intent.setAction("local");
localBroadcastManager.sendBroadcast(intent);

//注册广播接收器
IntentFilter filter1 = new IntentFilter();
filter1.addAction("local");
localReceiver = new LocalReceiver();
localBroadcastManager.registerReceiver(localReceiver, filter1);

//释放广播
localBroadcastManager.unregisterReceiver(localReceiver);

项目源码下载

Github_BroadcastTest
Github_BroadcastTest2

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值