Android系统中,应用程序取电话状态只能取到TelephonyManager.CALL_STATE_IDLE,TelephonyManager.CALL_STATE_OFFHOOK和TelephonyManager.CALL_STATE_RINGING,无法区分正在拨号和电话接通,而Android电话的源码中有Call.State可以区分各种状态,有以下几种状态:DIALING表示正在拨号,ALERTING是电话拨出后的状态,DISCONNECTED表示电话已挂断,DISCONNECTING表示正在挂断电话,IDLE,因此综合应用程序能监听到的电话状态和系统内部的Call.State就可以完全区分各种状态.
把系统内部的Call.State广播出来的方法如下:
一.找到系统源码目录下的\packages\apps\Phone\src\com\android\phone目录中的InCallScreen.java文件
二.打开InCallScreen.java找到onPhoneStateChanged函数,在第一句前加上以下代码:
Call.State state = mCM.getActiveFgCallState();
log("onPhoneStateChanged()..."+state);
Intent intent = new Intent("PhoneState");
intent.putExtra("nState", state.toString());
sendBroadcast(intent);
三.保存,编译OS
四.在应用中用以下几个状态:
1.TelephonyManager.CALL_STATE_IDLE//电话断开
2.TelephonyManager.CALL_STATE_RINGING//来电
3.DIALING//正在拨号
4.ACTIVE//电话接通