今天继续讲android Contact ContentProvider,讲联系人ContentProvider所需权限,另外,讲用户个人资料Profile。
以下是android developer官方讲解:
所需权限
想要访问联系人提供程序的应用必须请求以下权限:
对一个或多个表的读取权限
READ_CONTACTS,在 AndroidManifest.xml 中指定,使用 <uses-permission> 元素作为 <uses-permission android:name="android.permission.READ_CONTACTS">。
对一个或多个表的写入权限
WRITE_CONTACTS,在 AndroidManifest.xml 中指定,使用 <uses-permission> 元素作为 <uses-permission android:name="android.permission.WRITE_CONTACTS">。
这些权限不适用于用户个人资料数据。下面的用户个人资料部分对用户个人资料及其所需权限做了阐述。
请切记,用户的联系人数据属于个人敏感数据。用户关心其隐私权,因此不希望应用收集有关其自身的数据或其联系人的数据。 如需权限来访问其联系人数据的理由并不充分,用户可能给您的应用作出差评或干脆拒绝安装。
用户个人资料
ContactsContract.Contacts 表有一行包含设备用户的个人资料数据。 这些数据描述设备的 user 而不是用户的其中一位联系人。 对于每个使用个人资料的系统,该个人资料联系人行都链接到某个原始联系人行。 每个个人资料原始联系人行可具有多个数据行。ContactsContract.Profile 类中提供了用于访问用户个人资料的常量。
访问用户个人资料需要特殊权限。除了进行读取和写入所需的 READ_CONTACTS 和 WRITE_CONTACTS 权限外,如果想访问用户个人资料,还分别需要 android.Manifest.permission#READ_PROFILE 和 android.Manifest.permission#WRITE_PROFILE 权限进行读取和写入访问。
请切记,您应该将用户的个人资料视为敏感数据。权限 android.Manifest.permission#READ_PROFILE 让您可以访问设备用户的个人身份识别数据。 请务必在您的应用的描述中告知用户您需要用户个人资料访问权限的原因。
要检索包含用户个人资料的联系人行,请调用 ContentResolver.query()。 将内容 URI 设置为 CONTENT_URI 并且不要提供任何选择条件。 您还可以使用该内容 URI 作为检索原始联系人或个人资料数据的基本 URI。 例如,以下代码段用于检索个人资料数据:
// Sets the columns to retrieve for the user profile
mProjection = new String[]
{
Profile._ID,
Profile.DISPLAY_NAME_PRIMARY,
Profile.LOOKUP_KEY,
Profile.PHOTO_THUMBNAIL_URI
};
// Retrieves the profile from the Contacts Provider
mProfileCursor =
getContentResolver().query(
Profile.CONTENT_URI,
mProjection ,
null,
null,
null);
注:如果您要检索多个联系人行并想要确定其中一个是否为用户个人资料,请测试该行的 IS_USER_PROFILE 列。 如果该联系人是用户个人资料,则此列设置为“1”。