2013-04-09 33 views
8

着信SMSメッセージを傍受してから、ユーザーに提示する前に修正する方法はありますか?着信SMSメッセージを傍受して変更する

  • iPhone/Andriodでネイティブに行うことはできますか?
  • PhoneGapを使用して行うことはできますか?
  • AndriodのMonoTouch/Monoを使用して行うことはできますか?

上記のいずれかに該当する場合は、いくつかの点を教えてください。

次のように私の好み・ソリューションの優先順位は次のとおりです。

  1. PhoneGapの
  2. モノ
  3. ネイティブ

事前にすべてのいただきありがとうございます!!

EDIT:この目的が何であるか疑問に思う人々のために

、基本的に私は内容に応じて、SMSで「ラベル」という言葉を入れたいので、私は、SMSを表示するときに、私ができますちょうど "ばかな愚か者"の代わりに、 "重要:しばらくする"のようなものを見てください。

+1

「そこにISN Androidでそれを行う方法、良さに感謝します。ただし、SMSブロードキャストを傍受し、必要に応じて通知を抑制することができます。 – 323go

+1

はい、androdiネイティブコードを使用する方法があります。ここにAndeはあなたが始めるのに役立つリンクです:http://stackoverflow.com/questions/11435354/receiving-sms-on-android-app –

+0

多分Husamはあなたのための解決策を持っています。あなたはあなたがしたいことがはっきりしていません。編集する - >保存する - >表示しますか?だから唯一のsmsはあなたの編集されたものになります。または、編集したSMSメッセージをトーストとして表示したいのですが、実際のSMSメッセージを編集する必要はありませんか? –

答えて

1

確かに!その後、レコードを更新/var/mobile/Library/SMS/sms.db

CREATE TRIGGER AFTER INSERT ON message 

- iOSの最も簡単な方法は、SMSデータベースにトリガを作成するだけです!あなただけの方法:)ところで

を探求する必要があり、

それを行うためのより高度な方法は、プライベートメソッドをフックされていますが、私は今、その深い行くことはありません、あなたはどのような方法であなたが必要ですジェイルブレイクデバイス

5

this- //意図SMS_RECEIVEDのためにマニフェストファイルに受信機として、このクラスを登録してみ

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

私も着信メッセージの変更に興味があります。コードありがとうございました。 @Sharad Mhaske:** SMSManagerクラス** – Milan

+1

@milan:更新されたコードを確認してください。あなたのマニフェストファイルにはandroid:name = "android.permission.SEND_SMS" /> –

2

はいそこの方法ですが、残念ながらのKiの展開以来、それ以上は簡単ではありません。バージョン> Jelly Beanで作業するには、アプリケーションを既定のSMSアプリケーションとして実行する必要があります。つまり、変更およびabortBroadcast()を実行する必要があります。 4.3以下の場合は、放送受信機を作成し、次のような何かを:

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

この情報は、here

から入手したほとんど忘れてしまった...定数を..

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

これはすばらしい答えです。私はkitkat +上のSMSのアプリを作ってみんなそれを読むまでそれがupvotedされていることを願って – Kay

関連する問題