Android Broadcast

一、Android Broadcast 知识点普及


1.Normal Broadcast(普通广播):完全异步,同一时刻所有接收者都能收到,缺点是不能将处理结果传递给下一个接收者,无法终止Broadcast Intent的传播。用sendBroadcast()方法发生普通广播

2.Ordered Broadcast(有序广播):接收者按预先声明的优先级依次接收Broadcast优先级高的先接收,可以用Android:priority或setPriority()指定,数值越大优先级越高。有序广播可以被终止,优先级高的能终止优先级低的,用abortBroadcast()方法。并且优先收到Broadcast的接收者可以通过setResultExtras(Bundle)方法将结果本接收者的处理结果存入Broadcast中,下一个接收者收到的时候可以用Bundle bundle=getResultExtras(true)来获取上一个接收者的处理结果。用senOrderedBroadcast()发送有序广播


下面是一个例子:

MainActivity.Java:

package com.example.wanglunhui.sortedbroadcast;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;


public class MainActivity extends Activity
{
   Button send;
   @Override
   public void onCreate(Bundle savedInstanceState)
   {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      // 获取程序中的send按钮
      send = (Button) findViewById(R.id.send);
      send.setOnClickListener(new OnClickListener()
      {
         @Override
         public void onClick(View v)
         {
            // 创建Intent对象
            Intent intent = new Intent();
            intent.setAction("org.crazyit.action.CRAZY_BROADCAST");
            intent.putExtra("msg", "简单的消息");
            // 发送有序广播
            sendOrderedBroadcast(intent, null);
         }
      });
   }
}

MyReceiver.java里面存入了处理结果并向下一个发送:

package com.example.wanglunhui.sortedbroadcast;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

public class MyReceiver extends BroadcastReceiver
{
   @Override
   public void onReceive(Context context, Intent intent)
   {
      Toast.makeText(context,    " 接收到的Intent的Action为:"
            + intent.getAction() + "\n消息内容是:"
            + intent.getStringExtra("msg")
            , Toast.LENGTH_LONG).show();
      // 创建一个Bundle对象,并存入数据
      Bundle bundle = new Bundle();
      bundle.putString("first", "第一个BroadcastReceiver存入的消息");
      // 将bundle放入结果中
      setResultExtras(bundle);
      // 不取消Broadcast的继续传播
      //abortBroadcast(); // ①若取消时,则下一个接收者不能收到此广播
   }
}

下一个Receiver:MyReceiver2.java:

package com.example.wanglunhui.sortedbroadcast;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

public class MyReceiver2 extends BroadcastReceiver
{
   @Override
   public void onReceive(Context context, Intent intent)
   {
      Bundle bundle = getResultExtras(true);
      // 解析前一个BroadcastReceiver所存入的key为first的消息
      String first = bundle.getString("first");
      Toast.makeText(context, "峰喜Broadcast存入的消息为:"
         + first, Toast.LENGTH_LONG).show();
   }
}

AndroidManifest.java用设置优先级:
<receiver android:name=".MyReceiver">
    <intent-filter android:priority="20">
        <action android:name="org.crazyit.action.CRAZY_BROADCAST" />
    </intent-filter>
</receiver>
<receiver android:name=".MyReceiver2">
    <intent-filter android:priority="0">
        <action android:name="org.crazyit.action.CRAZY_BROADCAST" />
    </intent-filter>
</receiver>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值