Android——BroadcastRecevier

原创 2016年08月30日 13:49:41
  • Android中BroadCast主要有普通广播有序广播

  • 普通广播的发送方式为sendBroadcast有序广播的发送方式为sendOrderedBroadcast

  • 另外还需要知道本地广播(broadcastManager.sendBroadcast)

demo下载地址:http://download.csdn.net/detail/sapce_fish/9617031

普通广播(sendBroadcast)

普通广播即标准广播,可在manifest文件中注册或者在java代码中动态注册(官方建议动态注册时在onResume()中注册广播,在onPause()中取消注册),普通广播发送后其所有接收方会同时(逻辑上)接收到广播,可跨进程通信。
1.编写Broadcast类

package com.space.broadcastreceiver.ordinary;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
/**
 * Created by space on 2016/8/28.
 */
public class OrdinaryBroadCastReceiver extends BroadcastReceiver{
    private final static String TAG = "OrdinaryBroadCastReceiver";
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("space", TAG + "------onReceive 接收到广播 参数 "+intent.getStringExtra("from")+" "+intent.getStringExtra("to"));
    }
}

2.注册广播

方式一:在manifest中注册

<receiver android:name=".ordinary.OrdinaryBroadCastReceiver">
  <intent-filter>
     <action android:name="com.space.OrdinaryBroadCastReceiver"></action>
   </intent-filter>
</receiver>

方式二:在Activity中注册/取消

//注册广播(一般写在onResume()中)
receiver = new LocalBroadCastReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.space.OrdinaryBroadCastReceiver");
registerReceiver(receiver, intentFilter);

//取消注册广播(一般写在onPause()中)
unregisterReceiver(receiver);

3.发送普通广播

intent = new Intent("com.space.OrdinaryBroadCastReceiver");
intent.putExtra("from","MainActivity");
intent.putExtra("to", "OrdinaryBCReceiver");
sendBroadcast(intent);

有序广播(sendOrderedBroadcast)

有序广播,在manifest文件中注册或者在java代码中动态注册(官方建议动态注册时在onResume()中注册广播,在onPause()中取消注册),有序广播发送后其所有接收者按照优先级进行接收广播,优先级高的接受者有权中断广播,也可将处理结果传递给之后的接受者。
1.编写Broadcast类(这里写了四个广播接收的类,按照优先级进行广播接收)

第一个广播接收类

package com.space.broadcastreceiver.order;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
/**
 * Created by space on 2016/8/28.
 */
public class OrderReceiverOne extends BroadcastReceiver {
    private final static String TAG = "OrderReceiverOne";
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle bundle = getResultExtras(true);
        int i = -1;
        if(bundle != null){
            i = bundle.getInt("count");
            bundle.putInt("count",i+1);
            bundle.putInt("countOne",-200);
        }
        Log.i("space", TAG + "------onReceive 接收到广播 参数"+i);
        setResultExtras(bundle);
    }
}

第二个广播接收类

package com.space.broadcastreceiver.order;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
/**
 * Created by space on 2016/8/28.
 */
public class OrderReceiverTwo extends BroadcastReceiver {
    private final static String TAG = "OrderReceiverTwo";
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle bundle = getResultExtras(true);
        int i = -1;
        int countOne = -1;
        if(bundle != null){
            i = bundle.getInt("count");
            countOne = bundle.getInt("countOne");
            bundle.putInt("count", i+1);
            bundle.putInt("countTwo", -300);
        }
        Log.i("space", TAG + "------onReceive 接收到广播 参数" + i + " "+countOne);
        setResultExtras(bundle);
    }
}

第三个广播接收类

package com.space.broadcastreceiver.order;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
/**
 * Created by space on 2016/8/28.
 */
public class OrderReceiverThree extends BroadcastReceiver {
    private final static String TAG = "OrderReceiverThree";
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle bundle = getResultExtras(true);
        int i = -1;
        int countOne = -1;
        int countTwo = -1;
        if(bundle != null){
            i = bundle.getInt("count");
            countOne = bundle.getInt("countOne");
            countTwo = bundle.getInt("countTwo");
            bundle.putInt("count",i+1);
            bundle.putInt("countThree",-400);
        }
        Log.i("space", TAG + "------onReceive 接收到广播 参数"+i+" "+countOne+" "+countTwo+" 截断广播");
        setResultExtras(bundle);
        abortBroadcast();
    }
}

第四个广播接收类

package com.space.broadcastreceiver.order;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
/**
 * Created by space on 2016/8/28.
 */
public class OrderReceiverFour extends BroadcastReceiver {
    private final static String TAG = "OrderReceiverFour";
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle bundle = intent.getExtras();
        int i = -1;
        if(bundle != null){
            i = bundle.getInt("count");
            bundle.putInt("count",i+1);
        }
        Log.i("space", TAG + "------onReceive 接收到广播 参数" + i + " " +getResultData());
    }
}

