2010-10-28 14 views
32

Me gustaría poder enviar un mensaje de texto real desde un intérprete de comandos usando solo la línea de comando y sin depender de ningún apk para hacerlo. Estoy interesado en enviar este mensaje entre teléfonos, no desde el emulador al teléfono. Por ejemplo, ejecutando el comando:¿Cómo envío un SMS desde un shell?

service call phone 2 s16 "1234567890" 

Puedo hacer una llamada de teléfono a teléfono usando la línea de comando. El comando 'service list' muestra un servicio de isms, del cual parece que no puedo proporcionar los argumentos correctos. Asumiría que uno de los argumentos debería ser una cadena de PDU, pero hasta ahora no ha tenido suerte.

Respuesta

2

Puede enviar cualquier intento que desee desde la línea de comandos, por lo que es simplemente una cuestión de averiguar qué intención se puede utilizar para enviar un sms, o si no existe, escribir un apk que proporcione dicha intención -to-sms capacidad y el envío de la intención de desencadenar eso desde la línea de comandos.

Si terminas escribiendo un apk para hacer eso, piensa un poco acerca de los permisos. ¿Con qué usuario se ejecutará la línea de comando como el usuario de adb shell? cualquier viejo usuario de la aplicación normal? Su apk presumiblemente tendrá permisos de sms, pero ¿desea ampliar eso a todo en el teléfono o implementar algún mecanismo de seguridad en su intento?

+1

Gracias Chris, creo que estoy en el camino correcto con esa línea de pensamiento. Hasta el momento, he logrado acercarme mucho con el comando "am start -a android.intent.action.SENDTO -d sms: 1234567890 --es sms_body ohai --ez exit_on_sent true" pero igual tengo que averiguar cómo activar la vista onClick/onEditorAction automáticamente. Examinando el código fuente de MMS, encontré la vista mSendButton que creo que necesito para activar un performClick(). Si obtengo un comando de trabajo o un par de comandos, lo actualizaré más. – reproba

+0

Puede ser que se requiera la interacción del usuario para seguir esa ruta; si no parece haber una etapa en la que se requiera el permiso de sms, la filosofía de diseño de la plataforma requeriría la aprobación del usuario en lugar del permiso. Así que es posible que desee tomar la otra mitad de la idea e implementar su propia aplicación de sms remitente impulsada por el intento, no interactiva, con permiso de sms. Y con suerte con algún tipo de mecanismo de seguridad por lo que solo funciona para su propósito previsto. –

11

Puede hacer telnet al emulador haciendo algo similar a "telnet localhost 5554", donde 5554 es el puerto donde está escuchando el emulador. Después de eso, puede enviar un mensaje de SMS haciendo lo siguiente:

sms send 1234 "Hello" 

El 1234 puede ser cualquier cadena de dígitos. Adjunte el mensaje entre comillas si incluye espacios.

edición: un SMS comando no existe en Android en dispositivos reales, es una característica de sólo emulador de falsificar un SMS recibir no enviar. Es solo una conveniencia para dispositivos emulados que no tienen acceso a ninguna red celular real.

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

38

De hecho, esto se puede hacer, pero requiere ADB para ser instalado (parte del SDK de Android)

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 

Dónde está CCXXXXXXXXXX código de país seguido por el número de teléfono. Es posible que esto no funcione correctamente en las instalaciones de Android que no sean estándar, necesitará encontrar los valores de keyevent correctos para aprobar.

+0

¿Sabes cómo puedo evitar las comillas dobles para el cuerpo del sms? –

+1

@EdgarVillegasAlvarado, fácilmente: '" Dijo \ "Ok \" "' – kolypto

+0

He mirado alrededor y esto parece funcionar ... gracias – thevoipman

8

¿Qué tal esto?

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

no tengo la reputación suficiente apunta hacia arriba upvote la respuesta dada por Dmitry, pero que ES la respuesta que funciona con una pequeña modificación: Al menos por un número de Estados Unidos, en vez de poner un plus- signo (+) funcionó para mí con un "1", por ejemplo 17079876543 ...

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

Oh chico oh chico oh chico ... ahora si puedo encontrar la manera de recibir SMS a través de la línea de comandos y que se combinan con emacs (en un bombardear emacs dicen - que comienza frotar sus manos juntas y romper una sonrisa inclinada ... y pensar en todas las otras palancas de línea de comando que podemos tirar!)

+0

Funcionando perfectamente bien. Pero, ¿cómo puedo agregar espacios? Los espacios no funcionarán con esto. Como ejemplo, si envío "SMS TEXT AQUÍ", solo envía la parte SMS –

Cuestiones relacionadas