android监听电话状态问题
2012-09-21 16:00
375 查看
有时候我们开发软件的时候,需要拿到手机当前是否在通话状态,以做相应的处理。这时候就必然要去检测当前是否正在通话中。
先说说我们一般的做法:
1,在AndroidManifest.xml文件中,添加相应的权限和注册相应的广播接收。如下:
2,然后我们写个广播接收类去接收系统消息并做相应处理。如下:
3,将程序跑起来。看打印我们就能看到的调用顺序(当然了,我们也可以将上面的接收用两个类分开。这里我只是举个例子而已)
A:拨打15221XXXX好友,没接通前立马挂电话。State执行顺序:OFFHOOK---->IDLE
B:拨打15221XXXX好友,等着对方接通电话后。State执行顺序:OFFHOOK---->IDLE
C:好友打进来,自己不接,也不主动挂断。State执行顺序:RINGING---->IDLE
D:好友打进来,自己主动挂断或者好友主动挂断。State执行顺序:RINGING---->IDLE
E:好友打进来,我接。State执行顺序:RINGING---->OFFHOOK---->IDLE
本来,这是android系统应用层供我们去使用的一些应用接口,使用起来也很爽。但是前几日,我往手机上装了个软件:LBE安全大师。发现上面的事件调用就不是那么回事儿了。气死我了。后来我反编译大致看了一下它的代码,它用反射机制把FrameWork层的很多函数重写了。比如endCall()方法等。更可气的是,这种类似软件市面上很多,而且装机量也很大。这让我们这些小开发者无路可走。
下面说说装了LBE安全大师后,电话状态的执行顺序
A:拨打15221XXXX好友,没接通前立马挂电话。State执行顺序:IDLE---->IDLE
B:拨打15221XXXX好友,等着对方接通电话后。State执行顺序:IDLE---->IDLE
C:好友打进来,自己不接,也不主动挂断。State执行顺序:IDLE---->IDLE
D:好友打进来,自己主动挂断或者好友主动挂断。State执行顺序:IDLE---->IDLE
E:好友打进来,我接。State执行顺序:IDLE---->IDLE---->IDLE
吼吼,他NN个熊。。。
先说说我们一般的做法:
1,在AndroidManifest.xml文件中,添加相应的权限和注册相应的广播接收。如下:
<uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.CALL_PRIVILEGED" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<!-- 拨打电话 --> <receiver android:name=".broadcast.PhoneStatReceiver"> <intent-filter> <action android:name="android.intent.action.PHONE_STATE" /> <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> </intent-filter> </receiver>
2,然后我们写个广播接收类去接收系统消息并做相应处理。如下:
@Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) { Log.e("hg", "呼出……OUTING"); } if (intent.getAction().equals("android.intent.action.PHONE_STATE")) { TelephonyManager tm = (TelephonyManager) context .getSystemService(Service.TELEPHONY_SERVICE); switch (tm.getCallState()) { case TelephonyManager.CALL_STATE_RINGING: Log.e("hg", "电话状态……RINGING"); break; case TelephonyManager.CALL_STATE_OFFHOOK: Log.e("hg", "电话状态……OFFHOOK"); break; case TelephonyManager.CALL_STATE_IDLE: Log.e("hg", "电话状态……IDLE"); break; } } }
3,将程序跑起来。看打印我们就能看到的调用顺序(当然了,我们也可以将上面的接收用两个类分开。这里我只是举个例子而已)
A:拨打15221XXXX好友,没接通前立马挂电话。State执行顺序:OFFHOOK---->IDLE
B:拨打15221XXXX好友,等着对方接通电话后。State执行顺序:OFFHOOK---->IDLE
C:好友打进来,自己不接,也不主动挂断。State执行顺序:RINGING---->IDLE
D:好友打进来,自己主动挂断或者好友主动挂断。State执行顺序:RINGING---->IDLE
E:好友打进来,我接。State执行顺序:RINGING---->OFFHOOK---->IDLE
本来,这是android系统应用层供我们去使用的一些应用接口,使用起来也很爽。但是前几日,我往手机上装了个软件:LBE安全大师。发现上面的事件调用就不是那么回事儿了。气死我了。后来我反编译大致看了一下它的代码,它用反射机制把FrameWork层的很多函数重写了。比如endCall()方法等。更可气的是,这种类似软件市面上很多,而且装机量也很大。这让我们这些小开发者无路可走。
下面说说装了LBE安全大师后,电话状态的执行顺序
A:拨打15221XXXX好友,没接通前立马挂电话。State执行顺序:IDLE---->IDLE
B:拨打15221XXXX好友,等着对方接通电话后。State执行顺序:IDLE---->IDLE
C:好友打进来,自己不接,也不主动挂断。State执行顺序:IDLE---->IDLE
D:好友打进来,自己主动挂断或者好友主动挂断。State执行顺序:IDLE---->IDLE
E:好友打进来,我接。State执行顺序:IDLE---->IDLE---->IDLE
吼吼,他NN个熊。。。
相关文章推荐
- android监听电话状态问题
- Android监听电话状态
- android 2.1 监听电话状态并自动接听来电
- android电话状态的监听
- Android监听手机电话状态与发送邮件通知来电号码的方法(基于PhoneStateListene实现)
- Android 监听电话的拨打状态
- android 电话状态的监听(来电和去电) PhoneStateListener和TelephonyManager
- Android解决使用广播监听网络状态变化时接收到多个广播的问题
- android 电话状态的监听(来电和去电) PhoneStateListener和TelephonyManager
- Android 电话状态的监听
- android 2.1 监听电话状态并自动接听来电
- android,服务,监听电话状态,实现电话录音
- Android中如何监听手机电话状态
- android 电话状态监听(来电和去电)实现代码
- Android广播接实现电话的监听(电话的状态,拦截)
- android 2.1 监听电话状态并自动接听来电
- 监听有线/蓝牙耳机的插入与拔出,电话的状态及拦截-Android
- android 2.1 监听电话状态并自动接听来电
- android 2.1 监听电话状态并自动接听来电