如何在C# Xamarin Forms Android中获取IMEI号码?
获取Xamarin Forms Android设备IMEI的解决方案
一、解决基础上下文问题
之前代码里的Forms.Context已被弃用,直接改用Android.App.Application.Context替代,可解决上下文找不到的问题。
二、定义共享项目的统一接口
先在Xamarin Forms共享项目中创建接口,保证跨平台调用的一致性:
namespace AppMobile.Models { public interface IDevice { string GetImei(); } }
三、Android项目的实现(含权限处理)
1. 配置权限
在Android项目的AndroidManifest.xml中添加对应权限:
<!-- Android 9及以下版本需要 --> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- Android 10+ 仅特殊应用(如系统预装、电话类应用)可申请该权限 --> <uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" />
注意:Android 10(API 29)及以后,普通应用无法获取IMEI,只有系统应用、预装应用或拥有READ_PRIVILEGED_PHONE_STATE权限的应用才能获取,否则会返回null。若你的应用不属于这类特殊应用,建议改用Android ID或OAID作为设备唯一标识。
2. 接口实现代码
using Android.App; using Android.Content; using Android.Telephony; using Android.OS; using AppMobile.Models; using Xamarin.Forms; [assembly: Dependency(typeof(UniqueIdAndroid))] namespace AppMobile.Models { public class UniqueIdAndroid : IDevice { public string GetImei() { string imei = null; var telephonyManager = Application.Context.GetSystemService(Context.TelephonyService) as TelephonyManager; // Android 6+ 需要动态申请权限 if (Build.VERSION.SdkInt >= BuildVersionCodes.M) { if (ContextCompat.CheckSelfPermission(Application.Context, Android.Manifest.Permission.ReadPhoneState) != Android.Content.PM.Permission.Granted) { return "权限未授权"; } } // 适配不同Android版本的IMEI获取方法 if (Build.VERSION.SdkInt >= BuildVersionCodes.O) { imei = telephonyManager.Imei; } else { imei = telephonyManager.DeviceId; } return imei ?? "无法获取IMEI"; } } }
四、补充:动态申请权限的页面代码
在Xamarin Forms页面中主动触发权限申请(不能直接在依赖服务中申请):
using Xamarin.Essentials; // 示例:在按钮点击事件中申请权限并获取IMEI private async void GetImeiButton_Clicked(object sender, EventArgs e) { var status = await Permissions.CheckStatusAsync<Permissions.Phone>(); if (status != PermissionStatus.Granted) { status = await Permissions.RequestAsync<Permissions.Phone>(); } if (status == PermissionStatus.Granted) { var imei = DependencyService.Get<IDevice>().GetImei(); // 处理获取到的IMEI } }
内容的提问来源于stack exchange,提问作者F205
相关产品推荐
相关产品推荐

