我正在尝试使用VoicemailContract,但是即使我在清单中包含了permision,也一直出现权限错误。任何人都可以对发生的事情有所了解吗?

尝试访问语音信箱提供程序时出现此错误:

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>


任何帮助,将不胜感激。谢谢!

最佳答案

看来我会再次回答自己的问题。我刚刚发现了语音邮件合同的Google文档中未包含的以下信息:

http://developer.android.com/about/versions/android-4.0.html(向下滚动到“语音邮件提供商”)


  语音信箱提供商
  
  新的语音邮件提供程序允许应用程序将语音邮件添加到
  设备,以便在单个屏幕中呈现所有用户的语音邮件
  视觉呈现。例如,用户可能有
  多种语音邮件来源,例如电话服务中的一种
  VoIP或其他替代语音服务的提供商。
  这些应用可以使用语音邮件提供者API添加其语音邮件
  到设备。然后,内置的Phone应用程序会显示所有
  以统一的方式向用户发送语音邮件。虽然
  系统的“电话”应用程序是唯一可以读取所有内容的应用程序
  语音邮件,提供语音邮件的每个应用程序都可以阅读
  已添加到系统的邮件(但无法读取来自
  其他服务)。
  
  因为API当前不允许第三方应用读取
  系统中的所有语音邮件,这是唯一的第三方应用
  应该使用语音邮件API的是那些要传递语音邮件的API
  给用户。
  
  VoicemailContract类为以下内容定义内容提供程序:
  语音邮件提供者。子类VoicemailContract.Voicemails和
  VoicemailContract.Status提供可在其中插入应用程序的表
  语音邮件数据以存储在设备上。举一个例子
  语音邮件提供商应用程序,请参阅语音邮件提供商演示。


所以...基本上,即使他们拥有这个新的API(既酷又有用),您也只能访问应用程序插入数据库中的语音邮件。您无权访问设备拥有的任何其他语音邮件。

我仍然不确定是否应该针对设备上的所有应用程序或仅针对系统应用程序触发广播意图,但是由于我没有收到此广播,因此我只能假定它仅针对系统应用程序。

随时确认或拒绝此信息。谢谢!

10-07 18:42