【问题标题】:change read status of sms in android更改android中短信的读取状态
【发布时间】:2014-03-18 04:09:18
【问题描述】:

我构建了一个 android SMS 应用程序,我想从我的 smsReceiver 接收短信,一切都会好起来的未读,它在图标上显示通知为未读 我不知道我如何将默认消息应用程序的状态更改为读取状态 true 我正在使用华为 G610 进行测试和 API 17 果冻豆

public static 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()) {

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

【问题讨论】:

    标签: android sms broadcastreceiver


    【解决方案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());
          }
    }
    

    【讨论】:

    • 我认为这与我上面使用的方法相同,并将 read 的值更改为 1 或 true
    • 如果您搜索相关问题,那么您肯定会得到答案
    • 亲爱的,它完美的工作和状态更新成功但是当我看到默认的消息应用程序显示收到的消息未读且仍未读
    【解决方案2】:

    这可能会让一切顺利:

    context.getContentResolver().update(Uri.parse("content://sms/inbox"), values, "_id = ?", new String[]{SmsMessageId}); //code
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-02
      • 1970-01-01
      • 2022-11-05
      相关资源
      最近更新 更多