广播--BroadcastReceiver2

1.有序广播

    普通广播不能中断,所有监听这个广播的都能收到信息。但是有序广播确可以中断,中断广播的传播(abortBroadcast();)

     优点:

       按优先级的不同,优先Receiver可以对数据进行处理,并传给下一个Receiver,设置优先级,在配置文件中<intent-filter>节点里面添加android:priority属性,它的取值范围为:-1000到1000

      通过abortBroadcast可以终止广播

    缺点:

       优先接收到Broadcast的Receiver可通过setResultExtras(Bundle)方法将处理结果存入到Broadcast中

代码如下:

 //有序广播,在发送广播中写
        sendOrderedBroadcast(intent,null);


//优先级,你需要哪一个接收者先接收就设置它的优先级大与其他

-<intent-filter android:priority="1000"> </intent-filter>


//改变传递内容

public class Receiver01 extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        //得到广播名
        String action=intent.getAction();
        if ("包名".equals(action)){
            String content=intent.getStringExtra("content");
            Log.i("test","receiver01:"+content);
            //改变有序传递内容
            Bundle bundle=new Bundle();
            bundle.putString("new",content+"hahahahaahha");
            setResultExtras(bundle);
           

        //判断是否中断内容
            if (content.contains("ha")){     //如果包含了你需要中断的内容就中断
                 abortBroadcast();
            }

        }
    }
}




public class Receiver02 extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action=intent.getAction();
        if ("com.example.g160828_android_brodcast_send.955".equals(action)){
            //String content=intent.getStringExtra("content");

           //接收消息
            Bundle bundle=getResultExtras(true);
            String content=bundle.getString("new");
            Log.i("test","receiver02:"+content);
        }
    }


}



2.系统广播

广播--BroadcastReceiver2  



广播--BroadcastReceiver2



收到短信代码:

 //收到短信
        String action = intent.getAction();
        if ("android.provider.Telephony.SMS_RECEIVED".equals(action)) {
            Bundle bundle = intent.getExtras();
            if (bundle != null) {
                //pdus :protocol data unit
                Object[] objectArray = (Object[]) bundle.get("pdus");    //将pdus里面的内容转化成Object[]数组
                SmsMessage smsMessage[] = new SmsMessage[objectArray.length];     //根据收到的对象长度创建array对象长度(解析短信)
                for (int i = 0; i < smsMessage.length; i++) {
                    byte[] bypdus= (byte[]) objectArray[i];
                    smsMessage[i]=SmsMessage.createFromPdu(bypdus);
                }
                 StringBuffer content=new StringBuffer();  //获取短信内容
                 StringBuffer phonenumber=new StringBuffer();  //获取号码


                for (SmsMessage message : smsMessage) {
                    content.append(message.getMessageBody());
                    phonenumber.append(message.getOriginatingAddress());
                }
              Log.i("test","发送者号码:"+phonenumber.toString()+"   "+"短信内容:"+content.toString());


            }
        }


//获取权限

<!--收取短信权限-->
<uses-permission android:name="android.permission.RECEIVE_SMS"/>

<!--读取短信权限-->
<uses-permission android:name="android.permission.READ_SMS"/>


//来电广播

      //来电广播
       if ("android.intent.action.PHONE_STATE".equals(intent.getAction())) {
           String number = intent.getStringExtra("incoming_number");
           Log.i("test", number);
          telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
           int state = telephonyManager.getCallState();
           switch (state) {
               case TelephonyManager.CALL_STATE_RINGING:
                   Log.i("test", "电话来了");
                 break;

               case TelephonyManager.CALL_STATE_OFFHOOK:
                  Log.i("test", "通话中");
                    break;

               case TelephonyManager.CALL_STATE_IDLE:
                   Log.i("test", "已挂断");
                  break;
            }
      }
    }


//获取权限

<!--读取来电权限-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>


关于系统广播还有很多,如果想要了解的话可以搜索Android广播系统大全