【问题标题】:adb shell input text Android 11 inCalladb shell 输入文本 Android 11 inCall
【发布时间】:2022-01-06 15:27:04
【问题描述】:

在通话中发送 DTMF 事件时遇到问题。

我正在使用adb shell input text #0123* 发送 DTMF 音。到目前为止,这对于较旧的 Android 版本运行良好。从 Android 11 开始(我还没有检查 12),特殊字符 * 和 # 不再起作用,而是发送 8 和 3。

如果我在其他文本字段中发送文本,则特殊字符的格式正确,只有在通话中并尝试通过拨号盘发送 DTMF 音时,错误才会在呼叫应用程序内部发生。

编辑:
我尝试使用 ' 转义发送:

User:~$ adb -s RF8N31NZ5SK shell
x1s:/ $ input text '#*'
x1s:/ $

但结果是一样的:

Edit-2:
看起来拨号器在 Android >= 11 上不再允许使用特殊字符。我设法通过 keyevents KEYCODE_POUND 和 KEYCODE_STAR 做到了:

User:~$ adb -s RF8N31NZ5SK shell
x1s:/ $ input keyevent KEYCODE_POUND
x1s:/ $ input keyevent KEYCODE_STAR
x1s:/ $

【问题讨论】:

  • 点击按钮的坐标是否适合您?
  • 不,不幸的是我想处理不同的屏幕和Android版本,所以坐标会改变。我设法使用 KEYCODE_POUND 和 KEYCODE_STAR 以这种方式发送。

标签: android android-11 dtmf adb


【解决方案1】:

您可以尝试在要发送的文本周围添加撇号,因为 # 字符用于 Android shell 上的 cmets:

adb shell input text '#1234*'

它适用于我的 Android 11

【讨论】:

  • 不幸的是,这不起作用,我发送了“输入文本'#*'”,但它正在发送 38
【解决方案2】:

您可以转义哈希字符并将整个输入文本放在双引号中:

adb shell input text "\#1234*"

注意:在我的测试中,我必须使用双引号,单引号不起作用,单引号输入的文本是\#1234*。但这可能取决于用于执行整个命令的终端/平台(在我的情况下是 Windows 10 命令行/cmd.exe)。

此命令适用于我和

【讨论】:

  • 这仍然不起作用。您是否在打开拨号盘的活动呼叫期间准确地测试了这一点?如果我在另一个字段中尝试,比如消息,它也会输入 # 和 *。仅在发送 DTMF 时的活动呼叫中,它被替换为 3 和 8 ...
  • @Helmutchecker 我测试了该命令是否有效并且文本是否在 Android 应用程序中正确输入。如果它不适合您在不同的应用程序中测试它。如果它在那里工作,那么拨号器根本不接受# 作为输入文本。您还应该考虑添加延迟,以增加您所连接的音频服务器正确识别 DTMF 音调的机会。
  • 正如我所说,在另一个应用程序中输入,如消息,工作正常,没有问题。我想你是对的,这是拨号器的问题(必须是 Android 11 中的更改,因为它在旧版本中运行良好)。你知道如何解决这个问题,或者我能做些什么?
  • 拨号器 UI 应该是拨号器应用程序的一部分,可以在 Android 中替换。可能是一个不同的拨号器应用程序适用于您的情况,甚至可以为您想要使用 DTMF 音调提供更合适的界面。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-12
相关资源
最近更新 更多