联系人代码与4.0.3分开

时间:2013-01-27 05:53:58

标签: android

我已将联系人与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" />

1 个答案:

答案 0 :(得分:1)

VoicemailContract的Google文档中没有包含这些信息,这可以解释您的问题:

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

  

语音信箱提供商

     

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

     

因为API目前不允许第三方应用全部读取   来自系统的语音邮件,应该是唯一的第三方应用程序   使用语音邮件API是那些有语音邮件传递给的人   用户。

     

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

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

我仍然不确定是否应该为设备上的所有应用程序或仅系统应用程序触发Broadcast Intent,但由于我没有收到此广播,我只能假设它是系统应用程序( s)only。

基本上,我的猜测是你的联系人应用程序的编译版本试图访问其代码中的所有语音邮件,从而导致您的异常。它通常能够毫无问题地执行此操作,因为它是具有系统签名的系统应用程序,但是当您自己安装它时不再适用。