public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//拿到短信信息
// 短信内容封装在intent中
Bundle bundle=intent.getExtras();
//以pdus为键,如果有多条短信就会取出多条,所以是复数,是object数组,每一个元素,就是一个短信
Object[] objs = ( Object[])bundle.get("pdus");//带一个s表示要取出多条
//用一个for循环把每个元素取出
for (Object object:objs){
//把元素还原成短信
SmsMessage sms = SmsMessage.createFromPdu((byte[]) object);
//如果短信来的是这个号,这里要修改优先级,必须在用户收到系统短信之前就先判断一下,过滤
if(sms.getDisplayOriginatingAddress().equals("13134158030")){
// 全部拦截
abortBroadcast();
}
// 短信内容
sms.getMessageBody();
}
*************************************************************
这个是发送方广播:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void click(View v){
Intent intent=new Intent();
intent.setAction("com.lyz.qw");
//这里发送数据可以在intent里还传,可以用bundle,可以用指定code
//发送有序广播 ,政府,
// 这第三参数是广播接收者对象
sendOrderedBroadcast(intent, null, new MyReceiver() , null, 0, "每人发100斤大米", null);
}
private class MyReceiver extends BroadcastReceiver {
//最终接收者;只接收有序广播,,这个内部类不用在清单文件配置,他是最后收到了的有序广播,而且是一定会收到的
@Override
public void onReceive(Context context, Intent intent) {
String text = getResultData();
Log.i("MainActivity","wqwqwqwq收到了"+text);
}
}
}
三个接收方:
*/
public class HomeSHI extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String text = getResultData();
Log.i("HomeZF","市收到了"+text);
abortBroadcast();
}
}
public class HomeXian extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String text = getResultData();
Log.i("HomeZF","县收到了"+text);
}
public class HomeSHI extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String text = getResultData();
Log.i("HomeZF","市收到了"+text);
abortBroadcast();
}
}
广播接受者短信权限
- 广播时用意图来发的。
- 短信之所以能收到短信,是因为收到了短信的这条广播而已。我们放火墙把他给拦截了,短信就收不到了广播 了,就不显示出来了。
- SD:广播也要求intnet-filter完全匹配,我要监听SD他的状态的广播,所以我的项目在清单文件里要在receiver里的intent -filter 设置完全匹配。
sendOrderedBroadcast(intent, null, null, null, 0, "每人发100斤大米", null);
这个在发送方里设置发送的是有序广播!- 哪个第一个项目ip拨号器是有序广播,而且设置了最终接收者,无论拦不拦截都会收到