我们都知道以前学校中的大广播,每次有什么重要的通知都会通过广播来传达,Android中为了便于传递系统级别的消息,也引入了广播机制——Broadcast Reciver。我们来看Broadcast Reciver的使用。

Broadcast Reciver概述

  Android中的广播分为两种:标准广播和有序广播。

标准广播

  标准广播是一种完全异步的广播,广播发出后,所有的接收器几乎是同一时间接受到的广播消息。这种广播效率高,但无法截断。

有序广播

  有序广播是一种同步的广播,同一时刻只有一个接收器接受到该广播,并且当这个广播完成这时候才可以继续传递该广播。

接受系统广播

   对广播的接受有两种方式:一种是动态的接收,通过代码;一种是静态的接收,通过在AndroidManifest中注册。

动态接收

1. 接收广播首先要先创建一个接收类MyReceiver继承Receiver,在onReceive方法中做接收处理,并在AndroidManifext.xml文件中注册广播:
MyReceiver 类:

public class MyReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        Toast.makeText(context, "我收到了一个广播", Toast.LENGTH_SHORT).show();    }}

AndroidManifext.xml注册:

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.lishuang.administrator.broadcastreceiverdemo" >    <application  android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >        <activity  android:name=".MainActivity" android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <activity  android:name=".Main2Activity" android:label="@string/title_activity_main2" >        </activity>        <receiver android:name=".MyReceiver"></receiver>    </application></manifest>

2. 在Activity中注册广播:

    //在Activity中注册广播        MyReceiver receiver = new MyReceiver();        IntentFilter filter = new IntentFilter();        filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");        registerReceiver(receiver, filter);

3. 当系统联网变化时,我们便会接受到一个系统广播。这里要注意有些系统广播是需要设置权限的,但是我们这里接收网络变化的广播,则不需要设置权限。

4. 在Activity的onDestrory()方法中取消注册,因为在Activity中通过代码的方式注册广播相当于将广播与Activity绑定,在Activity在销毁前要将广播取消注册,否则会报错。

    @Override    protected void onDestroy() {        super.onDestroy();        unregisterReceiver(receiver);//在这个活动退出时取消注册    }

  其实在这还是有一个问题的,在运行的结果中我们可以看到,当我们刚打开应用程序的时候会发出一次广播,当网络有变化时,会在发出广播。我一直搞不明白,为什么动态注册会在应用程序运行时发出一次广播。希望明白的大牛指点一下……

静态接收

1. 接收广播首先要先创建一个接收类MyReceiver继承Receiver,在onReceive方法中做接收处理,并在AndroidManifext.xml文件中注册广播:
MyReceiver 类:

public class MyReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        Toast.makeText(context, "我收到了一个广播", Toast.LENGTH_SHORT).show();    }}

AndroidManifext.xml注册:

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.lishuang.administrator.broadcastreceiverdemo" >    <application  android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >        <activity  android:name=".MainActivity" android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <activity  android:name=".Main2Activity" android:label="@string/title_activity_main2" >        </activity>        <!--注册MyReceiver-->        <receiver android:name=".MyReceiver"></receiver>    </application></manifest>

2. 在AndroidManifest.xml中注册广播,添加到如下语句:

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

  静态注册并没有出现动态注册时的情况,只在网络变化时,接受广播

接受标准广播

  
1. 接收广播首先要先创建一个接收类MyReceiver继承Receiver,在onReceive方法中做接收处理,并在AndroidManifext.xml文件中注册广播:
MyReceiver 类:

public class MyReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        Toast.makeText(context, "我收到了一个广播", Toast.LENGTH_SHORT).show();    }}

AndroidManifext.xml注册:

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.lishuang.administrator.broadcastreceiverdemo" >    <application  android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >        <activity  android:name=".MainActivity" android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <activity  android:name=".Main2Activity" android:label="@string/title_activity_main2" >        </activity>        <receiver android:name=".MyReceiver"></receiver>    </application></manifest>

2. 在AndroidManifest.xml中注册广播,添加到如下语句:

<intent-filter>    <action android:name="com.example.receiver" /></intent-filter>

3. 通过sendBroadcast()方法发送广播:

        Intent intent = new Intent();        intent.setAction("com.example.receiver");        sendBroadcast(intent);

更多相关文章

  1. Android程序开机启动&&监听情景模式切换
  2. Android之Intent分析
  3. Android(安卓)installed app, never used, cannot receiver Broa
  4. Android广播机制
  5. Android实现分享和接收分享内容
  6. Android(安卓)HTTP 压缩 gzip
  7. android判断短信是否发送成功[动态注册广播]
  8. Android(安卓)关闭所有的Activity
  9. Android(安卓)Adb Analyse

随机推荐

  1. ubuntu下无法更新android sdk
  2. 四、 Android之手机屏幕朝向
  3. Android 常用编程技巧
  4. 相对布局RelativeLayout
  5. 扫描二维码自动识别手机系统(Android/IOS)
  6. android EditText 实现搜索框点击搜索隐
  7. [置顶] Android学习博客和文章存档
  8. Android Service总结06 之AIDL
  9. 修改android 系统设置 android 版本
  10. EditText 相关功能