android BroadcastReceiver(二)

来源:互联网 发布:苹果免费下载软件 编辑:程序博客网 时间:2024/05/16 10:05

普通广播(Normal Broadcast)

概念:普通广播对于多个接收者来说是完全异步的,通常每个接收者都无需等待即可以接收到广播,接收者相互之间不会有影响。对于这种广播,接收者无法终止广播,即无法阻止其他接收者的接收动作。(PS:就像说出去的话,别人都能听到~~~你也不能反悔,普通广播也有点这种意思。。。)
实现:
1、接收者,三个为例,如:

public class FirstReceiver extends BroadcastReceiver {      private static final String TAG = "hq";      @Override      public void onReceive(Context context, Intent intent) {            String msg = intent.getStringExtra("msg");            Log.i(TAG, "普通广播   FirstReceiver: " + msg +"----"+System.currentTimeMillis());      }  }  

2、注册广播

        firstReceiver = new FirstReceiver();        secondReceiver = new SecondReceiver();        thirdReceiver = new ThirdReceiver();        IntentFilter filter = new IntentFilter();        filter.addAction("android.intent.action.MY_INORDER_BROADCAST");        registerReceiver(firstReceiver, filter);        registerReceiver(secondReceiver, filter);        registerReceiver(thirdReceiver, filter);

3、发送广播
android.intent.action.MY_INORDER_BROADCAST:自己定义的广播地址,先把它当成简单的字符串吧,要和接收广播地址相同,才能收到

Intent intent = new Intent("android.intent.action.MY_INORDER_BROADCAST");        intent.putExtra("msg", "学习中==");        sendBroadcast(intent, "scott.permission.MY_BROADCAST_PERMISSION");

4、结果
普通广播接收

5、验证取消广播实验:在接收者中取消。(注:普通广播是无法取消的!)

public class FirstReceiver extends BroadcastReceiver {      private static final String TAG = "hq";      @Override      public void onReceive(Context context, Intent intent) {            String msg = intent.getStringExtra("msg");            abortBroadcast();            Log.i(TAG, "普通广播   FirstReceiver: " + msg +"----"+System.currentTimeMillis());      }  }  

再次发送广播

    Intent intent = new Intent("android.intent.action.MY_INORDER_BROADCAST");        intent.putExtra("msg", "学习中==");        sendOrderedBroadcast(intent, "scott.permission.MY_BROADCAST_PERMISSION");

结果:
广播接收

WHY?

怎么只显示一条广播的?预测中是三条都显示得。。。这时候才发现,原来命令发错了。。。是sendBroadcast,我写成了sendOrderedBroadcast。。。不过也验证了有序广播是可以取消的~~~
备注:有序广播需要加权限:

有序广播

实现:
1、接收者

public class FirstReceiver extends BroadcastReceiver {      private static final String TAG = "hq";      @Override      public void onReceive(Context context, Intent intent) {          String msg = intent.getStringExtra("msg");          Log.i(TAG, "有序广播  FirstReceiver: " + msg);          Bundle bundle = new Bundle();          //接收到消息后,对其编辑重新发送出去        bundle.putString("msg", msg + "被FirstReceiver编辑过-");          setResultExtras(bundle);      }  }  
public class SecondReceiver extends BroadcastReceiver {    private static final String TAG = "hq";    @Override    public void onReceive(Context context, Intent intent) {        String msg = getResultExtras(true).getString("msg");        Log.i(TAG, "有序广播  SecondReceiver: " + msg);        Bundle bundle = new Bundle();        bundle.putString("msg", msg + "被SecondReceiver编辑过-");        setResultExtras(bundle);        // abortBroadcast(); //添加这句receiver3就接收不到    }}
public class ThirdReceiver extends BroadcastReceiver {      private static final String TAG = "hq";      @Override      public void onReceive(Context context, Intent intent) {          String msg = getResultExtras(true).getString("msg");          Log.i(TAG, "有序广播  ThirdReceiver: " + msg);      }  }  

2、注册广播

    <receiver android:name="com.hq.demo.order.disorder.FirstReceiver" >        <intent-filter android:priority="1000" >            <action android:name="android.intent.action.MY_ORDER_BROADCAST" />            <category android:name="android.intent.category.DEFAULT" />        </intent-filter>    </receiver>    <receiver android:name="com.hq.demo.order.disorder.SecondReceiver" >        <intent-filter android:priority="999" >            <action android:name="android.intent.action.MY_ORDER_BROADCAST" />            <category android:name="android.intent.category.DEFAULT" />        </intent-filter>    </receiver><receiver android:name ="com.hq.demo.order.disorder.ThirdReceiver" >        <intent-filter android:priority="997" >            <action android:name="android.intent.action.MY_ORDER_BROADCAST" />            <category android:name="android.intent.category.DEFAULT" />        </intent-filter>    </receiver>

3、发送广播

Intent intent = new Intent("android.intent.action.MY_ORDER_BROADCAST");        intent.putExtra("msg", "消息.");        sendOrderedBroadcast(intent, "scott.permission.MY_BROADCAST_PERMISSION");

4、结果:
有序广播消息传递

5、有序广播终止,例:在SecondReceiver 添加abortBroadcast();ThirdReceiver 就接收不到消息了。
ThirdReceiver接收不到广播消息

0 0
原创粉丝点击