版權聲明:本文為博主原創文章,未經博主允許不得轉載。
之前練習的是無序廣播,這次實現有序廣播。
具體代碼實現如下(發送者):
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;@Overrideprotected 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);}@Overrideprotected void onResume() { super.onResume(); //動態注冊廣播 registerReceiver(myReceived02,intentFilter);}@Overrideprotected 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;@Overridepublic 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(); } }}}
新聞熱點
疑難解答