我们一直在尝试使用Android联系人选择器,以允许用户在没有需要READ_CONTACTS权限的应用的情况下选择联系人。以下意图似乎适用于4.0(ICS)设备以及2.3.3仿真器:
Intent contactPickerIntent = new Intent(Intent.ACION_GET_CONTENT);
contactPickerIntent.setType(Phone.CONTENT_ITEM_TYPE); // returns content://com.android.contacts/data/...
Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI); // returns content://com.android.contacts/lookup/...
在2.2模拟器和某些pre-ICS模型(例如,HTC Thunderbolt,Motorola Droid)上,尝试查询返回的UI会导致权限拒绝异常:
引起:java.lang.SecurityException:Permission Denial:读取 com.android.providers.contacts.ContactsProvider2 uri content://com.android.contacts/contacts/lookup/0r1-52345052324E483C32/1 从pid = 273,uid = 10036需要android.permission.READ_CONTACTS
这看起来像操作系统或设备碎片问题;我们正在寻求对此主题的澄清,以便我们可以采用这种方法或替代方法。
思想?
答案 0 :(得分:1)
这是故意的。在this page的底部记录了这种行为:
在Android 2.3(API级别9)之前,对联系人提供程序执行查询(如上所示)需要您的应用程序声明
READ_CONTACTS
权限(请参阅安全性和权限)。但是,从Android 2.3开始,Contacts / People应用程序授予您的应用程序临时权限,以便在返回结果时从联系人提供程序中读取。临时权限仅适用于请求的特定联系人,因此除非您声明Uri
权限,否则您无法查询意图READ_CONTACTS
指定的联系人以外的联系人。
还有十几个其他地方您希望将其记录下来,但该页面是我发现它解释的唯一地方。