2012-06-06 14 views
5

Quiero desarrollar una aplicación que rastree los SMS enviados/recibidos. Quiero decir, cuando un usuario envía un mensaje desde su dispositivo, el detalle del mensaje debe guardarse en una tabla provista por mí. Del mismo modo, cuando el dispositivo recibe cualquier mensaje de texto, eso también debe guardarse en una tabla provista por mí.¿Cómo rastrear los mensajes en Android?

Tenga en cuenta que el usuario utiliza la aplicación de mensaje predeterminada de Android para enviar un mensaje. Quiero decir que no estoy integrando mi aplicación con la aplicación de mensaje predeterminada. Solo necesito hacer un seguimiento de todos los mensajes enviados desde esa aplicación, ya que Android realiza un seguimiento de todos los mensajes enviados en carpeta Mensaje enviado de su aplicación de mensaje.

¿Cómo podría hacer esto? Por favor, ayúdame. No necesito respuestas, pero necesito alguna pista para hacerlo.

No sugiero leer los mensajes de la Bandeja de entrada y la Bandeja de salida, etc. Porque quiero guardar los mensajes cuando el usuario los envía/recibe. No después de enviar o recibirlo.

+2

¿Qué has probado y cuál es el problema que estás enfrentando? Solo mantenlo simple. –

+0

@AndroSelva No tengo ni idea de cómo hacerlo. No quiero responder, pero quiero alguna pista. –

+0

@Mido No quiero leer los mensajes de la Bandeja de entrada y mostrarlos. Quiero guardar el mensaje cuando el usuario lo envía. –

Respuesta

9

Esto es fácil de hacer con un receptor de escritura emitidos en su Manifiesto:

edición: sólo parece funcionar para SMS_RECEIVED ver este thread

<receiver android:name=".SMSReceiver" android:enabled="true"> 
<intent-filter android:priority="1000"> 
     <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 
     <action android:name="android.provider.Telephony.SMS_SENT"/> 
</intent-filter> 
</receiver> 

y el permiso:

<uses-permission android:name="android.permission.RECEIVE_SMS" /> 

A continuación, cree el receptor llike:

public class SMSReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){ 
    //do something with the received sms   
     }else if(intent.getAction().equals("android.provider.Telephony.SMS_SENT")){ 
      //do something with the sended sms 
    } 
    } 
} 

para manejar un SMS entrante podría ser:

Bundle extras = intent.getExtras(); 
Object[] pdus = (Object[]) extras.get("pdus"); 
for (Object pdu : pdus) { 
     SmsMessage msg = SmsMessage.createFromPdu((byte[]) pdu); 
     String origin = msg.getOriginatingAddress(); 
     String body = msg.getMessageBody(); 
.... 
} 

Si desea evitar que un sms para ser empujado en la Bandeja de entrada commen, se puede lograr esto con:

abortBroadcast(); 
+0

sólo quiero Confirmar que, cuando un usuario intente enviar un mensaje desde la aplicación de mensajes predeterminada, ¿Android llamará a mi clase de receptor? –

+0

lo siento, construí una aplicación para estar seguro y solo recibo la acción SMS_RECEIVED, no sé por qué ... la probaré – 2red13

+0

http: // stackoverflow.com/questions/990558/android-broadcast-receptor-for-send-sms-messages – 2red13

1

Por favor, No llame al abortBroadcast() para evitar que otras aplicaciones reciban la emisión ordenada SMS_RECEIVED. Esto es un mal comportamiento, esto no es de lo que trata Android. No entiendo por qué Google incluso permite que el desarrollador aborte transmisiones de intenciones del sistema como SMS.

+2

Esta cosa abortBroadcast nos permite crear softwares para bloquear llamadas entrantes o sms. Creo que esto es algo bueno que puede usarse como algo malo, como muchas otras cosas. La gente puede usar un bolígrafo para matar, dejémoslo de construir bolígrafos. –

+0

Estoy de acuerdo. Es muy útil para muchas funciones buenas. No deberías abortar todos los SMS entrantes, pero mi receptor puede decidir: Este SMS es para mí, así que cancela la transmisión, de lo contrario deja que pase. – 2red13

Cuestiones relacionadas