有些時候,需要偵聽手機的ServiceState,本文從應用開發的角度,給出偵聽Android系統手機ServiceState的方法:偵聽廣播TelephonyIntents.ACTION_SERVICE_STATE_CHANGED;在TelephonyManager中注冊ListenerPhoneStateListener。
一、通過偵聽廣播
Android內部定義了ServiceState變化時,系統發出的廣播(Action:TelephonyIntents.ACTION_SERVICE_STATE_CHANGED)。所以,如果要接收ServiceState的通知,可以通過代碼注冊
receiver是BroadcastReceiver,在其onReceive(Contextcontext, Intent intent)中,就可以偵聽到ServiceState的變化:
在不用的時候,記得取消注冊。而要接收這個廣播,需要READ_PHONE_STATE的permission。
不過注意:這樣的偵聽方式,只能針對能看到底層的開發者,對於純應用開發者來說是不行的。因為,TelephonyIntents是在com.android.intenal.telephony中定義的,而這個包是隱藏的。
二、注冊Listener
既然com.android.intenal.telephony是隱藏的,給Android內部實現用的,那看外部exported的接口有什麼。有一個android.telephony的包,裡面有TelephonyManager。
通過TelephonyManager可以注冊Listener來偵聽ServiceState的變化。
TelephonyManager並不能直接被實例化,要獲取它的實例,需要通過Context.getSystemService(),注冊Listener通過listen(),其中的events是PhoneStateListener.LISTEN_xxx的bitmask:
在mPhoneStateListener這個PhoneStateListener中overrideonServiceStateChanged(ServiceState serviceState)方法就可以了。
更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11