Как получить черновик SMS в Android 6 Marshmallow
Мои вопросы относятся только к Android 6 (начиная с версии 23 SDK). Мне нужно получить все SMS, даже черновики для дальнейшей обработки. Здесь нет ничего особенного, используйте следующий код:
context.getContentResolver().query(Uri.parse("content://sms/"),
new String[] {...}, null, null, null)
И эта работа идеально подходит для Android 5, а это значит, что я получаю все SMS-сообщения, включая черновик. Но на всех устройствах с Android 6 я получаю только отправленные и полученные сообщения и НЕТ ПРОЕКТА. Попробуйте сделать мое приложение по умолчанию SMS, прежде чем пытаться запросить SMS - но не повезло, на Android 6 я до сих пор не могу получать черновики сообщений. В чем проблема?
Я уже нашел некоторые связанные должности
Отсутствие SMS-сообщений в результатах контент-провайдера на Android Marshmallow
Но это не решает мою проблему вообще.
Ответы
Ответ 1
Для 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>
Ответ 2
Я верю, что ваш поиск найден в этом ответе. Он предоставляет список URI для доступа к различным блокам SMS. В частности, для черновиков SMS-сообщений есть
Содержание://смс/проект
Ответ 3
Запрос в URI content://sms/draft будет возвращать только черновики сообщений, которые хранятся в поставщике SMS.
Реализация приложений приложений по умолчанию для android-сообщений хранит черновики сообщений в приложении и не добавляет черновики к поставщику SMS.
Только черновики сообщений, которые являются частью провайдера SMS (могут быть добавлены с помощью скрытого API-интерфейса SMSManager addTextMessageDraft), будут возвращены в качестве результатов, когда выполняется запрос в URI content://sms/draft.