You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android设备所有者/用户名获取方法求助(游戏开发场景)

获取Android系统用户名的实现方案

针对你需求的两个信息来源,以下是具体实现方案及注意事项:

一、获取联系人中用户自填的姓名

用户在个人联系人资料里填写的姓名,可通过系统联系人的个人Profile查询获取,这是最直接的用户自定义姓名来源。

实现步骤:

  1. 声明权限:在AndroidManifest.xml中添加读取联系人权限:
<uses-permission android:name="android.permission.READ_CONTACTS" />
  1. 动态申请权限:Android 6.0(API 23)及以上版本需动态申请权限,获权后再执行查询:
// 检查权限
if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(activity, arrayOf(Manifest.permission.READ_CONTACTS), REQUEST_CODE_READ_CONTACTS)
} else {
    // 有权限,执行查询
    fetchUserProfileName(context)
}
  1. 查询个人资料姓名:
private fun fetchUserProfileName(context: Context): String? {
    val contentResolver = context.contentResolver
    val projection = arrayOf(ContactsContract.Profile.DISPLAY_NAME)
    contentResolver.query(
        ContactsContract.Profile.CONTENT_URI,
        projection,
        null,
        null,
        null
    )?.use { cursor ->
        if (cursor.moveToFirst()) {
            return cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Profile.DISPLAY_NAME))
        }
    }
    return null // 未找到返回null,后续可替换为默认昵称
}

二、获取系统初始化注册的姓名(账户姓名)

Android系统初始化时注册的姓名通常关联到用户添加的系统账户(如Google账户、设备本地账户),可通过AccountManager获取账户的显示名称。

实现步骤:

  1. 声明权限:在AndroidManifest.xml中添加账户访问权限:
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
  1. 动态申请权限:同样需在Android 6.0+版本动态申请权限:
if (ContextCompat.checkSelfPermission(context, Manifest.permission.GET_ACCOUNTS) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(activity, arrayOf(Manifest.permission.GET_ACCOUNTS), REQUEST_CODE_GET_ACCOUNTS)
} else {
    fetchAccountDisplayName(context)
}
  1. 获取账户显示名称:
private fun fetchAccountDisplayName(context: Context): String? {
    val accountManager = AccountManager.get(context)
    // 优先取Google账户名称,也可遍历所有账户取第一个有效名称
    val googleAccounts = accountManager.getAccountsByType("com.google")
    if (googleAccounts.isNotEmpty()) {
        return googleAccounts[0].name
    }
    // 无Google账户时遍历所有账户
    val allAccounts = accountManager.getAccounts()
    for (account in allAccounts) {
        account.name?.takeIf { it.isNotEmpty() }?.let { return it }
    }
    return null // 无账户时返回null
}

关键注意事项

  • 权限合规:上述均为敏感权限,必须在App隐私政策中明确说明用途(仅用于游戏内展示用户名),严格遵循用户授权意愿。
  • 容错处理:部分用户可能未填写联系人资料或未添加系统账户,需提前准备默认昵称(如“冒险家”“玩家”)作为 fallback。
  • 隐私保护:严格遵守你承诺的用途,仅在游戏特定环节展示,不得收集、存储或外传该信息。

内容的提问来源于stack exchange,提问作者Vasant Raval

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 13:05:08