Android四大组件之—— BroadcastReceiver的使用

 

BroadcastReceiver又名广播接收者。既然它用于接收广播,那一定就有人负责发送。

 

Android系统中的广播:

在现实生活中,我们都知道广播是什么,用来做什么。例如公园里的广播,主要通知游客什么事情发生了,应该做什么,

不应该做什么。Android系统中的广播跟现实生活中的基本一样,主要用于消息的传递。

广播接收者可在java代码中动态注册,也可以在AndroidManifest文件中注册

 

有序广播和无序广播

先来说一下无序广播。还是用公园里的广播作为例子,只要广播一发送出去,所有人基本上都同时听到。

它是异步传输的,这就是无序广播。它的特点是传输速度快。但无序广播不能被拦截和被终止。

无序广播使用sendBroadcast方法发送。

有序广播按照一定的顺序发送出去,权限高的接收者先接收到广播信息,该接收者可修改广播中的信息,

然后再将广播向下级传播;也可以终止广播的传播。

 

 

BroadcastReceiver类的创建

通过简单的继承BroadcastReceive类并实现onReceive方法就可以创建自己的广播接收者类

private class NormalBroadcastReceiver extends BroadcastReceiver
{
      @Override
      public void onReceive(Context context, Intent intent)
      {
           String data = intent.getStringExtra("data");  
           Toast.makeText(getBaseContext(), data, Toast.LENGTH_SHORT).show();
      }    
}

 

完整代码:

在下面的代码段中,我们通过onResume方法注册广播接收者,在onPause方法中取消广播接收者的注册

当然了,也可以在AndroidManifest文件中注册,这样的广播接收者一旦注册就不能取消。

package com.whathecode.broadcastreceiverdemo;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends Activity
{
    
    //实例化广播接收者
    NormalBroadcastReceiver nbr = new NormalBroadcastReceiver();
    
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    
    @Override
    protected void onResume()
    {
        super.onResume();
        //注册广播接收者
        registerReceiver(nbr, new IntentFilter("com.whathecode.broadcastreceiverdemo"));
    }
    
    @Override
    protected void onPause()
    {
        super.onPause();
        //取消注册广播接收者
        unregisterReceiver(nbr);
    }
    
    public void sendOrder(View view)
    {
        Intent orderBroadcast = new Intent();
        orderBroadcast.setAction("com.whathecode.broadcastreceiverdemo");
        orderBroadcast.putExtra("data", "我是有序广播");
        //发送有序广播
        sendOrderedBroadcast(orderBroadcast, null);
    }
    
    public void sendDisorder(View view)
    {
        Intent intent = new Intent();
        intent.setAction("com.whathecode.broadcastreceiverdemo");
        intent.putExtra("data", "我是无序广播");
        //发送无序广播
        sendBroadcast(intent);
    }
    
    
    //继承BroadcastReceiver类,实现onReceive方法
    private class NormalBroadcastReceiver extends BroadcastReceiver
    {

        /**
         * 当广播被接收的时候这个方法被调用
         */
        @Override
        public void onReceive(Context context, Intent intent)
        {
            //获取广播中的信息并用Toast打印出来
            String data = intent.getStringExtra("data");
            
            Toast.makeText(getBaseContext(), data, Toast.LENGTH_SHORT).show();
        }
        
    }
}

 

运行效果:

BroadcastReceiver

posted @ 2015-02-04 16:12  破代码  阅读(556)  评论(0编辑  收藏  举报