Adroid 廣播 分為有序和無(wú)序廣播 sendOrderBroadcast 、sendBroadcast。
無(wú)序廣播。 廣播發(fā)送方: 實(shí)例化一個(gè)Intent,用intent.setAction(設(shè)置廣播名字),并且攜帶要發(fā)送的 數(shù)據(jù)(intent.putExtra),然后用sendBroadcast(intent)發(fā)送廣播。
intent = new Intent(); //設(shè)置名字 intent.setAction("com.example.phonebroad.955"); } public void send(View view){ //獲取發(fā)送的內(nèi)容 String date=mian_01.getText().toString(); intent.putExtra("data",date); sendBroadcast(intent); //粘性廣播 (也分為有序和無(wú)序 已過(guò)時(shí),使用這個(gè)api需要權(quán)限android.Manifest.permission.BROADCAST_STICKY,粘性廣播的特點(diǎn)是Intent會(huì)一直保留到廣播事件結(jié)束,而這種廣播也沒(méi)有所謂的10秒限制,10秒限制是指普通的廣播如果onReceive方法執(zhí)行時(shí)間太長(zhǎng),超過(guò)10秒的時(shí)候系統(tǒng)會(huì)將這個(gè)廣播置為可以干掉的candidate,一旦系統(tǒng)資源不夠的時(shí)候,就會(huì)干掉這個(gè)廣播而讓它不執(zhí)行。)api需要權(quán)限:<uses-permission android:name="android.permission.BROADCAST_STICKY"></uses-permission><application //sendStickyBroadcast(intent); }接收方: 需要配置廣播接受者: 1.在清單文件中配置(靜態(tài)廣播 )
<receiver android:name=".ReceviedActivity"> <intent-filter> <action android:name="com.example.phonebroad.955"></action> </intent-filter> </receiver> </application>public class ReceviedActivity extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //判斷你要接收的廣播的名字 if("com.example.phonebroad.955".equals(intent.getAction())){ //接收內(nèi)容 String data=intent.getStringExtra("data"); Log.i("hhhhhh",data); } } 2.使用java 代碼(動(dòng)態(tài)廣播 優(yōu)先于靜態(tài)廣播接收)public class Recevied2 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if ("com.example.phonebroad.955".equals(intent.getAction())){ String data=intent.getStringExtra("data"); Log.i("hhhh2",data); } }}public class MainActivity extends AppCompatActivity { PRivate Recevied2 recevied2; private IntentFilter intentFilter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); recevied2 = new Recevied2(); //意圖過(guò)濾器 intentFilter = new IntentFilter(); intentFilter.addAction("com.example.phonebroad.955"); }//恢復(fù)時(shí)注冊(cè) @Override protected void onResume() { super.onResume(); registerReceiver(recevied2,intentFilter); }//銷毀時(shí)取消注冊(cè) @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(recevied2); }}系統(tǒng)廣播之監(jiān)聽(tīng)手機(jī)通話狀態(tài)事件
public class PhoneActivity extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { if("android.intent.action.PHONE_STATE".equals(intent.getAction())){ //獲取電話號(hào)碼 String number=intent.getStringExtra("incoming_number"); Log.i("phone","大胡子:"+number); //電話管理者 TelephonyManager tm= (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); //來(lái)電狀態(tài) int state=tm.getCallState(); //3個(gè)狀態(tài) 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; } } }}配置權(quán)限及廣播接受者<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> <application android:allowBackup="true" android:icon="@m“合抱之木,生于毫末;九層之臺(tái),起于累土;千里之行,始于足下。“新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注