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