广播-了解广播机制

Android广播机制

广播机制概述

记得在我上学的时候, 每个班级的教室里都会装有一个喇叭, 这些喇叭都是接入到学校的广播室的, 一旦有什么重要的通知, 就会播放一条广播来告知全校的师生。

为了便于进行系统级别的消息通知, Android也引入了一套类似的广播消息机制。 相比于我前面举出的两个例子, Android中的广播机制会显得更加灵活。

为什么说Android中的广播机制更加灵活呢? 这是因为Android中的每个应用程序都可以对自己感兴趣的广播进行注册, 这样该程序就只会接收到自己所关心的广播内容, 这些广播可能是来自于系统的, 也可能是来自于其他应用程序的。 Android提供了一套完整的API, 允许应用程序自由地发送和接收广播。 发送广播的方法其实之前稍微提到过, 就是借助我们第2章学过的Intent。 而接收广播的方法则需要引入一个新的概念——广播接收器(Broadcast Receiver) 。

动态注册广播接收器示例

package com.example.administrator.myapplication;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private IntentFilter intentFilter;
    private NetworkChangeReceiver networkChangeReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        intentFilter = new IntentFilter();
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        networkChangeReceiver = new NetworkChangeReceiver();
        registerReceiver(networkChangeReceiver, intentFilter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(networkChangeReceiver);
    }

    class NetworkChangeReceiver extends BroadcastReceiver
    {
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "network changes", Toast.LENGTH_SHORT).show();
        }
    }
}Code language: JavaScript (javascript)

添加网络权限

AndroidManifest.xml文件, 在里面加入如下权限就可以访问系统网络状态了:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.broadcasttest">
   <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
   ...
</manifest>Code language: HTML, XML (xml)

运行测试说明

整体来说, 代码还是非常简单的, 现在运行一下程序。 首先你会在注册完成的时候收到一条广播, 然后按下Home键回到主界面(注意不能按Back键, 否则onDestroy() 方法会执行) , 接着打开Settings程序→Data usage进入到数据使用详情界面, 然后尝试着开关Cellular data按钮来启动和禁用网络, 你就会看到有Toast提醒你网络发生了变化。

Previous:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注