Created
November 23, 2024 00:38
-
-
Save godie007/9a6e37bc5d91a030c479f8dfbd2d8426 to your computer and use it in GitHub Desktop.
Aplicativo para enviar sms por medio de USB a un disitivo Android
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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