美文网首页
Android BroadcastReceiver

Android BroadcastReceiver

作者: 潜心之力 | 来源:发表于2018-05-11 15:07 被阅读0次

    一、简介

    广播接收者是Android四大组件之一,每个应用程序都可以对自己感兴趣的广播进行注册,这样该程序就能接收到自己所关心的广播内容,广播的注册有两种,分别是静态注册(配置文件注册)和动态注册(代码手动注册),广播的分类有两种,分别是标准广播(异步执行)和有序广播(同步执行)。

    二、创建广播

    新建一个类,继承BroadcastReceiver

    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.widget.Toast;
    
    public class BootCompleteReceiver extends BroadcastReceiver {
        public BootCompleteReceiver() {
             
        }
    
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context,"接收到广播",Toast.LENGTH_SHORT).show();
        }
    }
    

    三、注册广播

    静态注册(Manifest.xml)

            <receiver
                android:name=".BootCompleteReceiver"
                //是否启用该广播接收器
                android:enabled="true" 
                //是否允许该广播接收器接收本程序以外的广播
                android:exported="true">
                //设置接收广播的优先级
                <intent-filter android:priority="100">
                    <!-- 定义接收广播的行为 -->
                    <action android:name="com.BootCompleteReceiver" />
                </intent-filter>
            </receiver>
    

    动态注册(与Activity生命周期同步)

        private IntentFilter mFilter;
        private BootCompleteReceiver mReceiver;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mFilter = new IntentFilter();
            mFilter.addAction("com.BootCompleteReceiver");
            mReceiver = new BootCompleteReceiver();
            registerReceiver(mReceiver,mFilter);
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            unregisterReceiver(mReceiver);
        }
    

    四、发送广播

    发送标准广播(无序广播、异步广播)

            //Action与广播注册的Action要一致
            Intent intent = new Intent("com.BootCompleteReceiver");
            sendBroadcast(intent);
    

    发送有序广播(同步广播,有接收的先后顺序),优先级越高,越先接收到广播

            //Action与广播注册的Action要一致
            Intent intent = new Intent("com.BootCompleteReceiver");
            sendOrderedBroadcast(intent,null);
    

    拦截广播(用于有序广播),在接收广播的方法里实现拦截

            @Override
            public void onReceive(Context context, Intent intent) {
                abortBroadcast();
            }
        }
    

    五、本地广播(推荐使用,必须动态注册)

    普通的广播属于系统全局广播,即发出的广播可以被其他应用程序接收,也可以接收其他应用程序发出的广播,这样既会造成安全性的问题,也会使自身应用的性能降低,而本地广播可以解决上述问题

        private IntentFilter mFilter;
        private BootCompleteReceiver mReceiver;
        private LocalBroadcastManager mManager;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mFilter = new IntentFilter();
            mFilter.addAction("com.BootCompleteReceiver");
            mReceiver = new BootCompleteReceiver();
            mManager = LocalBroadcastManager.getInstance(this);
            mManager.registerReceiver(mReceiver,mFilter);
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            mManager.unregisterReceiver(mReceiver);
        }
    

    相关文章

      网友评论

          本文标题:Android BroadcastReceiver

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