如何在Android 6 Marshmallow中获取草稿短信

13

我的问题仅适用于Android 6(从SDK的v23开始)。我需要获取所有短信,包括未发送的草稿以供后续处理。这里没有什么特别之处,使用了以下代码:

context.getContentResolver().query(Uri.parse("content://sms/"),
new String[] {...}, null, null, null)
这个方法适用于Android 5,可以获取所有短信消息,包括草稿。但是在Android 6的所有设备上,我只能获取已发送和收到的短信,没有草稿。在尝试查询短信之前,请尝试将我的应用设置为默认短信应用-但是没有好运,在Android 6中仍然无法获取草稿短信。问题出在哪里?我已经找到了一些相关帖子: SMS missing from content provider results on Android Marshmallow, 但这并没有解决我的问题。

在我看来,Umair已经正确回答了它。 - Sami
3个回答

2

对于 Marshmallow,您需要添加运行时权限以读取消息。

可以像这样检查权限

int permissionCheck = ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.READ_SMS);

如果权限被拒绝,则需要在运行时请求许可。
ActivityCompat.requestPermissions(this, new String[]{{Manifest.permission.READ_SMS}, PERMISSIONS_REQUEST_READMESSAGE);

访问草稿需要使用此URI访问内容提供程序。

草稿的内容提供程序是

content://sms/draft

注意:不要忘记添加权限。
<uses-permission android:name="android.permission.READ_SMS"></uses-permission>

1
我相信你所需要的内容可以在这个答案中找到。它提供了访问不同短信箱的URI列表。特别是草稿短信的URI为:

content://sms/draft


2
那不起作用。在Android 6之前,直接获取草稿短信content://sms/draft甚至通过content://sms/都没有问题。但是在Marshmallow中,它们被过滤掉了。 - Aliaksei Lithium

1

查询URI content://sms/draft 将仅返回存储在SMS提供程序中的草稿短信。

默认的Android消息应用程序实现将草稿短信存储在应用程序中,并不会将草稿添加到SMS提供程序中。

只有作为SMS提供程序的一部分的草稿短信(可以使用SMSManager的隐藏API addTextMessageDraft添加)将在查询URI content://sms/draft 时作为结果返回。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接