美文网首页
广播用法小结

广播用法小结

作者: 莫库施勒 | 来源:发表于2019-03-07 17:43 被阅读0次

    发送与接收

    定义

    public class MyBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO:
        }
    }
    

    动态注册

    intentFilter = new IntentFilter();
    intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
    myBroadcastReceiver = new MyBroadcastReceiver();
    context.registerReceiver(myBroadcastReceiver, intentFilter);
    

    静态注册

           <receiver
                android:name=".MyBroadcastReceiver"
                android:permission="string"
                android:process="string"
                android:enabled="true"
                android:exported="true">
                <intent-filter android:priority="value">
                    <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
                </intent-filter>
            </receiver>
    

    发送广播

        // 发送普通广播
        @Override
        public void sendBroadcast(Intent intent) {
            mBase.sendBroadcast(intent);
        }
        //  发送有序广播
        @Override
        public void sendOrderedBroadcast(Intent intent,
                String receiverPermission) {
            mBase.sendOrderedBroadcast(intent, receiverPermission);
        }
    

    本地广播 LocalBroadcastManager,使用该机制发出的广播只能够在应用程序内部进行传递,并且广播接收器也只能接收来自本地应用程序发出的广播

             LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);
            intentFilter = new IntentFilter();
            intentFilter.addAction("com.example.broadcasttest.LOCAL_BROADCAST");
            localReceiver = new LocalReceiver();
            localBroadcastManager.registerReceiver(localReceiver, intentFilter);
    

    自定义权限

        <permission
            android:name="com.self.define.permission.test"
            android:label="BroadcastReceiverPermission"
            android:protectionLevel="signature">
        </permission>
    

    在自定义权限时,通常会指定protectionLevel属性

    • normal:默认的,应用安装前,用户可以看到相应的权限,但无需用户主动授权。
    • dangerous:normal安全级别控制以外的任何危险操作。需要dangerous级别权限时,Android会明确要求用户进行授权。常见的如:网络使用权限,相机使用权限及联系人信息使用权限等。
    • signature:它要求权限声明应用和权限使用应用使用相同的keystore进行签名。如果使用同一keystore,则该权限由系统授予,否则系统会拒绝。并且权限授予时,不会通知用户。它常用于应用内部。把protectionLevel声明为signature。如果别的应用使用的不是同一个签名文件,就没办法使用该权限,从而保护了自己的接收者。

    动态注册时需要注意用registerReceiver(BroadcastReceiver, IntentFilter, String, Handler)进行注册,而不是平常用的是registerReceiver(BroadcastReceiver, IntentFilter)。相较于后者,前者在注册的时候要求了发送者必须具有的权限。如果发送者没有该权限,那么发送者发送的广播即使经过IntentFilter的过滤,也不会被receiver接收。此时如果再自定义一个权限,并且将权限的protectionLevel设置为signature,那么外部应用便无法使用该权限,也就无法触及到该receiver。

    相关文章

      网友评论

          本文标题:广播用法小结

          本文链接:https://www.haomeiwen.com/subject/vzlhpqtx.html