Android中的BroadCast

一、BroadcastReceiver

    用于接受广播的基类
    抽象类

(1)监听网络状态改变

public class NetworkStateChangeReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo ni = cm.getActiveNetworkInfo();
        if (ni != null && ni.isAvailable()) {
            Toast.makeText(context, "网络可用", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(context, "网络不可用", Toast.LENGTH_SHORT).show();
        }
    }
}
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

注册广播

        IntentFilter intentFilter0 = new IntentFilter();
        intentFilter0.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        mNetworkStateChangeReceiver = new NetworkStateChangeReceiver();
        registerReceiver(mNetworkStateChangeReceiver, intentFilter0);

注销广播

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(mNetworkStateChangeReceiver);
    }

(2)监控程序的卸载

public class PackageRemovedReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
    //静态注册,当程序没有运行时,还是能监听到系统广播
        String action = intent.getAction();
        if (TextUtils.equals(action, Intent.ACTION_PACKAGE_REMOVED)) {
            Uri uri = intent.getData();

            Toast.makeText(context, "程序 " + uri.toString() + " 被卸载",
                    Toast.LENGTH_SHORT).show();
        }
    }
}
        <receiver android:name=".PackageRemovedReceiver">
            <intent-filter>
                <action android:name="android.intent.action.PACKAGE_REMOVED"/>
                <data android:scheme="package"/>
            </intent-filter>
        </receiver>

(3)系统广播

        intent.ACTION_BATTERY_OKAY;
        intent.ACTION_BATTERY_OKAY;
        intent.ACTION_BOOT_COMPLETED;//开机完成
        intent.ACTION_HEADSET_PLUG;//插入耳机
        intent.ACTION_PACKAGE_ADDED;//安装成功
        intent.ACTION_SCREEN_OFF;//点亮
        intent.ACTION_SCREEN_ON;//变暗

(4)自定义广播action

public class StudentReceiver extends BroadcastReceiver {

    private Button mButton;

    public StudentReceiver(Button button) {
        mButton = button;
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (TextUtils.equals("com.netease.student.after_school", action)) {
            mButton.setText("我是学生,我放学回家了");
        }
    }
}
        Intent intent = new Intent("com.netease.student.after_school");
        sendBroadcast(intent);

(5)有序广播

    设置优先级 android:priority
    大于-1000,小于1000
    默认值为0
    值越大,优先级越高   

示例代码

public class DesignerReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (TextUtils.equals("com.netease.study.build", action)) {

            Bundle extras = intent.getExtras();
            if (extras != null) {
                String msg = "设计师收到通知: type = " + extras.get("type");
                Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();

                Bundle bundle = new Bundle();
                bundle.putBoolean("isOK", true);
                setResult(0, "设计师处理过了", bundle);
            }
//            广播拦截
//            abortBroadcast();
        }
    }
}
public class Builder0Receiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (TextUtils.equals("com.netease.study.build", action)) {
            //获取数据
            int code = getResultCode();
            String data = getResultData();
            Bundle bundle = getResultExtras(true);

            String msg = "建造者 0 收到通知: code " + code +
                    "; data = " + data +
                    "; isOK = " + bundle.get("isOK");

            Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
        }
    }
}
        <receiver
            android:name=".DesignerReceiver"
            android:exported="true"
            android:permission="com.netease.permission.build">
            <intent-filter
                android:priority="100">
                <action android:name="com.netease.study.build"/>
            </intent-filter>
        </receiver>
    public void button1Click(View v) {
        //发送有序广播,并传递数据
        Intent i = new Intent("com.netease.study.build");
        i.putExtra("type", "school");
        sendOrderedBroadcast(i, null);
    }

(6)权限设置
可以安全实现跨应用的广播接受

        <receiver
            android:name=".DesignerReceiver"
            android:exported="true"
            android:permission="com.netease.permission.build">
            <intent-filter
                android:priority="100">
                <action android:name="com.netease.study.build"/>
            </intent-filter>
        </receiver>
    <!--使用一个权限-->
    <uses-permission android:name="com.netease.permission.build"/>
    <!--定义一个权限-->
    <permission
        android:name="com.netease.permission.build"
        android:protectionLevel="normal"/>

这里写图片描述
(7)本地广播
LocalBroadcastManager

    在当前进程中协助注册和发送广播
    private LocalBroadcastManager mLocalBroadcastManager;
    private LocalReceiver mLocalReceiver;

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

        mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
        mLocalReceiver = new LocalReceiver();
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("com.netease.local_broadcast");
        mLocalBroadcastManager.registerReceiver(mLocalReceiver, intentFilter);
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        mLocalBroadcastManager.unregisterReceiver(mLocalReceiver);
    }
public class LocalReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "局部广播接收成功", Toast.LENGTH_SHORT).show();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值