我想预填充应用程序中的某些字段,以在用户预订应用程序内的服务时为他提供帮助。

因此,我将如何获得设备所有者的名字和姓氏。我想使用绑定(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_PROFILEREAD_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之前获取此类数据。

10-08 17:04