歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

偵聽Android手機ServiceState

有些時候,需要偵聽手機的ServiceState,本文從應用開發的角度,給出偵聽Android系統手機ServiceState的方法:偵聽廣播TelephonyIntents.ACTION_SERVICE_STATE_CHANGED;在TelephonyManager中注冊ListenerPhoneStateListener。

一、通過偵聽廣播

Android內部定義了ServiceState變化時,系統發出的廣播(Action:TelephonyIntents.ACTION_SERVICE_STATE_CHANGED)。所以,如果要接收ServiceState的通知,可以通過代碼注冊

  1. IntentFilter intentFilter = newIntentFilter(TelephonyIntents.ACTION_SERVICE_STATE_CHANGED);  
  2. // registerReceiver()是ContextWrapper定義的方法,子類中實現   
  3. registerReceiver(receiver, intentFilter);  

receiver是BroadcastReceiver,在其onReceive(Contextcontext, Intent intent)中,就可以偵聽到ServiceState的變化:

  1. onReceive(Context context, Intent intent) {  
  2. String action = intent.getAction();  
  3. if(action.equals(TelephonyIntents.ACTION_SERVICE_STATE_CHANGED)) {  
  4.    ServiceState ss = ServiceState.newFromBundle(intent.getExtras())  
  5.     switch(ss.getState()) {  
  6.     case ServiceState.STATE_IN_SERVICE:  
  7.         //handle for …   
  8.        break;  
  9.     case …  
  10.        break;  
  11. else if () {  
  12.     //other broadcasts…   
  13. }  
  14. }  

在不用的時候,記得取消注冊。而要接收這個廣播,需要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:

  1. TelephonyManager telMgr =(TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);  
  2. telMgr.listen(mPhoneStateListener,PhoneStateListener.LISTEN_SERVICE_STATE);  

在mPhoneStateListener這個PhoneStateListener中overrideonServiceStateChanged(ServiceState serviceState)方法就可以了。

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved