Android: как пометить смс как прочитанные в onReceive - PullRequest
12 голосов
/ 26 декабря 2011

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

Ответы [ 5 ]

27 голосов
/ 03 августа 2012

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

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());
      }
}
9 голосов
/ 24 марта 2014

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

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

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

6 голосов
/ 13 июня 2012

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

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

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

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

0 голосов
/ 27 февраля 2018

Я сделал обходной путь для версий, более новых, чем KitKat, из ответа здесь : если есть сообщения для чтения, когда пользователь покидает приложение, запустите приложение SMS с номером, для которого я хочу пометить сообщения читать. Это автоматически пометит все сообщения как прочитанные.

@Override
public void onBackPressed() {
  if (toBeRead) {
    Intent smsIntent = new Intent(Intent.ACTION_VIEW);
    smsIntent.setType("vnd.android-dir/mms-sms");
    smsIntent.putExtra("address", smsNumber);
    try {startActivity(smsIntent);}
    catch (Exception e) {
      try {
        Intent intent = new Intent(Intent.ACTION_SENDTO);
        intent.setData(Uri.parse("smsto:" + Uri.encode(smsNumber)));
        startActivity(intent);
      }
      catch (Exception e1) {}
    }
    toBeRead = false;
  }
}
0 голосов
/ 26 декабря 2011

Не думаю, что есть какая-либо официальная поддержка для этого, но этот вопрос предоставляет способ сделать это (хотя еще не пробовал): Пометить MMS как прочитанное программно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...