2013-04-09 13 views
8

Czy istnieje sposób na przechwycenie przychodzącej wiadomości SMS, a następnie zmodyfikowanie jej przed przedstawieniem jej użytkownikowi?Przechwyć przychodzącą wiadomość SMS i zmodyfikuj ją

  • Czy można to zrobić natywnie na iPhonie/Andriod?
  • Czy można to zrobić za pomocą PhoneGap?
  • Czy można to zrobić za pomocą MonoTouch/Mono dla Andriod?

Jeśli tak, możesz podać kilka wskazówek na ten temat?

Moje preferowane roztwór priorytet zamówienie jest następujący:

  1. PhoneGap
  2. Mono
  3. Native

Dziękuję wszystkim z góry !!

EDIT:

Dla osób, zastanawiając się, co jest celem tego, w zasadzie chciałbym umieścić słowo jako „label” w sms w zależności od zawartości, więc kiedy zobaczyć sms, mogę zobacz coś w stylu "WAŻNE: bla bla bla", zamiast po prostu "bla bla bla".

+1

Nie nieprawdaż” t sposób na to w Androidzie, dzięki Bogu. Możesz jednak przechwycić transmisję SMS i wyłączyć powiadomienie, jeśli musisz. – 323go

+1

Tak, można to zrobić za pomocą kodu źródłowego androdi. Tutaj jest link, który pomoże Ci zacząć: http://stackoverflow.com/questions/11435354/receiving-sms-on-android-app –

+0

Może Husam ma dla ciebie rozwiązanie.Nie wiesz, co chcesz zrobić. Czy chcesz edytować -> zapisać -> pokazać? Więc jedyny SMS będzie twoim edytowanym. A może chcesz pokazać edytowaną wiadomość SMS jako toast, bez edytowania prawdziwej wiadomości w skrzynce sms-inbox? –

Odpowiedz

1

Oczywiście! Najprostszym sposobem na iOS jest tylko, aby utworzyć wyzwalacz w bazie danych SMS - /var/mobile/Library/SMS/sms.db

CREATE TRIGGER AFTER INSERT ON message 

następnie zaktualizować rekord!

Im bardziej zaawansowany sposób to zrobić, jest spinanie metody prywatne, ale nie będę się tak głęboko w tej chwili, po prostu trzeba zbadać metody :)

BTW, to w żaden sposób trzeba jailbreak urządzenie

5

wypróbować this- // zarejestrować tę klasę jako odbiornik w pliku manifestu dla SMS_RECEIVED zamiarem

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

Chcę również zmienić wiadomość przychodzącą. Dziękuję wszystkim za kody. @Sharad Mhaske: czy możesz napisać kod dla: wyślij wiadomość do siebie z modyfikowaną zawartością za pomocą ** ** klasy SMSManager ** – Milan

+1

@milan: sprawdź zaktualizowany kod.you dodatkowo musisz dodać uprawnienia do wysyłania wiadomości w Twoim pliku manifestu –

2

Tak istnieje sposób, ale niestety od rolecie Ki tKat nie jest już taki łatwy. Aby pracować nad wersjami> Jelly Bean, musisz mieć uruchomioną aplikację jako domyślną aplikację SMS, czyli modyfikować i przerwaćBroadcast(). Do 4.3 i poniżej, tworzyć odbiornik rozgłaszania i zrobić coś jak następuje: ...

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); 
} 

Ta informacja uzyskano z here

Prawie zapomniałem stałych ..

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

To jest niesamowita odpowiedź. Mam nadzieję, że zostanie on przegłosowany, dopóki wszyscy robiący aplikację sms na kitkat + nie przeczytają tego – Kay

Powiązane problemy