如何使用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
相关产品推荐
相关产品推荐

