android學習筆記之Intent與BroadcastReceiver
監聽安卓本地的Broadcast Intents
比如時區的改變,資料連線狀態,簡訊的接收,來電,底座模式,電池狀態等等。
下面的列表介紹的是一些裝置狀態變化的Actions:
1.ACTION_BOOT_COMPLETED 當你的安卓系統啟動完成時觸發,App要接收此廣播,需要RECEIVE_BOOT_COMPLETED許可權。
2.ACTION_CAMERA_BUTTON 當照相機的按鈕被點選。
3.ACTION_DATE_CHANGED 和 ACTION_TIME_CHANGED 日期或者時間被手動改變時會傳送此廣播。
4.ACTION_MEDIA_EJECT 外儲存裝置被物理得拔出的時候觸發,通常指的是SD卡
5.ACTION_MEDIA_MOUNTED和ACTION_MEDIA_UNMOUNTED 前者是外部儲存(SD卡或U盤)被成功被載入,後者是成功被移除(注意這個跟物理拔出不一樣)。
注意:監聽SD卡狀態時候,除了ACTION必須以外,你的過濾器還需要data scheme為file.(比如intentFilter.addDataScheme("file"),很重要,不然收不到廣播)
6.ACTION_NEW_OUTGOING_CALL 監聽電話打出的廣播,那麼我可以看到號碼麼?答:可以,首先一定是存在發來的intent中,那麼intent只要找到這個儲存的鍵,就可以找到值,這個鍵是什麼呢?答:EXTRA_PHONE_NUMER。 注意:需要許可權PROCESS_OUTGOING_CALLS。
7.ACTION_SCREEN_ON和ACTION_SCREEN_OFF 分別監聽的是螢幕開啟和關閉。
8.ACTION_TIMEZONE_CHANGED 當前手機時區發生改變,Intent包含了time-zone鍵,返回的是Java.util.TimeZone的ID
監聽電池狀態改變
之前我們討論過這個電池狀態的廣播Intent是屬於Sticky Intent,所以通常不需要去宣告一個接受者去接收。
Aciton是什麼呢? 答:Intent.ACTION_BATTERY_CHANGED
例子:
IntentFilter batIntentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent battery = context.registerReceiver(null, batIntentFilter);
int status = battery.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging =
status == BatteryManager.BATTERY_STATUS_CHARGING ||
status == BatteryManager.BATTERY_STATUS_FULL;
這個intent裡面包含了當前電量的電量狀態,還有是否是充電狀態。
值得注意一點:你不能在mainfest中去註冊一個Receiver來監聽電池變化這個ACTION。但是呢,你還是可以監視電源的連線情況,低電池水平,和接下來的列出的:
1.ACTION_BATTERY_LOW 電池電量低
2.ACTION_BATTERY_OKAY 電池電量水平OK
3.ACTION_POWER_CONNECTED 與電源連線
4.ACTION_POWER_DISCONNECTED 與電源斷開
監聽連線的改變(比如藍芽,NFC,網路,wi-fi)
那麼這裡所指的連線改變具體是什麼呢?
答:包括頻寬,延遲,可用的網路連線和一些對APP有用的資訊發生改變。
應用場景舉例:比如當你斷開了wifi,你可能需要掛起app正在更新的東西,直到你又連上了。
註冊這種廣播,動態靜態都可以,具體連線的資訊,你還需要用到Connectivity Manager。
Aciton: mainfest中:android.net.conn.CONNECTIVITY_CHANGE,程式中:ConnectivityManager.CONNECTIVITY_ACTION
例子:
String svcName = Context.CONNECTIVITY_SERVICE;
ConnectivityManager cm = (ConnectivityManager)context.getSystemService(svcName);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork.isConnectedOrConnecting();
boolean isMobile = activeNetwork.getType() ==
ConnectivityManager.TYPE_MOBILE;
關於Connectivity Manager更多的資訊,還有NFC,WI-FI等下次再討論。
監聽底座狀態改變
安卓裝置可以放在車的底座或者辦工桌的手機底座上。
廢話不多說了,Action: Intent.ACTION_DOCK_EVENT(android.intent.action.ACTION_DOCK_EVENT) ,你可以得到底座狀態和底座型別。
像電池狀態的監聽,這個廣播intent,也是sticky的。
例子:
IntentFilter dockIntentFilter =
new IntentFilter(Intent.ACTION_DOCK_EVENT);
Intent dock = registerReceiver(null, dockIntentFilter);
int dockState = dock.getIntExtra(Intent.EXTRA_DOCK_STATE,
Intent.EXTRA_DOCK_STATE_UNDOCKED);
boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;
執行時管理Mainfest中宣告的Receivers.
通過使用Package Manager, 你可以啟用或者禁用接受者,通過方法setComponentEnabledSetting(還包括activity,service)。
這樣的話,當你需要監聽的時候,就可以禁用這個廣播。(爽吧)
下面給出程式碼片段:
ComponentName
myReceiverName =
new
ComponentName(
this
,
MyReceiver.
class
);
PackageManager
pm = getPackageManager();
//
Enable a manifest receiver
pm.setComponentEnabledSetting(myReceiverName,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
//
Disable a manifest receiver
pm.setComponentEnabledSetting(myReceiverName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
相關文章
- Android學習筆記之IntentAndroid筆記Intent
- Android學習筆記02——Intent的使用Android筆記Intent
- Android學習筆記(建立Menu,Intent的使用)Android筆記Intent
- Android學習之四大元件(四)——BroadcastReceiverAndroid元件AST
- Android之BroadcastReceiverAndroidAST
- Android OpenGL ES學習筆記之概要Android筆記
- Android學習筆記之藍芽通訊...Android筆記藍芽
- Android 學習筆記雜記Android筆記
- Android學習筆記·ANRAndroid筆記
- Android學習筆記·HandlerAndroid筆記
- Android SQLite學習筆記AndroidSQLite筆記
- Android學習筆記一Android筆記
- Android學習筆記(6)Android筆記
- Android學習筆記(3)Android筆記
- Android學習筆記(4)Android筆記
- Android學習筆記(5)Android筆記
- Android學習筆記(2)Android筆記
- Android學習筆記(1)Android筆記
- Android學習筆記(8)Android筆記
- Android學習筆記(7)Android筆記
- Android GC 學習筆記AndroidGC筆記
- android學習筆記--ScannerAndroid筆記
- android學習筆記--AlarmManagerAndroid筆記
- android學習筆記二Android筆記
- android學習筆記三Android筆記
- Android學習筆記四Android筆記
- android學習筆記五Android筆記
- android學習筆記六Android筆記
- Android OpenGL 學習筆記Android筆記
- ReactNative學習筆記十六之Android打包ApkReact筆記AndroidAPK
- mysql學習筆記之備份與恢復MySql筆記
- Android學習筆記之build.gradle檔案Android筆記UIGradle
- 《Android藝術開發探索》學習筆記之IPCAndroid筆記
- Android Linker學習筆記Android筆記
- Android學習筆記·ADBAndroid筆記
- Android 學習筆記思考篇Android筆記
- Android 學習筆記核心篇Android筆記
- Android學習筆記(五)——FragmentAndroid筆記Fragment