Android 从4.0.3中分离的联系人代码

Android 从4.0.3中分离的联系人代码,android,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_

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

谷歌的VoicemailContract文档中没有包含这一点信息,这可以解释您的问题:

(向下滚动至“语音邮件提供商”)

语音邮件提供商

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

因为API目前不允许第三方应用读取所有 来自系统的语音邮件,是唯一应该 使用语音邮件API是指那些有语音邮件要发送给用户的API 用户

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

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

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


本质上,我的猜测是,您的联系人应用程序的编译版本试图访问其代码中的所有语音邮件,从而导致您的异常。它通常可以毫无问题地完成这项工作,因为它是一个带有系统签名的系统应用程序,但当您自己安装它时,它就不再适用了。

虽然我在下面几行中看到了联系人清单文件Hi Raghav,但我已经看到您将Launcher2与4.0.3分开。你曾经使用过单独的联系人应用程序吗?没有,对不起。我只分离了电子邮件和Launcher2应用。@Raghav我能至少获得语音邮件数吗?即未读语音邮件数?