Android: как пометить смс, как читать в onReceive

Я могу поймать sms, увидеть телефон-отправитель, тело, я могу прервать трансляцию, если мне не нравится этот sms, но я не знаю, как просто пометить этот sms как прочитанный, который пользователь может прочитать в поле позже. Любые идеи, как я могу это сделать?

Ответ 1

Это может помочь вам:

private void markMessageRead(Context context, String number, String body) {

            Uri uri = Uri.parse("content://sms/inbox");
            Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
            try{

            while (cursor.moveToNext()) {
                    if ((cursor.getString(cursor.getColumnIndex("address")).equals(number)) && (cursor.getInt(cursor.getColumnIndex("read")) == 0)) {
                        if (cursor.getString(cursor.getColumnIndex("body")).startsWith(body)) {
                            String SmsMessageId = cursor.getString(cursor.getColumnIndex("_id"));
                            ContentValues values = new ContentValues();
                            values.put("read", true);
                            context.getContentResolver().update(Uri.parse("content://sms/inbox"), values, "_id=" + SmsMessageId, null);
                            return;
                        }
                    }
                }
      }catch(Exception e)
      {
          Log.e("Mark Read", "Error in Read: "+e.toString());
      }
}

Ответ 2

Так как Android 4.4 KitKat единственное приложение может изменять sms-данные - SMS-приложение, которое было установлено по умолчанию

только приложение, которое получает широковещательную рассылку SMS_DELIVER_ACTION (указанное пользователем SMS-приложение по умолчанию), может писать поставщику SMS, определенному классом and подклассы android.provider.Telephony

Более подробную информацию можно найти здесь: http://android-developers.blogspot.ru/2013/10/getting-your-sms-apps-ready-for-kitkat.html

Ответ 3

Здесь был дан ответ: Установить смс как прочитанный в Android

ContentValues values = new ContentValues();
values.put("read",true);
getContentResolver().update(Uri.parse("content://sms/inbox"),values,
    "_id="+SmsMessageId, null);

где "_id" - это идентификатор сообщения

Отредактировано, спасибо NilayOnAndroid!