2013-04-09 3 views
8

C'è un modo per intercettare un messaggio SMS in arrivo e quindi modificarlo prima di presentarlo all'utente?Intercettare messaggi SMS in entrata e modificarlo

  • Si può fare in modo nativo su iPhone/Andriod?
  • È possibile utilizzare PhoneGap?
  • È possibile utilizzare MonoTouch/Mono per Andriod?

In caso affermativo, è possibile fornire alcuni suggerimenti in merito?

My-soluzione preferita priorità-ordine è il seguente:

  1. PhoneGap
  2. Mono
  3. Native

Grazie a tutti in anticipo !!

EDIT:

Per le persone chiedono che cosa è lo scopo di questa, in fondo vorrei mettere una parola come "etichetta" nel sms a seconda del contenuto, così quando ho visualizzare gli SMS, posso vedere qualcosa come "IMPORTANTE: blah blah blah", invece di solo "blah blah blah".

+1

Ci isn' Un modo per farlo in Android, grazie al cielo. Tuttavia, è possibile intercettare la trasmissione SMS e sopprimere la notifica, se necessario. – 323go

+1

Sì, c'è modo di farlo utilizzando il codice nativo di androdi. Ande qui è il collegamento che ti aiuterà a iniziare: http://stackoverflow.com/questions/11435354/receiving-sms-on-android-app –

+0

Forse Husam ha una soluzione per te.Non sei chiaro di cosa vuoi fare. Vuoi modificare -> salvare -> mostrarlo? Quindi l'unico sms sarà quello modificato. O vuoi mostrare il messaggio sms modificato come un brindisi, senza modificare quello reale nell'sms-inbox? –

risposta

1

Sicuro! Il modo più semplice su iOS è solo quello di creare un trigger sul database SMS - /var/mobile/Library/SMS/sms.db

CREATE TRIGGER AFTER INSERT ON message 

quindi aggiornare il record!

Il modo più avanzato di farlo, è aggancio metodi privati, ma non voglio andare in profondità che in questo momento, non vi resta che esplorare i metodi :)

BTW, in ogni modo è necessario un dispositivo jailbroken

5

provare questo- // registrare questa classe come ricevitore nel file manifesto per SMS_RECEIVED intento

public class SmsReceiver extends BroadcastReceiver { 

    private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals(SMS_RECEIVED)) { 
       abortBroadcast();**this is prevent message to deliver to user** 

      Bundle bundle = intent.getExtras(); 
      if (bundle != null) { 
       // get sms objects 
       Object[] pdus = (Object[]) bundle.get("pdus"); 
       if (pdus.length == 0) { 
        return; 
       } 
       // large message might be broken into many 
       SmsMessage[] messages = new SmsMessage[pdus.length]; 
       StringBuilder sb = new StringBuilder(); 
       for (int i = 0; i < pdus.length; i++) { 
        messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
        sb.append(messages[i].getMessageBody()); 
       } 
       String sender = messages[0].getOriginatingAddress(); 
       String message = sb.toString(); 
       Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); 

       SmsManager sms = SmsManager.getDefault(); 
       sms.sendTextMessage(phoneNumber, null, message, null, null);//phone number will be your number. 
      } 
     } 
    } 
} 
+0

Mi interessa anche cambiare il messaggio in arrivo. Grazie a tutti per i codici. @Sharad Mhaske: puoi inserire per favore il codice per: inviare un messaggio a se stesso con contenuto modificato usando ** ** Classe SMSManager ** – Milan

+1

@milan: controlla il codice aggiornato.è necessario aggiungere addizionalmente per l'invio del messaggio nel file manifest –

2

Sì, c'è un modo, ma purtroppo dal momento che il lancio di Ki Non è più così facile. Per lavorare sulle versioni> Jelly Bean è necessario che l'applicazione venga eseguita come applicazione SMS predefinita, ovvero che modifica e abortBroadcast(). Per 4.3 e di seguito, creare un ricevitore broadcast e fare qualcosa di simile al seguente:

public void onReceive(Context context, Intent intent) { 
    // Get the SMS map from Intent 
    Bundle extras = intent.getExtras(); 

    String messages = ""; 

    if (extras != null) { 
     // Get received SMS array 
     Object[] smsExtra = (Object[]) extras.get(SMS_EXTRA_NAME); 

     // Get ContentResolver object for pushing encrypted SMS to the incoming folder 
     ContentResolver contentResolver = context.getContentResolver(); 

     for (int i = 0; i < smsExtra.length; ++i) { 
      SmsMessage sms = SmsMessage.createFromPdu((byte[])smsExtra[i]); 

      String body = sms.getMessageBody().toString(); 
      String address = sms.getOriginatingAddress(); 

      // Here is where you modify the body of the message! 
      messages += "SMS from " + address + " :\n";     
      messages += body + "\n"; 

      putSmsToDatabase(contentResolver, sms); 
     } 
    } 
} 

private void putSmsToDatabase(ContentResolver contentResolver, SmsMessage sms) { 

    // Create SMS row 
    ContentValues values = new ContentValues(); 
    values.put(ADDRESS, sms.getOriginatingAddress()); 
    values.put(DATE, sms.getTimestampMillis()); 
    values.put(READ, MESSAGE_IS_NOT_READ); 
    values.put(STATUS, sms.getStatus()); 
    values.put(TYPE, MESSAGE_TYPE_INBOX); 
    values.put(SEEN, MESSAGE_IS_NOT_SEEN); 

    try { 
     values.put(BODY, sms.getMessageBody()); // May need sms.getMessageBody.toString() 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 

    // Push row into the SMS table 
    contentResolver.insert(Uri.parse(SMS_URI), values); 
} 

Questa informazione è stata ottenuta da here

Quasi dimenticavo ... le costanti ..

public static final String SMS_EXTRA_NAME = "pdus"; 
public static final String SMS_URI = "content://sms"; 

public static final String ADDRESS = "address"; 
public static final String PERSON = "person"; 
public static final String DATE = "date"; 
public static final String READ = "read"; 
public static final String STATUS = "status"; 
public static final String TYPE = "type"; 
public static final String BODY = "body"; 
public static final String SEEN = "seen"; 

public static final int MESSAGE_TYPE_INBOX = 1; 
public static final int MESSAGE_TYPE_SENT = 2; 

public static final int MESSAGE_IS_NOT_READ = 0; 
public static final int MESSAGE_IS_READ = 1; 

public static final int MESSAGE_IS_NOT_SEEN = 0; 
public static final int MESSAGE_IS_SEEN = 1; 
+0

Questa è una risposta fantastica. Spero che venga upvoted fino a quando tutti gli utenti di sms app su kitkat + lo leggeranno – Kay