android – 将SMS消息标记为已读/未读或删除在KitKat中不起作用的消息

前端之家收集整理的这篇文章主要介绍了android – 将SMS消息标记为已读/未读或删除在KitKat中不起作用的消息前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在研究短信应用程序.直到昨天,当我将Nexus 4更新为 Android 4.4,KitKat时,一切顺利.诸如将SMS标记为已读/未读以及删除线程中的所有消息等功能已停止工作.为什么会这样?它适用于其他三星设备(不运行KitKat).

这是我将邮件标记为已读或未读的代码

public static void markRead(final Context context,final Uri uri,final int read) {
        Log.d(TAG,"markRead(" + uri + "," + read + ")");
        if (uri == null) {
            return;
        }
        String[] sel = Message.SELECTION_UNREAD;
        if (read == 0) {
            sel = Message.SELECTION_READ;
        }
        final ContentResolver cr = context.getContentResolver();
        final ContentValues cv = new ContentValues();
        cv.put(Message.PROJECTION[Message.INDEX_READ],read);
        try {
            cr.update(uri,cv,Message.SELECTION_READ_UNREAD,sel);
        } catch (IllegalArgumentException e) {
            Log.e(TAG,"Failed update",e);
            Toast.makeText(context,e.getMessage(),Toast.LENGTH_LONG).show();
        }
}

删除线程中的所有消息,我使用:

public static void deleteMessages(final Context context,final int title,final int message,final Activity activity) {

        Log.i(TAG,"deleteMessages(..," + uri + ",..)");
        final Builder builder = new Builder(context);
        builder.setTitle(title);
        builder.setMessage(message);
        builder.setNegativeButton(android.R.string.no,null);
        builder.setPositiveButton(android.R.string.yes,new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(final DialogInterface dialog,final int which) {
                        final int ret = context.getContentResolver().delete(
                                uri,null,null);
                        Log.d(TAG,"deleted: " + ret);
                        if (activity != null && !activity.isFinishing()) {
                            activity.finish();
                        }
                        if (ret > 0) {
                            Conversation.flushCache();
                            Message.flushCache();
                            SmsReceiver.updateNewMessageNotification(context,null);
                            // adapter.notifyDataSetChanged();
                        }
                        try {
                            testFromFragment(context);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                });
        builder.show();
}

解决方法

在Android 4.4中,有关SMS的一些变化.其中之一是,只有注册为默认SMS应用程序的应用程序才具有对提供程序的写入权限.

Check here简要介绍了SMS的变化.

Check this link有更深入的了解.这个解释了您的应用程序需要满足哪些标准才能成为默认消息传递应用程序.

And here’s官方有趣的东西.

因此,如果您的应用程序不是默认的消息传递应用程序,那么这就是指定功能已停止工作的原因.

可以在answer here中找到默认Provider限制的可能解决方法.

原文链接:https://www.f2er.com/android/317011.html

猜你在找的Android相关文章