如何从shell发送短信?

rep*_*oba 38 android

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

service call phone 2 s16 "1234567890"
Run Code Online (Sandbox Code Playgroud)

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

小智 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
Run Code Online (Sandbox Code Playgroud)

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

  • 这不适合我 - 它填充身体,但它不发送......任何想法>? (3认同)
  • 我们怎样才能继续进行以及自动进行关键事件? (2认同)

小智 11

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

sms send 1234 "Hello"
Run Code Online (Sandbox Code Playgroud)

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

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

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


Dmi*_*try 10

这个怎么样?

service call isms 5 s16 "+??????????" i32 0 i32 0 s16 "SMS TEXT HERE"
Run Code Online (Sandbox Code Playgroud)

  • 出现混淆的“尝试获取空数组长度”错误。 (2认同)

Myl*_*one 7

我没有足够的声誉给予好评由梅德给出的答案指向上方,但IS与一个小的修改工作答案:至少在美国的数量,而不是把一个加号(+),它为我工作用一个"1",例如17079876543 ......

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

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


Chr*_*ton 2

您可以从命令行发送任何您想要的意图,因此只需弄清楚可以使用什么意图发送短信,或者如果不存在,则编写一个提供此类意图发送短信的 apk功能并发送意图以从命令行触发该功能。

如果您最终编写了一个 apk 来执行此操作,请考虑一下权限。命令行将以哪个用户身份运行 - adb shell 用户?有老的普通应用程序用户吗?您的 apk 可能具有短信权限,但您是否想将其扩展到手机上的所有内容,或者按照您的意图实现某些安全机制?