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

如何使用C# Xamarin获取Android系统的用户显示名称

Xamarin.Android 获取系统用户显示名方案

实现前提

适配你使用的Android 9.0(API 28)版本,无需引入已失效的第三方插件,直接调用安卓原生API即可读取目标用户显示名。

操作步骤

1. 配置权限

在Android项目的Properties/AndroidManifest.xml中添加读取权限:

<!-- 读取用户资料所需权限 -->
<uses-permission android:name="android.permission.READ_CONTACTS" />

Android 6.0及以上版本需要额外做运行时权限申请,用户同意授权后才可正常读取数据。

2. 安卓端核心实现代码

通过依赖服务将安卓端能力暴露给Xamarin Forms层调用,安卓端核心逻辑如下:

using Android.App;
using Android.Content;
using Android.OS;
using Android.Provider;

public string GetSystemUserDisplayName()
{
    string displayName = string.Empty;
    // 方式1:通过UserManager读取多用户场景下的当前用户名称
    if (Build.VERSION.SdkInt >= BuildVersionCodes.NMr1)
    {
        UserManager userManager = (UserManager)Application.Context.GetSystemService(Context.UserService);
        displayName = userManager.GetUserName();
        if (!string.IsNullOrEmpty(displayName))
        {
            return displayName;
        }
    }

    // 方式2:兼容场景,读取系统所有者联系人资料的显示名
    var uri = ContactsContract.Profile.ContentUri;
    string[] projection = { ContactsContract.Contacts.InterfaceConsts.DisplayName };
    using (var cursor = Application.Context.ContentResolver.Query(uri, projection, null, null, null))
    {
        if (cursor != null && cursor.MoveToFirst())
        {
            int columnIndex = cursor.GetColumnIndex(projection[0]);
            if (columnIndex >= 0)
            {
                displayName = cursor.GetString(columnIndex);
            }
            cursor.Close();
        }
    }
    return displayName;
}

异常问题说明

  • await Contacts.GetAllAsync()返回空的原因:该方法默认仅读取普通联系人数据,不会读取系统内置的所有者用户Profile信息,因此无法拿到目标用户名。
  • Environment.UserName返回"somebody"的原因:该属性是.NET运行时在Android平台下的默认模拟值,不会读取安卓系统的真实用户信息,因此不符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:27:02