2.注册广播

<receiver android:name=".order.OrderReceiverOne">
    <intent-filter android:priority="100">
        <action android:name="com.space.OrderReceiver"></action>
    </intent-filter>
</receiver>

<receiver android:name=".order.OrderReceiverTwo">
     <intent-filter android:priority="99">
        <action android:name="com.space.OrderReceiver"></action>
    </intent-filter>
</receiver>

<receiver android:name=".order.OrderReceiverThree">
     <intent-filter android:priority="98">
        <action android:name="com.space.OrderReceiver"></action>
    </intent-filter>
</receiver>

<receiver android:name=".order.OrderReceiverFour">
   <intent-filter android:priority="97">
      <action android:name="com.space.OrderReceiver"></action>
    </intent-filter>
</receiver>

3.发送有序广播

intent = new Intent("com.space.OrderReceiver");
intent.putExtra("count", 0);
sendOrderedBroadcast(intent, null);

4.结果
执行结果截图

从截图可以看到广播确实是按照在manifest中设置的优先级接收到广播的,并且优先级高的可以操作广播中传输的数据,并且可以截断广播(接收器四没有收到广播)

本地广播(broadcastManager.sendBroadcast)

本地广播,在manifest文件中注册或者在java代码中动态注册(官方建议动态注册时在onResume()中注册广播,在onPause()中取消注册),本地广播的特点是发送后只有当前app能够接收到广播,不用担心其他应用接收到广播,避免数据泄露。
1.编写Broadcast类

package com.space.broadcastreceiver.local;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
/**
 * Created by space on 2016/8/28.
 */
public class LocalBroadCastReceiver extends BroadcastReceiver{
    private final static String TAG = "LocalBroadCastReceiver";
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("space", TAG + "------onReceive 接收到广播");
    }
}

2.注册/取消 广播

private LocalBroadcastManager broadcastManager;
private BroadcastReceiver receiver;
private final String mLocalAction = "com.space.localReceiver";

//注册广播(一般写在onResume()中)
receiver = new LocalBroadCastReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(mLocalAction);
broadcastManager.registerReceiver(receiver, intentFilter);

//取消注册广播(一般写在onPause()中)
broadcastManager.unregisterReceiver(receiver);

3.发送广播

Intent intent = new Intent(mLocalAction);
broadcastManager.sendBroadcast(intent);

至此已经介绍了普通广播与有序广播的使用
另外如果有不明白的地方可以留言。有写错或者不好的地方欢迎指正

版权声明:本文为博主原创文章,未经博主允许不得转载。

音乐播放器之简单播放(MediaPlayer、Service、BroadcastRecevier的结合用法)

(小白一个,代码仅供参考)做一个音乐播放器,就要考虑到实现后台音乐的播放,进度条的实现,播放时间和音频时间的实现。 在Android中,BroadcastRecevier Service 和 Medi...
  • bear_wr
  • bear_wr
  • 2015年08月09日 22:43
  • 1024

BroadcastRecevier和Service开启APP-GPS数据采集服务

首先明确,采集GPS数据定位的方式有:GPS卫星定位、WIFI定位、基站定位、AGPS定位。GPS的应用在LBS行业软件中被视为核心。...
  • boonya
  • boonya
  • 2015年02月10日 17:21
  • 2605

BroadcastRecevier广播的基本使用

BroadcastRecevier的有序、普通、动态和静态启动以及数据传递1、什么是BroadcastRecevier? BroadcastRecevier是一个系统级别的监听器,比如:插上耳机、电...

BroadcastRecevier(广播)

BroadcastRecevier(广播) BroadcastRecevier:广播是Android平台中应用程序之间传输信息的一种机制。 主要负责接收系统或其他程序发出的广播。 Broas...

监听安卓手机电量BroadcastRecevier

本文实例讲述了Android获取手机电池电量用法。分享给大家供大家参考。具体如下: 原理概述: 手机电池电量的获取在应用程序的开发中也很常用,Android系统中手机电池电量发生变化...

BroadcastRecevier的简单实用

安卓四大组件之一:BroadcastRecevier的使用——初学者 发送无序广播——静态和动态方法注册 发送有序广播——静态和动态方法注册 接收一个系统广播——得到手机状态的变化...

BroadcastRecevier广播的基本使用

  • 2016年01月26日 14:51
  • 2.23MB
  • 下载

Android网络通讯——Socket通信

  • 2017年12月08日 19:06
  • 18.27MB
  • 下载

Android源码阅读——GIF解码(如何提取各帧图片)

从GIF解码的源码GifDecoder入手,分析其实现的原理和过程

Android——SeekBar动态显示进度

  • 2017年10月26日 17:49
  • 10.84MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android——BroadcastRecevier
举报原因:
原因补充:

(最多只允许输入30个字)