廣播接收者案例_ip撥号器 定義一個類繼承broadcastReceiver
- public class OutGoingCallReceiver extends BroadcastReceiver {
-
-
- //當接收到外撥電話的事件的時候 這個方法就會執行
- @Override
- public void onReceive(Context context, Intent intent) {
-
- //[0]擷取使用者儲存的ipnumber
- SharedPreferences spPreferences = context.getSharedPreferences("config", 0);
- String ipNumber = spPreferences.getString("ipnumber", "");
-
- //[1]擷取目前撥打的号碼
-
- String currentNumber = getResultData();
-
- //[2]判斷一下是否以0開頭 然後在去加上17951
- if (currentNumber.startsWith("0")) {
-
- //修改撥打的電話号碼
- setResultData(ipNumber+currentNumber);
- }
-
-
- }
-
- }
在清單檔案裡面配置
- <receiver android:name="com.itheima.ipdail.OutGoingCallReceiver">
- <intent-filter >
- <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
-
- </intent-filter>
-
- </receiver>
mainActivity的邏輯 主要是儲存ip号碼
-
- //[1]擷取number
- String ipNumber = et_number.getText().toString().trim();
-
- //[2]把ipnumber存起來 擷取sp執行個體
- SharedPreferences sp = getSharedPreferences("config", 0);
- //[2.1]擷取sp的編輯器
- sp.edit().putString("ipnumber", ipNumber).commit();
- Toast.makeText(getApplicationContext(), "儲存成功", 1).show();
-
-
-
-
3 廣播接收者案例_sd卡狀态監聽 [1]定義廣播接收者
- public class SdcardReceiver extends BroadcastReceiver {
-
- //當sd卡狀态發生改變的時候調用
- @Override
- public void onReceive(Context context, Intent intent) {
-
- //擷取目前廣播的事件類型
- String action = intent.getAction();
- if ("android.intent.action.MEDIA_MOUNTED".equals(action)) {
- System.out.println("sd卡挂載了");
- }else if ("android.intent.action.MEDIA_UNMOUNTED".equals(action)) {
- System.out.println("說明sd卡解除安裝了");
- }
-
-
- }
-
- }
[2]在清單檔案裡面配置一下
- <receiver android:name="com.itheima.sdcardstate.SdcardReceiver">
- <intent-filter >
- <action android:name="android.intent.action.MEDIA_MOUNTED"/>
- <action android:name="android.intent.action.MEDIA_UNMOUNTED"/>
- <data android:scheme="file"/>
-
- </intent-filter>
- </receiver>
4 廣播接收者案例_短信監聽器 [1]定義一個類繼承broadCastReceiver
-
- public class SmsReceiver extends BroadcastReceiver {
-
- //當短信到來就會執行這個方法
- @Override
- public void onReceive(Context context, Intent intent) {
-
- // 擷取發送短信的号碼 和 内容
- Object[] objects = (Object[])intent.getExtras().get("pdus");
- for (Object object : objects) {
- //建立smsmessage的執行個體
- SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) object);
- String body = smsMessage.getMessageBody();
- String address = smsMessage.getOriginatingAddress();
-
- System.out.println("body:"+body+"----"+address);
- }
-
-
-
- }
-
- }
[2]在清單檔案進行配置
-
- <receiver android:name="com.itheima.smslistener.SmsReceiver" >
- <intent-filter>
- <action android:name="android.provider.Telephony.SMS_RECEIVED" />
- </intent-filter>
- </receiver>
5 不同版本廣播的特點 [1]4.0之後 谷歌為了安全考慮 在設定頁面多了一個強行停止的按鈕 如果應用被強行停止 那麼廣播就不生效 [2]4.0之後 要求第一次安裝的時候必須要有界面 沒有界面廣播接收者是不生效的 [3]2.3的手機是沒有上面這樣安全設計 [4]4.4系統短信監聽事件不生效.
6 廣播接收者案例_解除安裝安裝 [1]定義一個廣播接收者
- public class AppStateReceiver extends BroadcastReceiver {
- //當 應用被解除安裝 或者安裝的時候調用
- @Override
- public void onReceive(Context context, Intent intent) {
- System.out.println("嘻嘻");
-
- //擷取目前廣播的事件類型
- String action = intent.getAction();
-
- if ("android.intent.action.PACKAGE_ADDED".equals(action)) {
- System.out.println("shuoming 應用被安裝了:"+intent.getData());
- }else if ("android.intent.action.PACKAGE_REMOVED".equals(action)) {
- System.out.println("說明應用被解除安裝了");
- }
-
- }
- }
[2]在清單檔案裡面配置一下
- <receiver android:name="com.itheima.appstate.AppStateReceiver">
- <intent-filter >
- <action android:name="android.intent.action.PACKAGE_ADDED"/>
- <action android:name="android.intent.action.PACKAGE_REMOVED"/>
- <data android:scheme="package"/>
-
- </intent-filter>
- </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]通過代碼的方式去注冊