如何从shell发送短信?

时间:2010-10-28 13:45:18

标签: android

我希望能够仅使用命令行从shell发送实际的SMS消息,而不是依赖任何apk来执行此操作。我有兴趣在手机之间发送此消息,而不是从模拟器发送到手机。例如,通过运行命令:

service call phone 2 s16 "1234567890"

我可以使用命令行从手机拨打电话。 'service list'命令显示了一个isms服务,我似乎无法提供正确的参数。我会假设其中一个args应该是一个PDU字符串,但到目前为止还没有运气。

5 个答案:

答案 0 :(得分:42)

事实上,这可以完成,但需要安装adb(Android SDK的一部分)

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

其中CCXXXXXXXXXX是国家/地区代码,后跟电话号码。这可能无法在非标准Android安装上正常工作,您需要找到要传递的正确keyevent值。

答案 1 :(得分:11)

您可以telnet到模拟器,执行类似于“telnet localhost 5554”的操作,其中5554是模拟器正在侦听的端口。之后,您可以通过执行以下操作发送短信:

sms send 1234 "Hello"

1234可以是任何数字字符串。如果包含空格,请将消息括在引号中。

编辑: 在真实设备上的Android中不存在短信命令,它是一种仅限模拟器功能,用于伪造短信接收不发送。 这对于无法访问任何实际蜂窝网络的仿真设备来说非常方便。

比照http://developer.android.com/guide/developing/devices/emulator.html#sms

答案 2 :(得分:10)

这个怎么样?

service call isms 5 s16 "+??????????" i32 0 i32 0 s16 "SMS TEXT HERE"

答案 3 :(得分:7)

我没有足够的声望提升Dmitry给出的答案,但 IS 的答案适用于一个小修改:至少对于一个美国号码,而不是加一个加号-sign(+)它对我有效,例如“1” 17079876543 ......

service call isms 5 s16 "17079876543" i32 0 i32 0 s16 "SMS TEXT HERE"

哦男孩哦男孩哦男孩...现在如果我能弄明白如何通过命令行接收短信并将其与emacs结合起来(在emacs shell中说 - 他开始搓手并打破斜咧嘴笑...并考虑我们可以拉的所有其他命令行杠杆!)

答案 4 :(得分:2)

你可以从命令行发送你想要的任何意图,所以这只是找出可以用来发送短信的意图,或者如果一个不存在,然后写一个提供这种意图的apk- to-sms功能并发送意图从命令行触发它。

如果您最终编写了一个apk来做这件事,请考虑一下权限。命令行将以哪个用户身份运行 - adb shell用户?任何旧的普通应用用户?您的apk可能会拥有短信权限,但是您想将其扩展到手机上的所有内容,或者在您的意图中实施某种安全机制吗?

相关问题