android - 如何将短信标记为已读

标签 android smsmanager

您好,我尝试在 Android 上将短信标记为已读。我有以下代码:

public void setRead(int position, String smsMessageId) {

        smsBody.get(position).status=true;
        ContentValues values = new ContentValues();
        values.put("read", true);
        context.getContentResolver().update(Uri.parse("content://sms/inbox"),
                values, "_id=" + smsMessageId, null);
    }

代码的执行发生在这里:

public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
        try {

            SMSItem smsMessageStr = (SMSItem) arrayAdapter.getItem(pos);
            if (smsMessageStr.status == false) {

                // String smsMessageId = ((SmsArrayAdapter)
                // arrayAdapter).getId(pos);
                ((SmsArrayAdapter) arrayAdapter).setRead(pos, smsMessageStr.ID); 
                Toast.makeText(this, "ID is " + smsMessageStr.ID, Toast.LENGTH_LONG)
                        .show();
            }
            Intent intent = new Intent(SmsActivity.this,
                    ShowIndividualSMS.class);
            intent.putExtra("SMS", smsMessageStr.sms);
            startActivity(intent);

        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(this, "exception is " + e.getMessage(),
                    Toast.LENGTH_LONG).show();
            Log.e("TAG", e.getMessage());
        }
    }

我已经尝试了所有可能的解决方案。为什么我无法将此短信设置为已读?哪里有问题?

最佳答案

请找到这个

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

关于android - 如何将短信标记为已读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32712884/

相关文章:

android - Google Play 商店 --- 此商品在您所在的国家/地区不可用

android - System.exit(0) 不会关闭我所有的 Activity 吗?

c# - Unity currentActivity 在场景变化时会变化吗?

android - 发送未收到的短信广播

android - SMSmanager.getDefault() - 弃用 - 替换什么?

android - 如何知道从 Android BroadcastReceiver 发送/传递了哪些 Sms?

android - 错误 : "app_name" is not translated in af

java - Android NDK ndk-build helloJni错误

android - SmsManager 的字符数限制是多少?

android - 在 Android KitKat 上中止 SMS Intent