天天看點

廣播接收者

廣播接收者案例_ip撥号器   定義一個類繼承broadcastReceiver    

  1. public class OutGoingCallReceiver extends BroadcastReceiver {
  2. //當接收到外撥電話的事件的時候 這個方法就會執行
  3. @Override
  4. public void onReceive(Context context, Intent intent) {
  5. //[0]擷取使用者儲存的ipnumber
  6. SharedPreferences spPreferences = context.getSharedPreferences("config", 0);
  7. String ipNumber = spPreferences.getString("ipnumber", "");
  8. //[1]擷取目前撥打的号碼
  9. String currentNumber = getResultData();
  10. //[2]判斷一下是否以0開頭 然後在去加上17951
  11. if (currentNumber.startsWith("0")) {
  12. //修改撥打的電話号碼
  13. setResultData(ipNumber+currentNumber);
  14. }
  15. }
  16. }

在清單檔案裡面配置    

  1. <receiver android:name="com.itheima.ipdail.OutGoingCallReceiver">
  2. <intent-filter >
  3. <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
  4. </intent-filter>
  5. </receiver>

mainActivity的邏輯 主要是儲存ip号碼   

  1. //[1]擷取number
  2. String ipNumber = et_number.getText().toString().trim();
  3. //[2]把ipnumber存起來 擷取sp執行個體
  4. SharedPreferences sp = getSharedPreferences("config", 0);
  5. //[2.1]擷取sp的編輯器
  6. sp.edit().putString("ipnumber", ipNumber).commit();
  7. Toast.makeText(getApplicationContext(), "儲存成功", 1).show();

3 廣播接收者案例_sd卡狀态監聽   [1]定義廣播接收者   

  1. public class SdcardReceiver extends BroadcastReceiver {
  2. //當sd卡狀态發生改變的時候調用
  3. @Override
  4. public void onReceive(Context context, Intent intent) {
  5. //擷取目前廣播的事件類型
  6. String action = intent.getAction();
  7. if ("android.intent.action.MEDIA_MOUNTED".equals(action)) {
  8. System.out.println("sd卡挂載了");
  9. }else if ("android.intent.action.MEDIA_UNMOUNTED".equals(action)) {
  10. System.out.println("說明sd卡解除安裝了");
  11. }
  12. }
  13. }

  [2]在清單檔案裡面配置一下

  1. <receiver android:name="com.itheima.sdcardstate.SdcardReceiver">
  2. <intent-filter >
  3. <action android:name="android.intent.action.MEDIA_MOUNTED"/>
  4. <action android:name="android.intent.action.MEDIA_UNMOUNTED"/>
  5. <data android:scheme="file"/>
  6. </intent-filter>
  7. </receiver>

4 廣播接收者案例_短信監聽器   [1]定義一個類繼承broadCastReceiver   

  1. public class SmsReceiver extends BroadcastReceiver {
  2. //當短信到來就會執行這個方法
  3. @Override
  4. public void onReceive(Context context, Intent intent) {
  5. // 擷取發送短信的号碼 和 内容
  6. Object[] objects = (Object[])intent.getExtras().get("pdus");
  7. for (Object object : objects) {
  8. //建立smsmessage的執行個體
  9. SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) object);
  10. String body = smsMessage.getMessageBody();
  11. String address = smsMessage.getOriginatingAddress();
  12. System.out.println("body:"+body+"----"+address);
  13. }
  14. }
  15. }

[2]在清單檔案進行配置

  1. <receiver android:name="com.itheima.smslistener.SmsReceiver" >
  2. <intent-filter>
  3. <action android:name="android.provider.Telephony.SMS_RECEIVED" />
  4. </intent-filter>
  5. </receiver>

5 不同版本廣播的特點   [1]4.0之後 谷歌為了安全考慮 在設定頁面多了一個強行停止的按鈕 如果應用被強行停止 那麼廣播就不生效   [2]4.0之後 要求第一次安裝的時候必須要有界面 沒有界面廣播接收者是不生效的     [3]2.3的手機是沒有上面這樣安全設計    [4]4.4系統短信監聽事件不生效.  

6 廣播接收者案例_解除安裝安裝   [1]定義一個廣播接收者    

  1. public class AppStateReceiver extends BroadcastReceiver {
  2. //當 應用被解除安裝 或者安裝的時候調用
  3. @Override
  4. public void onReceive(Context context, Intent intent) {
  5. System.out.println("嘻嘻");
  6. //擷取目前廣播的事件類型
  7. String action = intent.getAction();
  8. if ("android.intent.action.PACKAGE_ADDED".equals(action)) {
  9. System.out.println("shuoming 應用被安裝了:"+intent.getData());
  10. }else if ("android.intent.action.PACKAGE_REMOVED".equals(action)) {
  11. System.out.println("說明應用被解除安裝了");
  12. }
  13. }
  14. }

[2]在清單檔案裡面配置一下

  1. <receiver android:name="com.itheima.appstate.AppStateReceiver">
  2. <intent-filter >
  3. <action android:name="android.intent.action.PACKAGE_ADDED"/>
  4. <action android:name="android.intent.action.PACKAGE_REMOVED"/>
  5. <data android:scheme="package"/>
  6. </intent-filter>
  7. </receiver>

7 廣播接收者案例_開機啟動    11-09 03:49:29.357: E/AndroidRuntime(1129): java.lang.RuntimeException: Unable to start receiver com.itheima.boot.BootReceiver: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

8 有序廣播和無序廣播   無序廣播:類似新聞聯播 每天晚上7點準時開播  sendBroadcast(Intent intent) 解耦  軟體工程   有序廣播:按照一定的優先級 接收廣播       有序廣播可以被攔截 資料可以被修改    無序廣播不可以被攔截 資料不可以被修改 

9 特殊廣播接收者   操作特别頻繁的廣播事件  在清單檔案注冊無效    注冊廣播接收者有2種方式    [1]第一種方式就是在清單檔案裡面注冊    [2]通過代碼的方式去注冊

繼續閱讀