2013-10-30 67 views
2

我想在开始电话后检查通话状态是通过连接的PC进行的,如果可能的话使用ADB。 我通过输入带有adb命令service call phone 2 s16 "some phone number"的电话号码开始来电,然后发送input keyevent 5按下通话按钮。远程检查电话的状态

现在我正在努力寻找一种方法来确定通话的状态。我需要知道被叫号码目前是否忙碌,如果通话被取消或通话是否成功/我与被叫号码有开放的语音连接。 有什么方法可以监测吗?

手机型号真的没有关系,也没有我使用的android服务/应用程序调用数字,也没有android版本。电话将被植根。我会使用任何作品。

回答

1

找出呼叫是否仍在进行中非常简单。您可以:

搞清楚注册如果所调用的号码目前处于忙碌状态,则是完全不同的范围,因为您现在必须处理网络特定的实施(cdma与gsm大不相同)。在CDMA上,几乎不可能弄清楚。

+2

感谢这个答案,那是相当有用的。尽管我发现使用adb shell命令'dumpsys telephony.registry'更简单一些,它提供了非常详细的信息 – PTS

0

我刚刚找到自己的答案。使用“dumpsys telephony.registry”为我提供我需要的所有信息。它包含变量“mCallState”,正是我所需要的。

更新:好的不是100%我需要的,由于某种原因,建立连接时callstate不会改变。如果有人有更多想法我很想知道。

更新2:显然这是Android中的一项安全测量,在通话过程中无法获取当前通话状态,您只会知道用户正在通话,但如果已经存在活动连接,仍然拨号。

+0

您是否知道该设置在哪里?以某种方式获得该状态将非常有用... – not2qubit

+0

这是一个可以通过ADB执行的shell命令。 – PTS

1

要调用TelephonyManager.getCallState()adb shell使用:

service call phone 30 
+0

你怎么知道为相应的api函数提供什么int? 虽然提供'30'总是给我'00000000 00000001',不管电话是空闲还是拨号。 – PTS

+0

你的手机有哪些Android版本? jb-mr2的'getCallState' = 30。对于mr2之前的ics和jb,它是29. –

+0

运行JB 4.2,得到与两个代码相同的结果:/ – PTS

0

的方式找到这些数字时,首先确定你的AOS版本,然后去GrepCode,去你的版本。然后按照链接:/com.android.internal.telephony.ITelephony(* .java)并搜索代码CALL_TRANSACTION

+0

问题是我需要通过ADB /脚本接口来完成此操作。编写应用程序是没有问题的。 – PTS

6

adb shell dumpsys telephony.registry | grep mCallState,将返回:

  • 0表示空闲,
  • 1 =振铃和
  • 2 =主动呼叫
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

拨号 - 正在拨号 ALERTING - 振铃 断开连接 - 被点击断开 IDLE - 返回到正常状态

+0

不工作,我在终端运行命令 –