我想在开始通话后检查通过连接的PC呼叫的状态,如果可能的话,使用ADB。
我通过使用adb命令service call phone 2 s16 "some phone number"
输入电话号码,然后发送input keyevent 5
按呼叫按钮来开始通话。
现在我很想找到一种方法来确定呼叫的状态。我需要知道被叫号码当前是否正忙,如果呼叫被取消或者呼叫是否成功/我是否有与被叫号码的开放式语音连接。 有没有办法监控?
手机型号真的无关紧要,也没用我用来调用号码和android版本的android服务/应用程序。手机将被植根。我将使用任何有用的东西。
答案 0 :(得分:6)
adb shell dumpsys telephony.registry | grep mCallState
,将返回:
答案 1 :(得分:1)
确定呼叫是否仍在进行中非常简单。你可以:
确定所调用的数字当前是否正忙是一个完全不同的范围,因为您现在必须处理网络特定的实现(cdma与gsm完全不同)。在CDMA上,几乎不可能弄明白。
答案 2 :(得分:1)
从adb shell
致电TelephonyManager.getCallState()
使用:
adb shell service call phone 30
对于正确解析设备端的service call
命令输出而没有外部依赖关系,请参阅我的answer here
答案 3 :(得分:0)
我刚刚找到了自己的答案。使用“dumpsys telephony.registry”可以获得我需要的所有信息。它包含变量“mCallState”,这正是我需要的。
更新:确定不是我需要的100%,由于某种原因,建立连接时callstate不会改变。如果有人有更多我想知道的想法。
更新2:显然这是Android中的安全衡量标准,您无法在通话期间获得当前通话状态,您只知道用户正在建立一个,但如果已经存在活动连接或者仍然存在拨号。
答案 4 :(得分:0)
您找到这些号码的方法是首先确定您的AOS版本,然后转到GrepCode并转到您的版本。然后点击以下链接: /com.android.internal.telephony.ITelephony (* .java)并搜索CALL_TRANSACTION
的代码。
答案 5 :(得分:0)
运行adb logcat|grep -i currentCallState
您将获得日志:
D/PhoneUtils( 1242): setAudioMode() currentCallState : DIALING
D/PhoneUtils( 1242): setAudioMode() currentCallState : DIALING
D/PhoneUtils( 1242): setAudioMode() currentCallState : DIALING
D/PhoneUtils( 1242): setAudioMode() currentCallState : DIALING
D/PhoneUtils( 1242): setAudioMode() currentCallState : ALERTING
D/PhoneUtils( 1242): setAudioMode() currentCallState : ACTIVE
D/PhoneUtils( 1242): setAudioMode() currentCallState : DISCONNECTING
D/PhoneUtils( 1242): setAudioMode() currentCallState : IDLE