Android 从用户配置文件中获取名字、姓氏和电话号码?
我正在尝试从个人资料中获取用户信息(名字、姓氏、电话、电子邮件等)。下面是我的代码,奇怪的是有几个记录(Android 从用户配置文件中获取名字、姓氏和电话号码?,android,android-contacts,android-account,Android,Android Contacts,Android Account,我正在尝试从个人资料中获取用户信息(名字、姓氏、电话、电子邮件等)。下面是我的代码,奇怪的是有几个记录(cursor.moveToNext()工作了好几次),其中一个在电话值中包含电子邮件,另一个在电子邮件字段中包含地址。我所需要的是一张正确的记录,而不是挑选和组合碎片 我确实添加了所需的权限,所以应该不会有问题 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-pe
cursor.moveToNext()
工作了好几次),其中一个在电话值中包含电子邮件,另一个在电子邮件字段中包含地址。我所需要的是一张正确的记录,而不是挑选和组合碎片
我确实添加了所需的权限,所以应该不会有问题
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />
您不会在单个记录中获得所有信息,因为根据MIMETYPE,所有信息都存储为单独的行项目。读取游标时,应首先从游标中读取MIMETYPE,然后从相应列中读取数据 为了解释,由于您在选择中提供了三种MIMEType,如果用户输入了所有信息,您将获得至少三条记录,对于name,您将获得一条记录,其中包括DISPLAY\u name、gived\u name、FAMILY\u name等。 考虑到他添加了多少号码,您还将获得一条或多条电话记录,每条记录还将包含类型(手机、家庭等) 电子邮件也是如此 有关名称列,请参阅 电话和电子邮件存储在DATA1列中
private static final String[] PERSONAL_ADDRESS_PROJ = {
ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME,
ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.CommonDataKinds.Email.ADDRESS,
};
private static final int INDEX_GIVEN_NAME = 0;
private static final int INDEX_FAMILY_NAME = INDEX_GIVEN_NAME + 1;
private static final int INDEX_PHONE_NUMBER = INDEX_FAMILY_NAME + 1;
private static final int INDEX_EMAIL = INDEX_PHONE_NUMBER + 1;
private SignupModel searchForProfile() {
final Uri uri = Uri.withAppendedPath(ContactsContract.Profile.CONTENT_URI,
ContactsContract.Contacts.Data.CONTENT_DIRECTORY);
String selection = ContactsContract.Contacts.Data.MIMETYPE + " = ?" + " OR " +
ContactsContract.Contacts.Data.MIMETYPE + " = ?" + " OR " +
ContactsContract.Contacts.Data.MIMETYPE + " = ?" ;
String [] args = new String[]{ ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE,
ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE,
ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE};
Cursor cursor = mContext.getContentResolver().query(uri, PERSONAL_ADDRESS_PROJ, selection, args, null);
SignupModel model;
if (cursor != null && cursor.moveToFirst()) {
try {
do
{
final String givenName = cursor.getString(INDEX_GIVEN_NAME);
final String familyName = cursor.getString(INDEX_FAMILY_NAME);
final String phone = cursor.getString(INDEX_PHONE_NUMBER);
final String email = cursor.getString(INDEX_EMAIL);
model = new SignupModel(email,null,null,givenName, familyName, phone,null);
}while (cursor.moveToNext()); //loop for debugging purpose
} catch (Exception e) {
model = null;
} finally {
cursor.close();
}
} else {
LogUtils.LOGD(TAG, "Couldn't find profile entry");
model = null;
}
return model;
}