版权声明:本文为博主原创文章,未经博主允许不得转载。
之前练习的是无序广播,这次实现有序广播。
具体代码实现如下(发送者):
public class MainActivity extends AppCompatActivity {
private EditText et_main_content;
private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_main_content = (EditText) findViewById(R.id.et_main_content);
intent = new Intent();
//设置广播的名字(设置Action)
intent.setAction("com.example.android20_sender.1008");
}
public void send(View view){
String content=et_main_content.getText().toString();
//携带数据
intent.putExtra("data",content);
//发送广播(无序广播)
//sendBroadcast(intent);
//发送黏性广播
//sendStickyBroadcast(intent);
//发送广播(有序)
sendOrderedBroadcast(intent,null);
}
}
静态广播接受者
public class MyReceived01 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(“com.example.android20_sender.1008”.equals(intent.getAction())){
String data=intent.getStringExtra(“data”);
Log.i(“test”,”01号接受者收到广播了:”+data);
//改变内容
Bundle bundle=new Bundle();
bundle.putString("content",data+"吗?,骗你的");
setResultExtras(bundle);
/*if("中奖了".equals(data)){
//取消广播传播
abortBroadcast();
}*/
}
}
}
动态广播注册
public class MainActivity extends AppCompatActivity {
private MyReceived02 myReceived02;
private IntentFilter intentFilter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myReceived02 = new MyReceived02();
intentFilter = new IntentFilter();
intentFilter.addAction("com.example.android20_sender.1008");
//Integer.MAX_VALUE
intentFilter.setPriority(998);
}
@Override
protected void onResume() {
super.onResume();
//动态注册广播
registerReceiver(myReceived02,intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
//注销动态广播
unregisterReceiver(myReceived02);
}
}
动态广播接受者
public class MyReceived02 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(“com.example.android20_sender.1008”.equals(intent.getAction())){
// String data=intent.getStringExtra(“data”);
Bundle bundle=getResultExtras(true);
String content=bundle.getString(“content”);
Log.i(“test”,”02号接受者收到广播了:”+content);
}
}
}
广播优先级(priority)-1000~1000
系统广播(短信SMS) 有序
这里写图片描述
自定义短信接受(清单文件配置)
自定义短信接受代码实现
public class MySMSReceived extends BroadcastReceiver {
private String body;
@Override
public void onReceive(Context context, Intent intent) {
if("android.provider.Telephony.SMS_RECEIVED".equals(intent.getAction())){
Log.i("test","有短信进来了");
//获取短信的内容
Bundle bundle=intent.getExtras();
Object[] objects= (Object[]) bundle.get("pdus");
SmsMessage[] smsMessages=new SmsMessage[objects.length];
for (int i = 0; i < objects.length; i++) {
smsMessages[i]=SmsMessage.createFromPdu((byte[])objects[i]);
}
for (SmsMessage message : smsMessages) {
String address = message.getDisplayOriginatingAddress();
body = message.getDisplayMessageBody();
Log.i("test","发送人:"+ address);
Log.i("test","内容:"+ body);
}
if(body.contains("中奖了")){
//拦截
Log.i("test","拦截...");
abortBroadcast();
}
}
}
}