Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android将消息标记为“已读”无法正常工作_Android_Sms - Fatal编程技术网

Android将消息标记为“已读”无法正常工作

Android将消息标记为“已读”无法正常工作,android,sms,Android,Sms,我正在构建一个小的android应用程序,在这个应用程序中,我正在阅读传入的消息,我想将其标记为“已读消息”。为此,我添加了所需的权限,还添加了用于侦听传入消息的接收。除了将其标记为读取进程外,一切正常。我试过以下几种方法: private void markMessageRead(Context context, String number, String body) { Uri uri = Uri.parse("content://sms/inbox"); Cursor c

我正在构建一个小的android应用程序,在这个应用程序中,我正在阅读传入的消息,我想将其标记为“已读消息”。为此,我添加了所需的权限,还添加了用于侦听传入消息的接收。除了将其标记为读取进程外,一切正常。我试过以下几种方法:

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

            Debug.print("inside mark read before if ------ ");
            Debug.print(cursor.getString(cursor.getColumnIndex("address"))+"  "+number);
            Debug.print(cursor.getInt(cursor.getColumnIndex("read"))+"  ");
            Debug.print(cursor.getString(cursor.getColumnIndex("body"))+"  "+body);


            if ((cursor.getString(cursor.getColumnIndex("address")).equals(number)) && (cursor.getInt(cursor.getColumnIndex("read")) == 0)) {
                if (cursor.getString(cursor.getColumnIndex("body")).startsWith(body)) {

                    Debug.print("inside read message inside if ... ");
                    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)
    {
    }
}

//inside receiver side ... 
@Override
public void onReceive(Context context, Intent intent) {

    mContext = context;
                Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        markMessageRead(mContext, message.getOriginatingAddress(), message.getMessageBody());
                    }
                }, 2000);
}

一切正常,没有任何错误。唯一的一件事是它并没有把我的邮件标记为已读邮件。我做错什么了吗。我需要一些帮助。谢谢。

将您的应用程序设为默认短信应用程序