2011-12-26 28 views
11

Tôi có thể bắt sms, có thể thấy điện thoại người gửi, nội dung, tôi có thể hủy bỏ nếu tôi không thích tin nhắn này, nhưng tôi không biết cách đánh dấu sms này đọc, người dùng đó có thể đọc trong hộp sau. Bất kỳ ý tưởng nào về cách tôi có thể thực hiện việc này?Android: cách đánh dấu sms như đã đọc trong onReceive

Trả lời

23

Điều này có thể giúp bạn:

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

Điều này có đọc tất cả các thông điệp trong hộp hoặc một số cụ thể – Prasad

+1

Không, chỉ một thông báo cụ thể với _id = SmsMessageId –

+0

Kết quả trả về của truy vấn cập nhật là 0. Lý do đằng sau này là gì ? –

0

Tôi không nghĩ rằng có bất kỳ hỗ trợ chính thức cho việc này, nhưng câu hỏi này cung cấp một phương pháp để làm việc đó (đã không thử nó mặc dù): Mark MMS as read programmatically

+0

ý tưởng sai, sms mà tôi bắt trong onReceive không có trong "nội dung: // sms" –

+0

@ Andrew-Nó sẽ được "nội dung: // sms/hộp thư đến" .. –

6

Một câu trả lời đã được đưa ra ở đây: Set sms as read in Android

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

nơi "_id" là ID của thông điệp

Edited, nhờ NilayOnAndroid!

+0

Nó sẽ được "nội dung : // sms/inbox ".. –

8

Kể từ Android 4.4 KitKat ứng dụng chỉ có thể sửa đổi dữ liệu sms - SMS-ứng dụng đã được thiết lập như mặc định

chỉ ứng dụng mà nhận được phát sóng SMS_DELIVER_ACTION (ứng dụng SMS mặc định do người dùng chỉ định) có thể ghi vào Nhà cung cấp SMS được xác định bởi lớp android.provider.Telephony và các lớp con

Bạn có thể tìm thêm thông tin tại đây: http://android-developers.blogspot.ru/2013/10/getting-your-sms-apps-ready-for-kitkat.html

0

Tôi đã làm một phiên bản cho phiên bản mới hơn KitKat, từ câu trả lời here: nếu có thư được đọc, khi người dùng rời khỏi ứng dụng, hãy bắt đầu ứng dụng SMS với số mà tôi muốn thư để đánh dấu là đã đọc. Thao tác này sẽ tự động đánh dấu tất cả thư là đã đọc.

@Override 
public void onBackPressed() { 
    if (toBeRead) { 
    Intent smsIntent = new Intent(Intent.ACTION_VIEW); 
    smsIntent.setType("vnd.android-dir/mms-sms"); 
    smsIntent.putExtra("address", smsNumber); 
    //smsIntent.putExtra("sms_body","Body of Message"); 
    startActivity(smsIntent); 
    toBeRead = false; 
    } 
} 
Các vấn đề liên quan