田海立

2012-03-16

有些时候,需要侦听手机的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)方法就可以了。

更多相关文章

  1. startService与bindService
  2. UIView的drawRect: 和 - (void)setNeedsDisplay 的一些理解
  3. android实现TextView垂直或水平滚动
  4. 安装Android的Eclipse插件ADT遇到“requires 'org.eclipse.wst.s
  5. Android(安卓)-- 自定义标题栏,背景颜色填充满
  6. Android打包jar的两种方法
  7. 【安卓笔记】touch事件的分发和消费机制
  8. Android(安卓)Fragment的生命周期详解
  9. Android(安卓)TextView中显示图片

随机推荐

  1. Android(安卓)EditText按下输入法软件的e
  2. android开发每日汇总【2011-10-31】
  3. android 开机启动程序
  4. Android高手应该精通哪些内容?
  5. Android热修复(二):以DexClassLoader类加载
  6. Android在TQ2440开发板上的移植
  7. Android应用实例之----基于Service与Cont
  8. Android驱动使用JNI调用
  9. Android(安卓)- Android(安卓)Studio 安
  10. Android使用RecyclerView实现列表功能