Android四大组件之一:BroadCastReceiver(广播接收者)

广播接受者是(BroadCastReceiver)是Android中的地大组件之一,之前学习了一些关于BroadCastReceiver方面的知识,今天回过头来发现已经快忘记的差不多了,毕竟现在是刚开始学习这门开发,并没有经常的用到这样技术,所以导致忘得非常的快,好了,废话少说,还是言归正传。

一、广播机制的注册和取消

  说明:广播机制的注册分为两种,一种是想注册Activity一样,直接在AndroidManifest.xml文件中直接注册,另外一个中是动态方式注册,需要在Java源代码中去注册。

1、在AndroidManifest文件中注册。

 <receiver android:name=".EditRecevier"> 
            <intent-filter >
                <action android:name="android.intent.action.EDIT"/>
            </intent-filter>
        </receiver>

说明:.EditReceiver是实现广播机制的的类,android.intent.action.EDIT是具体要实现的什么广播机制,本例是实现一个编辑的。使用这种方式注册的广播机制是一直存在的,无法取消。

2、在Java源代码中动态注册广播机制

       //声明Receiver对象
            smsreceiver = new SmsReceiver();
            //声明intent-filter对象
            IntentFilter intentFilter = new IntentFilter();
            //将filter添加到intent-filter对象中
            intentFilter.addAction(SMS_ACTION);
            //使用registerReceiver()注册广播机制
            MainActivity.this.registerReceiver(smsreceiver, intentFilter);

说明:首先声明实现广播机制的对象(短息)smsreceiver对象,然后声明intent-filter对象,永远指定广播机制的类型(本例是指短信),最后使用registerReceiver方法注册广播机制。使用这种方式注册的广播机制是可以取消的。

3、取消广播机制

//直接调用unregisterReceiver()方法注销广播机制
            MainActivity.this.unregisterReceiver(smsreceiver);

说明:使用当前的Content对象调用unregisterReceiver方法直接取消广播机制

二、广播接收器的实现

说明:主要使用了BroadCastReceiver这个类,通过继承这个类,复写这个类的onReceive方法。在onReceive方法中对接收到的广播进行操控。

package com.example.android_broadcastreceiver2;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.gsm.SmsMessage;

public class SmsReceiver extends BroadcastReceiver {

    public SmsReceiver() {
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        System.out.println("SMSReceiver");

         Bundle bundle = intent.getExtras();
         Object[] objects = (Object[]) bundle.get("pdus");
         SmsMessage[] messages = new SmsMessage[objects.length];
         for (int i = 0; i < objects.length; i++) {
         messages[i] = SmsMessage.createFromPdu((byte[]) objects[i]);
         System.out.println(messages[i].getDisplayMessageBody());
         }
    }

}
三、如何发布广播
    @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_EDIT);
                MainActivity.this.sendBroadcast(intent);
            }


 
原文地址:https://www.cnblogs.com/yshuaiw/p/3412351.html