我希望能够在我的 Android 手机连接到我的计算机时使用以下 ADB 命令发送短信
adb shell am start -a android.intent.action.SENDTO -d sms:CCXXXXXXXXXX --es sms_body "SMS BODY GOES HERE" --ez exit_on_sent true
adb shell input keyevent 22
adb shell input keyevent 66
我已经开始工作了,但是在电话上,这会向收件人弹出一条文本消息,其中填写了正文,然后单击发送按钮并返回到您所在的位置。有什么办法可以完全在后台执行此操作,这样它就不会干扰手机上发生的任何事情吗?
最佳答案
简短版:
Android 5 及更早版本(此处为 android 4):
adb shell service call isms 5 s16 "com.android.mms" s16 "+01234567890" s16 "+01SMSCNUMBER" s16 "Hello world !" i32 0 i32 0
Android 5 及更高版本(此处为 android 9):
adb shell service call isms 7 i32 0 s16 "com.android.mms.service" s16 "+1234567890" s16 "null" s16 "Hey\ you\ !" s16 "null" s16 "null"
Isms 方法编号(上面的 5 和 7)可能会随着 android 版本的不同而改变。阅读完整的解释以理解它。
所有安卓版本的完整解释:
是的,它存在!但不能使用此命令,因为这些输入事件在 sleep 模式下被阻止。 此解决方案取决于您的 android 版本,因此我将为您解释几乎所有版本 ...
首先,通过运行检查您是否有服务 isms:
adb shell service check isms
Service isms: found
答案找到了,不错,继续前进。服务主义有各种“选项”,语法是:
service call name_service option args
可以通过键入找到服务名称:
adb shell service list
它将显示很多可用的服务,但有趣的是:
5 isms: [com.android.internal.telephony.ISms]
你可以看到 com.android.internal.telephony.Isms,所以在这个 link 上选择你的 android 版本(通过更改分支),然后导航到:telephony/java/com/android/internal/telephony
并打开 Isms.aidl
剩下的我将使用 android Pie (android 9) 文件 ( link )。
在 185 线上我们有:
void sendTextForSubscriberWithSelfPermissions(...)
注意:在 android 5 之前,该方法被命名为 sendText(...)
。
这是接口(interface) ISMS 中的第 7 个声明。所以我们发送短信的选项是数字 7。在声明的顶部有参数的解释。这是一个简短的版本:
- subId:在 android 5 之后,您要使用的 SIM 卡 0、1 或 2,具体取决于您的 android 版本(例如 0-1 用于 android 9,1-2 用于 android 8)
- callingPkg :将发送您的短信的包的名称(稍后我会解释如何找到它)
- destinationAdress : 消息接收者的电话号码
- scAddress :你的 smsc 只需要在 android 5 和更低版本(后面解释)
- 部分:您的信息!
- sendIntends 和 deliveryIntents:你不关心
-> 找到你的包名: 浏览您的应用文件或在 google play 下载 Package Name Viewer,找到您的消息应用程序并复制名称 (com.android...)
-> 找到你的 smsc : 在您的应用程序 -> 设置 -> SMSC 或服务中心或消息中心等中,复制号码显示(不要更改)
就在完成之前,在服务中,字符串由 s16 声明,整数和 PendingIntent 由 i32 声明。
所以对于我的例子,我们有:
- 子编号:0
- 调用包:com.android.mms
- 目标号码:+01234567890
- 短信中心:+01000000000
- 我的文本:世界您好!
- 我们不关心 sendIntends 和 deliveryIntents,所以我们将 0 设置为默认值。
最后:
Android 5 及更早版本(此处为 android 4):
adb shell service call isms 5 s16 "com.android.mms" s16 "+01234567890" s16 "+01000000000" s16 "Hello world !" i32 0 i32 0
Android 5 及更高版本(此处为 android 9):
adb shell service call isms 7 i32 0 s16 "com.android.mms.service" s16 "+1234567890" s16 "null" s16 "'Hey you !'" s16 "null" s16 "null"
->批处理文件中的示例:
android 4 的 send.bat:
echo off
set num=%1
shift
for /f "tokens=1,* delims= " %%a in ("%*") do set ALL_BUT_FIRST=%%b
echo %ALL_BUT_FIRST%
adb shell service call isms 5 s16 "com.android.mms" s16 "%num%" s16 "+01000000000" s16 "%ALL_BUT_FIRST%" i32 0 i32 0
运行:
send.bat +01234567890 Hey you !
现在告诉我它是否适用于你的 android 版本:)
关于android - 通过 ADB 在 Android 上发送短信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17580199/