为什么查询联系人挑选需要不同的权限取决于Android版本?(Why does querying c

2019-09-19 05:15发布

我们一直在与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模拟器和某些ICS预模型(例如,HTC霹雳,摩托罗拉Droid),然而,试图查询的权限拒绝异常返回UI的结果:

java.lang.SecurityException异常:通过引起许可拒绝:读取com.android.providers.contacts.ContactsProvider2 URI内容://com.android.contacts/contacts/lookup/0r1-52345052324E483C32/1从PID = 273,UID = 10036需要android.permission.READ_CONTACTS

这看起来像一个操作系统或设备碎片问题; 我们正在寻求澄清关于这一主题,使我们可以用这种或另一种方法前进。

思考?

Answer 1:

这是故意的。 在底部此页面这种行为记录:

的Android 2.3(API等级9)之前,对联系供应商进行查询(如上面所示)要求您的应用程序声明READ_CONTACTS权限(请参见安全和权限)。 然而,与Android 2.3,联系人开始/人应用程式授予您的应用程序从联系人提供商读取时,它会返回一个结果的临时许可。 临时许可只适用于要求特定的联系,所以无法查询比意图的指定的其他联系人Uri ,除非你做声明READ_CONTACTS许可。

有十几个其他地方,你希望它可以记录在案,但该网页是唯一的地方,我发现它解释。



文章来源: Why does querying contact picker require different permissions depending on the android version?