关闭

Android_BroadcastReceiver(一)

标签: androidcsdn博客broadcastreceiver博客
154人阅读 评论(0) 收藏 举报
分类:

Android_BroadcastReceiver

作为一个Android小白,这是我的第一篇CSDN博客,这篇博客的主要内容介绍的是Android中的四大组件之一:广播

(BroadcastReceive),这些只是我的理解,如有差错,留言或者androidchw@163.com联系,谢谢。
Android中的广播主要分为两种形式:

标准广播(Normal Broadcasts)
一种异步执行的广播,所有的广播接收器几乎都在同一时刻接收到这条广播消息。它们之间没有任何顺序可言。这种广播的优点是效率比较高,但是这种广播无法拦截。并且在程序启动之后才能接收广播。
有序广播(Ordered Broadcastss)
一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播能接收到这条广播,当这个广播接收器中的逻辑执行完毕后,广播才会继续传播。此时的广播接收器是有先后顺序的,优先级高的广播接收器就可以先收到广播,并且前面的广播可以拦截广播。

上面说的可能太书本话了,下面就让我举个例子帮助大家更好的理解标准广播和有序广播。    

标准广播
相信在帝都工作的程序猿都遇见过这种情况,公交车来了以后,人们都争先恐后的去公交车门那里挤公交。这就相当于系统发出一条广播,手机中的App争先恐后的抢这个广播。就像人们争先恐后的挤公交车一样,完全没有顺序可言。
标准广播
有序广播
相信大家上学的时候,都遇见过大扫除这个事情吧。老师先把大扫除的消息给卫生委员分布下去,卫生委员又把大扫除的消息分布给各个组长,组长又把大扫除的消息分布个各个组员。有序广播就是这样传播的。它是有先后顺序的,级别越高的获取广播也就越早,并且还能够拦截不让后面级别低的获取到广播。
有序广播
手机开机完成后会发出一条广播,电池的电量发生变化会发出一条广播,时间或者时区发生改变也会发出一条广播。一个广播的完成需要两个步骤:发送广播和接收广播。现在,我们就从最基础的接收系统广播开始学习吧。
如果你想了解更多有关Android系统的中的广播,可以查看 Android系统广播大全

现在我们就从最简单的接收系统广播开始学习吧,学习之前我们还是先了解一下广播的注册方式,Android中广播的注册方式有两种:(1)动态注册广播:在代码中注册。(2)静态注册广播:在AndroidManifest.xml中注册。

动态注册广播

public class MainActivity extends Activity {
    private IntentFilter intentFilter;
    private NetworkChangeReceiver networkChangeReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 动态注册广播
        intentFilter = new IntentFilter();
        //广播接收器想要监听什么样的广播,就在这里添加响应的action就行了。
        intentFilter.addAction("android.net.con.CONNECTIVITY_CHANGE");
        networkChangeReceiver = new NetworkChangeReceiver();
        registerReceiver(networkChangeReceiver, intentFilter);
    }

    class NetworkChangeReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo netWorkInfo = connectivityManager.getActiveNetworkInfo();
            if (netWorkInfo != null && netWorkInfo.isAvailable()) {
                Toast.makeText(MainActivity.this, "network is available", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(MainActivity.this, "network is not_available", Toast.LENGTH_SHORT).show();
            }
        }
    }

    // 这一步至关重要
    @Override
    protected void onDestroy() {
        super.onDestroy();
        //取消注册的广播
        unregisterReceiver(networkChangeReceiver);
    }
}

接收系统网络变化的广播还需要权限,所以我们在AndroidManifest.xml中添加一个权限。

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

静态注册广播
以下的代码主要是实现了开机启动的功能。

public class BootCompleteReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "Boot Complete", Toast.LENGTH_LONG).show();
    }
}

在AndroidManifest.xml中的静态注册广播的代码:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

<receiver android:name=".BootCompleteReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3296次
    • 积分:208
    • 等级:
    • 排名:千里之外
    • 原创:18篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档