首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在从Android 6到Android 12的所有版本上使用亚行shell命令发送SMS?

如何在从Android 6到Android 12的所有版本上使用亚行shell命令发送SMS?
EN

Stack Overflow用户
提问于 2022-03-09 23:26:14
回答 4查看 1.6K关注 0票数 2

我试图使用亚行shell命令发送消息。我发送了Android 10,但没有在Android 11上发送,我尝试了一切,但都没有成功。我为Android11 这里找到了isms服务的源代码。我还有2部Android 11手机,当我测试它们时,结果是一样的。为了测试我的shell命令是否在设备上工作,我尝试了输入命令,它做到了。我读过,但还是没有用。

我使用的命令:

代码语言:javascript
复制
adb shell service call isms 7 i32 0 s16 "com.android.mms.service" s16 "%number%" s16 "null" s16 "%message%" s16 "null" s16 "null"

此命令的输出:

代码语言:javascript
复制
Result: Parcel(00000000 '....')

有人能帮忙吗?我如何在Android 11上用亚行shell命令发送消息?

(我在Android 12上试过,结果是一样的)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-03-28 15:19:00

Android 10之后:

代码语言:javascript
复制
adb shell service call isms 5 i32 1 s16 "com.android.mms" s16 "null" s16 "number" s16 "null" s16 "message" s16 "null" s16 "null" i32 0 i64 0

在Android 10之前:

代码语言:javascript
复制
adb shell service call isms 7 i32 1 s16 "com.android.mms" s16 "number" s16 "null" s16 "message" s16 "null" s16 "null"
票数 2
EN

Stack Overflow用户

发布于 2022-03-31 01:08:42

为了将来的证明方法--因为数字(5,7)变化了,你最好直接使用isms。以isms为例,我们看到:

代码语言:javascript
复制
redfin:/ $ service list | grep isms                                                                                         
104 isms: [com.android.internal.telephony.ISms]

所以,看看(frameworks/base/telephony/java/com/android/internal/telephony/ISms.aidl) isms.aidl,你会发现'5‘现在是

代码语言:javascript
复制
   void sendTextForSubscriber(in int subId, String callingPkg, String callingAttributionTag,
            in String destAddr, in String scAddr, in String text, in PendingIntent sentIntent,
            in PendingIntent deliveryIntent, in boolean persistMessageForNonDefaultSmsApp,
            in long messageId);

因此,建议的答案是:

代码语言:javascript
复制
call isms 5 i32 1 s16 "com.android.mms" s16 "null" s16 "number" s16 "null" s16 "message" s16 "null" s16 "null" i32 0 i64 0

基本上是伪造论点(但不完全正确):

代码语言:javascript
复制
in int subId = 1
String callingPkg = "com.android.mms"
String callingAttributionTag = "null"
in String destAddr = "number"
in String scAddr = "16"
in String text = "text"
in PendingIntent sentIntent ="null" (should be i32 0)
in PendingIntent deliveryIntent = "null" (should be i32 0 also)
in boolean persistMessageForNonDefaultSmsApp = 0 = false, 
in long messageId = 0 (the i64) 

如果可以,请参考AIDL。这样做更安全,而且还确保您序列化了正确的参数。不幸的是,这些变化经常发生在不同版本之间。

(资料来源:“安卓内部设备”,第二卷(http://NewAndroidBook.com))

票数 2
EN

Stack Overflow用户

发布于 2022-12-03 12:52:00

如果您只想向您的模拟器发送一些测试消息,并且不想处理亚行,您可以通过模拟器本身来实现这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71417145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档