我已将联系从4.0.3中分离出来,并已成功编译。当我试图安装它时,它会引发以下错误:
01-27 05:31:21.865: E/DatabaseUtils(601): Writing exception to parcel
01-27 05:31:21.865: E/DatabaseUtils(601): java.lang.SecurityException: The caller must have permissions com.android.voicemail.permission.ADD_VOICEMAIL AND com.android.voicemail.permission.READ_WRITE_ALL_VOICEMAIL
01-27 05:31:21.865: E/DatabaseUtils(601): at com.android.providers.contacts.VoicemailPermissions.checkCallerHasFullAccess(VoicemailPermissions.java:64)
01-27 05:31:21.865: E/DatabaseUtils(601): at com.android.providers.contacts.CallLogProvider.checkVoicemailPermissionAndAddRestriction(CallLogProvider.java:289)
01-27 05:31:21.865: E/DatabaseUtils(601): at com.android.providers.contacts.CallLogProvider.query(CallLogProvider.java:132)
01-27 05:31:21.865: E/DatabaseUtils(601): at android.content.ContentProvider$Transport.query(ContentProvider.java:178)
01-27 05:31:21.865: E/DatabaseUtils(601): at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:112)
01-27 05:31:21.865: E/DatabaseUtils(601): at android.os.Binder.execTransact(Binder.java:338)
01-27 05:31:21.865: E/DatabaseUtils(601): at dalvik.system.NativeStart.run(Native Method)
01-27 05:31:21.996: E/DatabaseUtils(601): Writing exception to parcel
01-27 05:31:21.996: E/DatabaseUtils(601): java.lang.SecurityException: The caller must have permissions com.android.voicemail.permission.ADD_VOICEMAIL AND com.android.voicemail.permission.READ_WRITE_ALL_VOICEMAIL 尽管下面的行位于联系人清单文件中:
<uses-permission android:name="com.android.voicemail.permission.ADD_VOICEMAIL" />
<uses-permission android:name="com.android.voicemail.permission.READ_WRITE_ALL_VOICEMAIL" />发布于 2013-01-27 09:10:58
VoicemailContract的Google文档中没有包含一些信息,这可以解释您的问题:
http://developer.android.com/about/versions/android-4.0.html (向下滚动到“语音邮件提供商”)
语音信箱提供商 新的语音邮件提供商允许应用程序将语音邮件添加到设备中,以便在一个单一的可视化演示中显示所有用户的语音邮件。例如,用户有可能拥有多个语音邮件来源,例如来自电话服务提供商的语音邮件,以及来自VoIP或其他替代语音服务的语音邮件。这些应用程序可以使用语音邮件提供程序API将语音邮件添加到设备中。然后,内置的电话应用程序在统一的演示文稿中向用户显示所有语音邮件。虽然系统的电话应用程序是唯一能够读取所有语音邮件的应用程序,但每个提供语音邮件的应用程序都可以读取它添加到系统中的语音邮件(但不能读取其他服务的语音邮件)。 由于APIs目前不允许第三方应用程序读取系统中的所有语音邮件,因此唯一应该使用语音邮件APIs的第三方应用程序是那些有语音邮件发送给用户的应用程序。 VoicemailContract类定义了语音邮件探查器的内容提供程序。VoicemailContract.Voicemails和VoicemailContract.Status子类提供了表,应用程序可以在其中插入语音邮件数据,以便存储在设备上。有关语音邮件提供商应用程序的示例,请参见语音邮件提供程序演示。
So...basically,即使他们有这个新的API (这是很酷和有用的),您只能访问您的应用程序插入DB的语音邮件。你不能访问任何其他语音信箱,你的设备。
我仍然不确定是否应该对设备上的所有应用程序或系统应用程序发射广播意图,但由于我没有接收到这个广播,我只能假设它只适用于系统应用程序。
本质上,我的猜测是,您编译后的联系人应用程序试图访问其代码中的所有语音邮件,从而导致您的异常。它通常能够做到这一点,没有任何问题,因为它是一个系统应用程序的系统签名,但当你自己安装它,不再适用。
https://stackoverflow.com/questions/14544829
复制相似问题