2

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

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

手机型号和我用来拨打号码的安卓服务/应用程序和安卓版本都无关紧要。手机将/已植根。我会使用任何有效的方法。

4

8 回答 8

7

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

  • 0 表示空闲,
  • 1 = 振铃和
  • 2 = 主动呼叫
于 2014-09-11T17:18:38.743 回答
1

TelephonyManager.getCallState()从使用中调用adb shell

adb shell service call phone 30

为了正确解析service call设备端的命令输出并且没有外部依赖项,请参见我的答案here

另请阅读从 ADB shell 调用 Android 服务以获取更多详细信息。

于 2013-10-30T15:48:46.973 回答
1

确定通话是否仍在进行中非常简单。您可以:

确定被叫号码当前是否忙是一个完全不同的范围,因为您现在必须处理特定于网络的实现(cdma 与 gsm 大不相同)。在CDMA上几乎不可能弄清楚。

于 2013-10-30T00:49:49.903 回答
0

找到这些数字的方法是首先确定您的 AOS 版本,然后转到GrepCode并转到您的版本。然后点击以下链接:/com.android.internal.telephony.ITelephony (*.java) 并搜索CALL_TRANSACTION.

于 2014-07-20T23:11:28.567 回答
0

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

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

更新 2:显然这是 Android 中的一项安全措施,在通话期间您无法获取当前通话状态,您只能知道用户正在拨打电话,但如果已经存在活动连接或仍在拨号,则不会。

于 2013-10-30T00:52:21.900 回答
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

DIALING - 仍在拨号 ALERTING - 响铃 DISCONNECTING - 单击 Disconnect IDLE - 返回正常状态

于 2017-03-07T02:17:48.897 回答
0

尝试 adb shell dumpsys telecom | grep mForegroundCall

我发现它在我的 YQ601 上很有用

于 2021-08-23T05:19:27.827 回答
0
adb shell dumpsys notification --noredact|grep "things like the following patterns"

(Incoming voice call)
(Ongoing voice call)
( Incoming video call)
(Ongoing video call)

这里是我用来获取通知的函数,作为一对标题,文本:

function anotifs(){
    notifsregex1='^          android.title='
    notifsregex2='^          android.text='
    adb shell dumpsys notification --noredact | grep -e "${notifsregex1}" -e "${notifsregex2}"|sed -e "s:${notifsregex1}::g" -e "s:${notifsregex2}::g"
}

你可以这样使用:

function acallstate(){
    case "$(anotifs)" in
        *'(Incoming voice call)'*)
            echo 1
        ;;
        *'(Ongoing voice call)'*)
            echo 2
        ;;
        *'( Incoming video call)'*)
            echo 3
        ;;
        *'(Ongoing video call)'*)
            echo 4
        ;;
        *)
            echo 0 # none
        ;;
    esac
}
于 2021-10-22T22:12:41.263 回答