Android -- 发送Broadcast、有序无序

普通广播                                                                                    

  • 优缺点:和有序广播的优缺点相反!
  • 发送广播的方法:sendBroadcast()

有序广播                                                                                  

  • 优缺点

优点:1,按优先级的不同,优先Receiver可对数据进行处理,并传给下一个Receiver

2,通过abortBroadcast可终止广播的传播

缺点:效率低

  • 发送广播的方法:sendOrderedBroadcast()
  • 优先接收到Broadcast的Receiver可通过setResultExtras(Bundle)方法将处理结果存入Broadcast中,下一个Receiver 通过 Bundle bundle=getResultExtras(true)方法获取上一个 Receiver传来的数据。

工程                                                                                          

MainActivity.java是程序住进口。

MyBroadcastReceiver.java等都是广播接收者,只是等级不一样。

FinalRecevier.java是有序广播的时候,即使广播被拦截了,这个还是可以接收到广播的。

<receiver android:name=".MyBroadcastReceiver">
            <intent-filter android:priority="1000">
                <action android:name="com.yydcdut.nima"/>
            </intent-filter>
        </receiver>
        <receiver android:name=".MyBroadcastReceiver2">
            <intent-filter android:priority="100">
                <action android:name="com.yydcdut.nima"/>
            </intent-filter>
        </receiver>
        <receiver android:name=".MyBroadcastReceiver3">
            <intent-filter android:priority="10">
                <action android:name="com.yydcdut.nima"/>
            </intent-filter>
        </receiver>
        <receiver android:name=".FinalRecevier">
            <intent-filter>
                <action android:name="com.yydcdut.nima"/>
            </intent-filter>
        </receiver>

在MyBroadcastReceiver.java中,代码都差不多:

public class MyBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        System.out.println("MyBroadcastReceiver1111111接受到的广播");
        Toast.makeText(context, "MyBroadcastReceiver", Toast.LENGTH_SHORT).show();

    }

}

在MainActivity.java中:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public void click(View view)
    {
        Intent intent = new Intent();
        intent.setAction("com.yydcdut.nima");
        //无序广播
        sendBroadcast(intent);
        //有序广播
        //sendOrderedBroadcast(intent, null);

        //sendOrderedBroadcast(intent, null, new FinalRecevier(), null, 0, null, null);
    }
}

在某个广播接收的类中加入

abortBroadcast();

这是去拦截广播,但是FinalRecevier还是接收到了的,无论怎么拦截广播。

我是天王盖地虎的分割线                                                                

源代码:http://pan.baidu.com/s/1dD1Qx01

广播发送.zip

转载请注明出处:http://www.cnblogs.com/yydcdut

Android -- 发送Broadcast、有序无序

时间: 2024-10-17 16:30:35

Android -- 发送Broadcast、有序无序的相关文章

关于通过adb启动Activity、activity、service以及发送broadcast的命令

一.启动activity: $ adb shell$ am start -n {包名}/{包名}.{活动名称} 如:启动一个名叫MainActivity的活动 # am start -n com.example.test/com.example.test.MainActivity 二.启动service: $ adb shell$ am startservice -n {包名}/{包名}.{服务名称} 如:启动一个名叫MyService的服务 # am startservice -n com.e

Android组件Broadcast Receiver学习

Android大量使用了Broadcast Receiver来广播系统事件,如网络连接.扩展dock状态及来电的变化. 一.注意: android 中service和broadcastreceiver都是运行在主UI线程中,如果在他们中执行耗时操作,若果操作持续的时间超过android平台的约定,那么android平台会认为该程序出现异常,从而抛出ANR异常.如果在onReceive()的处理中,用户进行了UI触发,将可能引发ANR异常,不过和activity的时间限制不同,receiver在1

【Android中Broadcast Receiver组件具体解释 】

BroadcastReceiver(广播接收器)是Android中的四大组件之中的一个. 以下是Android Doc中关于BroadcastReceiver的概述: ①广播接收器是一个专注于接收广播通知信息,并做出相应处理的组件.非常多广播是源自于系统代码的──比方,通知时区改变.电池电量低.拍摄了一张照片或者用户改变了语言选项.应用程序也能够进行广播──比方说,通知其他应用程序一些数据下载完毕并处于可用状态. ②应用程序能够拥有随意数量的广播接收器以对全部它感兴趣的通知信息予以响应.全部的接

adb启动activity、service、发送broadcast

一.adb启动activity: $ adb shell$ am start -n {包(package)名}/{包名}.{活动(activity)名称} 如:启动浏览器 # am start -n com.android.browser/com.android.browser.BrowserActivity 二.adb启动service: $ adb shell$ am startservice -n {包(package)名}/{包名}.{服务(service)名称} 如:启动自己应用中一个

Android -- 利用Broadcast开启Service

Broadcast和Service都是Android四大组建之一的. 这里的广播是动态的,自己注册的一个广播. 这种最典型的用法就是利用开机广播,然后再起自己的服务,也就是在Android手机中做到开启启动. Service与Broadcast                                                                 public class MyService extends Service { private MyReceiver rec

android发送短信例子

Android应用开发中我们常常需要发送手机短信.这对于android平台来说,是最简单不过的功能了,无需太多代码,也无需自定义代码,只需要调用android提供的消息管理类SmsManager就可以了. [源码下载]http://www.code4apk.com/android-code/202 核心就是使用SmsManager的sendTextMessage方法加上PendingIntent跳转. 核心代码如下: SmsManager sms=SmsManager.getDefault();

android 发送UDP广播,搜寻服务器建立socket链接

应用场景:客户端(手机,pc)需要搜寻所在局域网内的服务器并获得服务器地址. 方法简介:客户端发送UDP广播,服务收到广播后得到客户端ip地址,然后向客户端发送一次socket链接,客户端收到socket链接,获得服务器地址. 相关知识: UPD.TCP.TCP是面向链接的,可靠的通信方式.UDP是面向非链接的通讯方式.TCP的建立比较麻烦,要经过"三次握手".而UDP的建立比较简单,发送方只管把内容发送出去,不管接收方是否收到.UDP的传输分为:单播,多播,广播.其中,多播和广播是通

【Android】Broadcast控制音乐暂停继续等

内容简介 [Android]Broadcast控制音乐暂停继续等 [Android]Broadcast控制音乐暂停继续等 最近工作中,遇到一个小问题.后来解决了,记录一下. Android中,可以用Intent和Broadcast来控制手机里音乐的暂停,播放,跳转到下一首,跳转到上一首: // 暂停 Intent i = new Intent("com.android.music.musicservicecommand"); i.putExtra("command"

android 发送短信 如何做到一条一条的发送,只有在上一条发送成功之后才发送下一条短信

android发送短信截获上一条发送是否成功,然后再来发送下一条短信 1.问题:在项目中遇到如下要求:待发短信有N条,实现一条一条的发送并在上一条短信发送成功之后再来发送下一条. for(int i=0;i<3;i++){ sendSMS(10086, text1, i); } private void sendSMS(String toAddress, String body, Long id) { // ---sends an SMS message to another device---