广播--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.系统广播
收到短信代码:
//收到短信
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广播系统大全