Использование VoicemailContract дает ошибку прав
Я пытаюсь использовать VoicemailContract, но получаю сообщение об ошибке разрешения, даже если я включаю разрешение в свой манифест. Кто-нибудь может пролить свет на то, что происходит?
Я получаю эту ошибку при попытке доступа к поставщику голосовой почты:
java.lang.SecurityException: Permission denied for URI: content://com.android.voicemail/voicemail?source_package=com.google.android.apps.googlevoice
Requires com.android.voicemail.permission.READ_WRITE_ALL_VOICEMAIL permission.
Я добавил оба разрешения в мой манифест:
<uses-permission android:name="com.android.voicemail.permission.ADD_VOICEMAIL" />
<uses-permission android:name="com.android.voicemail.permission.READ_WRITE_ALL_VOICEMAIL" />
Я также не получаю следующую цель трансляции:
<receiver
android:name=".VoicemailReceiver"
android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.NEW_VOICEMAIL" />
</intent-filter>
</receiver>
Любая помощь будет оценена. СПАСИБО!
2 ответа
Похоже, я снова отвечу на свой вопрос. Я только что нашел эту небольшую информацию, которая не включена в Документацию Google для VoicemailContract:
http://developer.android.com/about/versions/android-4.0.html (прокрутите вниз до "Поставщик голосовой почты")
Поставщик голосовой почты
Новый поставщик голосовой почты позволяет приложениям добавлять голосовую почту на устройство, чтобы представить все голосовые сообщения пользователя в одной визуальной презентации. Например, возможно, что у пользователя есть несколько источников голосовой почты, например один от поставщика услуг телефона и другие от VoIP или других альтернативных голосовых услуг. Эти приложения могут использовать API провайдера голосовой почты для добавления своей голосовой почты на устройство. Затем встроенное приложение "Телефон" представляет все голосовые сообщения пользователю в единой презентации. Хотя системное приложение Phone является единственным приложением, которое может считывать все голосовые сообщения, каждое приложение, предоставляющее голосовую почту, может читать те, которые были добавлены в систему (но не могут читать голосовые сообщения из других служб).
Поскольку API в настоящее время не позволяют сторонним приложениям читать все голосовые сообщения из системы, единственными сторонними приложениями, которые должны использовать API голосовой почты, являются те, которые имеют голосовую почту для доставки пользователю.
Класс VoicemailContract определяет провайдера контента для провайдера голосовой почты. Подклассы VoicemailContract.Voicemails и VoicemailContract.Status предоставляют таблицы, в которые приложения могут вставлять данные голосовой почты для хранения на устройстве. Пример приложения провайдера голосовой почты см. В демонстрационной версии провайдера голосовой почты.
Так что... в принципе, даже если у них есть этот новый API (который крут и полезен), у вас будет доступ только к Голосовой почте, которую ваше приложение вставит в БД. У вас нет доступа к любой другой голосовой почте, которая есть на вашем устройстве.
Я до сих пор не уверен, следует ли запускать широковещательную рассылку для всех приложений на устройстве или только для системных приложений, но поскольку я не получаю эту широковещательную рассылку, я могу только предполагать, что она предназначена только для системных приложений.,
Не стесняйтесь подтвердить или опровергнуть эту информацию. Спасибо!
Я думаю, что вам нужно добавить имя пакета вашего проекта, т.е. "content://com.android.voicemail/voicemail?source_package="+ ctx.getPackageName();