我想预填充应用程序中的某些字段,以在用户预订应用程序内的服务时为他提供帮助。
因此,我将如何获得设备所有者的名字和姓氏。我想使用绑定(bind)到Google帐户的默认信息;到目前为止,我得到了:
AccountManager am = AccountManager.get(this);
Account[] accounts = am.getAccounts();
for (Account account : accounts) {
if (account.type.compareTo("com.google") == 0)
{
String possibleEmail = account.name;
// how to get firstname and lastname here?
}
}
如果您愿意,我愿意采用其他方法-只要我能收到所有者的电子邮件,名字和姓氏即可。
最佳答案
在Ice Cream Sandwich中获取此信息很容易,因为Android包含一个代表设备所有者的个人资料-该资料称为“我”资料,并存储在 ContactsContract.Profile
表中。只要您在AndroidManifest.xml中请求READ_PROFILE
和READ_CONTACTS
权限,就可以从用户的个人资料中读取数据。
与您最相关的字段是“联系人”中的DISPLAY_NAME列,可能还有StructuredName字段-也可以使用诸如用户的联系人照片之类的东西。
有一个Android Code Lab教程提供了a full example of reading a user's profile,代码的核心部分在ListProfileTask
中。这是一个简短的代码段:
Cursor c = activity.getContentResolver().query(ContactsContract.Profile.CONTENT_URI, null, null, null, null);
int count = c.getCount();
String[] columnNames = c.getColumnNames();
boolean b = c.moveToFirst();
int position = c.getPosition();
if (count == 1 && position == 0) {
for (int j = 0; j < columnNames.length; j++) {
String columnName = columnNames[j];
String columnValue = c.getString(c.getColumnIndex(columnName)));
...
// consume the values here
}
}
c.close();
不幸的是,我认为没有办法在API级别14之前获取此类数据。