如何在 Android 6 Marshmallow 中获取短信草稿
How to get draft SMS in Android 6 Marshmallow
我的问题仅针对 Android 6(从 SDK v23 开始)。我需要获取所有 SMS,甚至草稿以供将来处理。这里没什么特别的,使用了以下和平代码:
context.getContentResolver().query(Uri.parse("content://sms/"),
new String[] {...}, null, null, null)
这项工作非常适合 Android 5,这意味着我收到了所有 SMS 消息,包括草稿。但是在所有 Android 6 的设备上,我只收到发送和接收的消息,没有草稿。在尝试查询 SMS 之前尝试将我的应用设置为默认 SMS – 但运气不好,在 Android 6 我仍然无法收到草稿消息。什么问题?
我已经找到了一些相关的帖子
但这根本不能解决我的问题。
我相信在 this answer 中可以找到您要找的东西。它提供了用于访问不同 SMS 框的 URI 列表。专门用于短信草稿的是
content://sms/draft
对于 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>
查询 URI content://sms/draft 将 return 仅存储在 SMS 提供商中的消息草稿。
默认 android 消息传递应用程序实现将草稿消息存储在应用程序中,不会将草稿添加到 SMS 提供商。
只有作为 SMS 提供程序一部分的草稿消息(可以使用 SMSManager 的隐藏 API addTextMessageDraft 添加)将 returned 作为查询 URI content:/ 的结果/sms/draft 已执行。
我的问题仅针对 Android 6(从 SDK v23 开始)。我需要获取所有 SMS,甚至草稿以供将来处理。这里没什么特别的,使用了以下和平代码:
context.getContentResolver().query(Uri.parse("content://sms/"),
new String[] {...}, null, null, null)
这项工作非常适合 Android 5,这意味着我收到了所有 SMS 消息,包括草稿。但是在所有 Android 6 的设备上,我只收到发送和接收的消息,没有草稿。在尝试查询 SMS 之前尝试将我的应用设置为默认 SMS – 但运气不好,在 Android 6 我仍然无法收到草稿消息。什么问题?
我已经找到了一些相关的帖子
我相信在 this answer 中可以找到您要找的东西。它提供了用于访问不同 SMS 框的 URI 列表。专门用于短信草稿的是
content://sms/draft
对于 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>
查询 URI content://sms/draft 将 return 仅存储在 SMS 提供商中的消息草稿。
默认 android 消息传递应用程序实现将草稿消息存储在应用程序中,不会将草稿添加到 SMS 提供商。
只有作为 SMS 提供程序一部分的草稿消息(可以使用 SMSManager 的隐藏 API addTextMessageDraft 添加)将 returned 作为查询 URI content:/ 的结果/sms/draft 已执行。