.NET Maui中如何获取Android设备的序列号?
在.NET Maui中获取Android设备序列号的方案
你提到的Microsoft.Maui.Devices.DeviceInfo确实没有直接提供获取Android设备序列号的API,不过可以通过以下两种方案实现:
方案一:使用平台特定代码(推荐)
通过.NET Maui的依赖注入和平台自定义实现,直接调用Android原生API获取序列号,这是最可靠的方式。
步骤1:在共享项目定义接口
创建一个用于获取序列号的服务接口:
public interface IDeviceSerialNumberService { string GetSerialNumber(); }
步骤2:在Android项目实现接口
在Android项目中添加该接口的实现,注意处理Android版本的权限限制:
using Android.OS; [assembly: Dependency(typeof(YourAppName.Droid.Services.DeviceSerialNumberService))] namespace YourAppName.Droid.Services { public class DeviceSerialNumberService : IDeviceSerialNumberService { public string GetSerialNumber() { string serialNumber = string.Empty; // Android 8.0+ (API 26) 及以上版本 if (Build.VERSION.SdkInt >= BuildVersionCodes.O) { serialNumber = Build.Serial; } // Android 7.1及以下版本 else { serialNumber = Build.Serial; } return serialNumber; } } }
步骤3:注册服务
在MauiProgram.cs中注册这个服务:
builder.Services.AddSingleton<IDeviceSerialNumberService>();
步骤4:处理权限
在Android项目的AndroidManifest.xml中添加权限声明:
<uses-permission android:name="android.permission.READ_PHONE_STATE" android:maxSdkVersion="28" />
注意:Android 10(API 29)及以上版本,
READ_PHONE_STATE权限无法获取真实序列号,此时Build.Serial会返回固定值(如UNKNOWN),这是系统权限限制,无法绕过。
步骤5:在共享代码中调用
在需要获取序列号的地方注入服务并调用:
private readonly IDeviceSerialNumberService _serialNumberService; public YourPage(IDeviceSerialNumberService serialNumberService) { _serialNumberService = serialNumberService; InitializeComponent(); } private void GetSerialBtn_Clicked(object sender, EventArgs e) { string serial = _serialNumberService.GetSerialNumber(); // 使用serial变量 }
方案二:使用兼容.NET Maui的第三方插件
原Xamarin的Xam.Plugin.DeviceInfo已更新为支持.NET Maui的版本,你可以安装Plugin.DeviceInfo.Maui NuGet包,用法和Xamarin中类似:
- 安装NuGet包:
Install-Package Plugin.DeviceInfo.Maui - 在
MauiProgram.cs中初始化:
builder.UseDeviceInfo();
- 获取序列号:
string serial = CrossDeviceInfo.Current.SerialNumber;
注意:该插件同样受限于Android系统的权限规则,Android 10+无法获取真实序列号。
内容的提问来源于stack exchange,提问作者Ramiro Pérez
相关产品推荐
相关产品推荐

