Android 四大组件之BroadcastReceiver

本文详细介绍了Android中的BroadcastReceiver,包括广播接收者的使用、动态注册、发送有序和无序广播,以及Android 8.0以上版本的隐式广播规则变化。还列举了常用系统广播如电话、应用安装卸载、开机、短信、SD卡状态和屏幕解锁的处理。重点讨论了在API 26+中如何处理静态广播的限制。
摘要由CSDN通过智能技术生成

Android 四大组件之BroadcastReceiver


本文由 Luzhuo 编写,转发请保留该信息.
原文: http://blog.csdn.net/rozol/article/details/79606175


广播接收者
四大组件(Activity / BroadcastReceiver / Service / ContentProvider)之一
四大组件均运行于主线程

广播接收者

使用

  • 编写广播接受者代码

    public class AppStateReceiver extends BroadcastReceiver {
         
        private static final String TAG = AppStateReceiver.class.getSimpleName();
        @Override
        public void onReceive(Context context, Intent intent) {
         
            // 获取当前接收广播的动作
            String action = intent.getAction();
            // 获取应用Uri
            Uri packageUri = intent.getData(); // package:包名
            // 获取应用包名
            String packageName = intent.getDataString();
    
            if (action.equals("android.intent.action.PACKAGE_INSTALL") || action.equals("android.intent.action.PACKAGE_ADDED")){
         
                Log.i(TAG, "应用: " + intent.getDataString() + " 被安装了");
    
            } else if(action.equals("android.intent.action.PACKAGE_REMOVED")){
         
                Log.i(TAG, "应用: " + intent.getDataString() + " 被卸载了");
            }
        }
    }
    
  • 配置监听广播事件

    <receiver android:name=".AppStateReceiver">
        <intent-filter>
            <action android:name="android.intent.action.PACKAGE_INSTALL"/>
            <action android:name="android.intent.action.PACKAGE_ADDED"/>
            <action android:name="android.intent.action.PACKAGE_REMOVED"/>
            <data android:scheme="package"/>
        </intent-filter>
    </receiver>
    

动态注册广播接收者

在清单文件里配置无效的广播接收者, 必须使用代码注册

  • 动态注册广播接收者

    private ScreenReceiver screenReceiver;
    /**
     * 动态注册特殊的广播
     * @param view
     */
    public void onclick2(View view){
         
        screenReceiver = new ScreenReceiver();
        IntentFilter filter = new IntentFilter();
        filter.addAction("android.intent.action.SCREEN_OFF");
        filter.addAction("android.intent.action.SCREEN_ON");
        // 动态注册广播接收者
        registerReceiver(screenReceiver, filter);
    }
    
    @Override
    protected void onDestroy() {
         
        // 动态注销广播接收者
        unregisterReceiver(screenReceiver);
        super.onDestroy();
    }
    
  • ScreenReceiver 代码处理 (略)

发送广播

有序广播

  • 发送广播

    /**
     * 发送无序广播
     */
    public void onclick(View view){
         
        Intent intent = new Intent();
        intent.setAction("luzhuo.me");
        intent.putExtra("content", "这是一条无序广播.");
    
        // 发送一条无序广播
        // 只发送广播, 不管有没有接收, 且不可被 篡改 / 终止
        sendBroadcast
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值