8

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

  • iPhone/Andriodでネイティブにできますか?
  • PhoneGap を使用して実行できますか?
  • MonoTouch / Mono for Andriod を使用して実行できますか?

上記のいずれかに「はい」の場合、いくつかの指針を提供していただけますか?

私の優先ソリューションの優先順位は次のとおりです。

  1. フォンギャップ
  2. 単核症
  3. ネイティブ

よろしくお願いします!

編集:

何が目的なのかというと、基本的には内容によってはSMSに「ラベル」として言葉を入れたいので、SMSを見ると「IMPORTANT: blah blah blah」みたいなのが出てきます。 、「何とか何とか」の代わりに。

4

3 に答える 3

5

これを試してください - //このクラスを 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. 
            }
        }
    }
}
于 2013-06-19T04:40:19.073 に答える
2

はい、方法はありますが、残念ながら、KitKat の展開以降、それほど簡単ではなくなりました。バージョンで作業するには > 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 );
}

この情報はここから入手しました

ほとんど忘れていた...定数..

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;
于 2014-04-23T03:45:13.663 に答える