最近在網上學習了關于Android廣播這個技術點,下面我將我了解得分享給大家,不喜勿噴哦! 廣播這個東西很好了解吧!現實中就有很多這樣的例子,我就不一一說了。 廣播有很多種:自定義廣播(動態廣播 靜態廣播 無序廣播 有序廣播)黏性廣播(已過時) 系統廣播等等,廣播有發送者就有接收者,而且不能超出一個范圍(舉個例子:同一部手機),主要用到 Intent傳值接收值 。 自定義廣播就是自己發自己收,新建兩個Module 項目,一個作為發送者,一個作為接收者。廣播發送者得到Intent,給自己去一個名字。寫入你需要的值, sendBroadcast(intent) 發送出去。廣播接收者就是在項目新建一個類繼承于BroadcastReceiver,重寫它的方法(就一個),判斷你得到廣播名字是否和發送者的一致,然后打印,但是還沒完,還需要配置一下。配置有兩種方式:清單文件配置(AndroidManifest) java代碼配置。 java代碼配置:
PRivate MyReceived01 myReceived01;private IntentFilter intentFilter;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView r1_main_text= (TextView) findViewById(R.id.r1_main_text); Intent intent=new Intent(); String data=intent.getStringExtra("data"); r1_main_text.setText(data); //new一個接受者 myReceived01 = new MyReceived01(); //new一個intent過濾器 intentFilter = new IntentFilter(); //給intent過濾器增加行為 intentFilter.addAction("com.example.yang_broadcastsender.1211");}//動態廣播 用java代碼配置@Overrideprotected void onResume() { super.onResume(); //動態注冊廣播 registerReceiver(myReceived01,intentFilter);}@Overrideprotected void onDestroy() { super.onDestroy(); //注銷廣播 unregisterReceiver unregisterReceiver(myReceived01);}我用的是清單文件配置: //name就是廣播名字 這樣就可以了。 還有就是動態廣播和靜態廣播,它們性質都是一樣的,有三點不同:動態廣播用代碼配置, 靜態廣播用清單文件配置,而且動態廣播的優先級必靜態廣播要高, 最后一個就是作為接收者一方,動態廣播退出程序就接收不到廣播,這個可以用黏性廣播解決: /**發送黏性廣播 * 動態廣播退出程序就銷毀了接受不了廣播 * 用黏性廣播可以做到 離線接受 */ sendStickyBroadcast(intent); 靜態廣播都可以接受。 系統廣播就有很多了,具體親們可以去網上下個廣播大全,有相對應的名字,我這里就做了一個電話監聽: if (“android.intent.action.PHONE_STATE”.equals(intent.getAction())){ //獲取電話號碼 String phone=intent.getStringExtra(“incoming_number”); Log.i(“test”,”有電話進來了,”+phone); //獲取電話管理者 TelephonyManager manager= (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); //得到電話的狀態 int s=manager.getCallState(); switch (s) { case TelephonyManager.CALL_STATE_RINGING: Log.i(“tt”,”電話打入:”+phone); break; case TelephonyManager.CALL_STATE_OFFHOOK: Log.i(“tt”,”電話接通:”+phone); break; case TelephonyManager.CALL_STATE_IDLE: Log.i(“tt”,”電話掛斷:”+phone); break; } } 方法是一樣的。
新聞熱點
疑難解答