Android学习-四大组件(BroadcastReceiver)

来源:互联网 发布:java string == equal 编辑:程序博客网 时间:2024/05/01 15:24

今天复习广播接收器

动态注册

先建一个内部类用来处理广播事件

class MyBroadcast extends BroadcastReceiver{        @Override        public void onReceive(Context context, Intent intent) {            Toast.makeText(MainActivity.this,"收到广播",Toast.LENGTH_SHORT).show();        }    }

然后在Activity中新建一个刚才的类的对象和一个IntentFilter对象,往IntentFilter里面添加action用来指定要监听的广播内容,然后对广播进行注册,最后在onDestroy里取消注册

protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");//监听网络变化        myBroadcast=new MyBroadcast();        registerReceiver(myBroadcast,intentFilter);    }    @Override    protected void onDestroy() {        super.onDestroy();        unregisterReceiver(myBroadcast);    }

本地广播

流程基本和动态注册广播一样,不同的是使用LocalBroadcastManager来进行广播的注册与发送

public class MainActivity extends AppCompatActivity {    private Button btn;    private IntentFilter intentFilter;    private LocalBroad localBroad;//自定义的LocalBroad类    private LocalBroadcastManager localBroadcastManager;//本地广播管理器    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        btn=(Button)findViewById(R.id.btn);        localBroadcastManager=LocalBroadcastManager.getInstance(this);//实例化本地广播管理器        btn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent intent=new Intent("com.example.vamo.myapplication2.MY_LOCALBROADCAST");                localBroadcastManager.sendBroadcast(intent);            }        });        intentFilter=new IntentFilter();        intentFilter.addAction("com.example.vamo.myapplication2.MY_LOCALBROADCAST");//筛选收到的广播        localBroad=new LocalBroad();        localBroadcastManager.registerReceiver(localBroad,intentFilter);    }    @Override    protected void onDestroy() {        super.onDestroy();        localBroadcastManager.unregisterReceiver(localBroad);    }    class LocalBroad extends BroadcastReceiver{        @Override        public void onReceive(Context context, Intent intent) {            Toast.makeText(MainActivity.this,"本地广播",Toast.LENGTH_SHORT).show();        }    }}

注意:

本地广播管理器建立后一定要先实例化才能使用,今天就因为没实例化ANR了

静态注册

还是上面的网络状态,先单独建立一个MyBroadcast

public class MyBroadcast extends BroadcastReceiver{    @Override    public void onReceive(Context context, Intent intent) {        Toast.makeText(context,"发生变化",Toast.LENGTH_SHORT).show();    }}

然后在AdroidManifest里面注册

<receiver android:name=".MyBroadcast">            <intent-filter>                <action `android:name="android.net.conn.CONNECTIVITY_CHANGE"/>`            </intent-filter>        </receiver>

自定义广播

将上面的广播在AndroidManifest中注册的时候做下修改

android:name="com.example.broadcast.MY_BROADCAST"/>

然后在Activity里面新建一个按钮并设置点击事件用来发送广播

 Intent intent=new Intent("com.example.broadcast.MY_BROADCAST"); sendBroadcast(intent);

这样,当点击按钮的时候就会收到广播并执行onReceive里面的操作,如果其他程序里面的广播注册的action也是这个,那么其他程序也可以收到。

发送有序广播

只需要在Activity的按钮事件中将sendBroadcast(intent);改为sendOrderedBroadcast(intent,null);就可以发送有序广播了。

当广播接收器在AndroidManifest中注册的时候在intent-filter后面加一个android:priority属性则可以指定权限,权限越高越先收到广播,收到有序广播后可以在onReceive里面调用abortBroadcast();来截断广播

0 0
原创粉丝点击