我的问题仅针对Android 6(从SDK的第23版开始)。我需要获取所有短信,甚至草稿以备将来处理。这里没什么特别的,使用了下面的代码:
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 但这根本不能解决我的问题。
答案 0 :(得分: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 :(得分:1)
我相信你所寻找的是I'm not in a controller。它提供了用于访问不同SMS框的URI列表。专门针对SMS消息草案的是
内容://短信/草案
答案 2 :(得分:1)
对URI content:// sms / draft 的查询将仅返回存储在SMS提供程序中的草稿消息。
默认的Android消息传递应用程序实现将草稿消息存储在应用程序中,不会将草稿添加到SMS提供程序。
当执行URI content:// sms / draft 的查询时,只有作为SMS提供商一部分的草稿消息(可以使用SMSManager的隐藏API addTextMessageDraft添加)将作为结果返回。