Skip to content

Instantly share code, notes, and snippets.

@godie007
Created November 23, 2024 00:38
Show Gist options
  • Save godie007/9a6e37bc5d91a030c479f8dfbd2d8426 to your computer and use it in GitHub Desktop.
Save godie007/9a6e37bc5d91a030c479f8dfbd2d8426 to your computer and use it in GitHub Desktop.
Aplicativo para enviar sms por medio de USB a un disitivo Android
import subprocess
import time
import re
class AndroidSMSSender:
def __init__(self):
self.get_screen_size()
def get_screen_size(self):
"""Obtiene el tamaño de la pantalla del dispositivo"""
try:
result = subprocess.run(
['adb', 'shell', 'wm', 'size'],
capture_output=True, text=True, check=True
)
dimensions = re.search(r'(\d+)x(\d+)', result.stdout)
if dimensions:
self.width = int(dimensions.group(1))
self.height = int(dimensions.group(2))
print(f"Resolución detectada: {self.width}x{self.height}")
else:
raise Exception("No se pudo determinar el tamaño de la pantalla")
except Exception as e:
print(f"Error al obtener tamaño de pantalla: {e}")
self.width = 1080
self.height = 2340
def send_sms(self, number, message):
"""
Envía un SMS usando coordenadas comprobadas para Google Messages
"""
try:
# Limpia el número
number = re.sub(r'[^+0-9]', '', number)
print(f"\nPreparando envío de SMS a {number}...")
# Asegura que el teléfono está activo
subprocess.run(['adb', 'shell', 'input', 'keyevent', 'KEYCODE_WAKEUP'], check=True)
time.sleep(1)
# Abre la app de mensajes con el número y texto
print("Abriendo aplicación de mensajes...")
subprocess.run([
'adb', 'shell',
f'am start -a android.intent.action.SENDTO -d sms:{number} --es sms_body "{message}"'
], check=True)
# Espera a que la app se abra y el teclado aparezca
time.sleep(2)
# Calcula las coordenadas del botón de enviar (90% del ancho y alto)
x = int(self.width * 0.9)
y = int(self.height * 0.9)
print(f"Enviando mensaje usando coordenadas optimizadas ({x}, {y})...")
# Realiza el toque en las coordenadas que sabemos que funcionan
subprocess.run(['adb', 'shell', f'input tap {x} {y}'], check=True)
print("Mensaje enviado exitosamente")
return True
except subprocess.CalledProcessError as e:
print(f"Error al enviar SMS: {str(e)}")
if e.stdout:
print(f"Salida: {e.stdout}")
if e.stderr:
print(f"Error: {e.stderr}")
return False
except Exception as e:
print(f"Error inesperado: {str(e)}")
return False
def enviar_multiples_mensajes(sender, numero, mensajes):
"""
Envía múltiples mensajes a un número
"""
for i, mensaje in enumerate(mensajes, 1):
print(f"\nEnviando mensaje {i} de {len(mensajes)}")
if not sender.send_sms(numero, mensaje):
print(f"Error al enviar mensaje {i}")
return False
time.sleep(2) # Espera entre mensajes
return True
def main():
try:
sender = AndroidSMSSender()
# Puedes enviar un solo mensaje:
numero = "+5731576161**"
mensaje = "Hola esta es una prueba"
# O múltiples mensajes:
mensajes = [
"Mensaje de prueba 1",
"Mensaje de prueba 2",
# Añade más mensajes si necesitas
]
# Descomentar la siguiente línea para enviar múltiples mensajes:
# enviar_multiples_mensajes(sender, numero, mensajes)
# O enviar un solo mensaje:
if sender.send_sms(numero, mensaje):
print("\n¡Proceso completado exitosamente!")
except Exception as e:
print(f"\nError general: {str(e)}")
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment