精简版 :
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 版本的变化而变化。阅读完整的解释以理解它。
所有安卓版本的完整解释:
是的,它存在!但不使用此命令,因为这些输入事件在睡眠模式下被阻止。此解决方案取决于您的 android 版本,因此我将为您解释几乎所有版本...
1st,通过运行检查您是否有服务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,因此在此链接上选择您的 android 版本(通过更改分支),然后导航到:telephony/java/com/android/internal/telephony
并打开Isms.aidl
剩下的我将使用 android Pie (android 9) 文件(链接)。
在第185行,我们有:
无效 sendTextForSubscriberWithSelfPermissions(...)
注意:在 android 5 之前,该方法被命名sendText(...)
。
它是接口 ISMS 中的第 7 个声明。所以我们发送短信的选项是数字 7。在声明的顶部有参数的解释。这是一个简短的版本:
- subId :在 android 5 之后,您要使用的 SIM 卡 0、1 或 2 取决于您的 android 版本(例如 android 9 的 0-1 和 android 8 的 1-2)
- callPkg : 将发送您的短信的包的名称(我稍后会解释如何找到它)
- destinationAdress : 消息接收者的电话号码
- scAddress :您的 smsc 仅在 android 5 及更低版本中需要(稍后解释)
- 零件:您的留言!
- sendIntends 和 deliveryIntents :你不在乎
-> 查找您的包名称:
浏览您的应用文件或在 google play 上下载包名称查看器,找到您的消息应用程序并复制名称(com.android...)
-> 找到您的短信:
在您的应用程序 -> 设置 -> 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 版本:)
编辑:用Alex P提供的信息更正。
编辑 2:用Neil提供的信息更正