1

我正在尝试使用 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>

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

4

2 回答 2

4

看来我会再次回答我自己的问题。我刚刚发现了一些未包含在 VoicemailContract 的 Google 文档中的信息:

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

语音信箱提供商

新的语音邮件提供程序允许应用程序向设备添加语音邮件,以便在单个可视化演示中呈现所有用户的语音邮件。例如,用户可能有多个语音邮件源,例如一个来自电话服务提供商,另一个来自 VoIP 或其他替代语音服务。这些应用程序可以使用语音邮件提供程序 API 将其语音邮件添加到设备。然后,内置的电话应用程序将所有语音邮件以统一的方式呈现给用户。虽然系统的电话应用程序是唯一可以读取所有语音邮件的应用程序,但每个提供语音邮件的应用程序都可以读取它已添加到系统中的那些(但不能读取来自其他服务的语音邮件)。

由于 API 当前不允许第三方应用程序读取系统中的所有语音邮件,因此唯一应该使用语音邮件 API 的第三方应用程序是那些将语音邮件传递给用户的应用程序。

VoicemailContract 类定义了 Voicemail Provder 的内容提供者。VoicemailContract.Voicemails 和 VoicemailContract.Status 子类提供了表格,应用程序可以在其中插入语音邮件数据以存储在设备上。有关语音邮件提供商应用程序的示例,请参阅语音邮件提供商演示。

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

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

随意确认或否认此信息。谢谢!

于 2012-07-31T17:18:30.840 回答
0

我认为您需要添加您的项目包名称,即“content://com.android.voicemail/voicemail?source_package="+ ctx.getPackageName();

于 2012-11-27T00:07:20.963 回答