如何获取设备IMEI码?Plugin.DeviceInfo初始化异常解决方法
解决Plugin.DeviceInfo初始化异常的方案
这个类型初始化异常我之前碰到过不少,大多是插件没正确初始化、平台配置缺失或者权限问题导致的,给你列几个最实用的排查和解决步骤:
1. 先确认平台项目的初始化操作(针对Xamarin.Forms)
如果是用Xamarin.Forms开发,每个平台项目都得手动初始化插件,这是最容易遗漏的点:
- Android端:打开
MainActivity.cs,在LoadApplication(new App())之前添加初始化代码:Plugin.DeviceInfo.CrossDevice.Current.Init(this); - iOS端:打开
AppDelegate.cs,在FinishedLaunching方法里加上:Plugin.DeviceInfo.CrossDevice.Current.Init();
要是你用的是.NET MAUI,不用手动初始化,但要确保装的是Plugin.DeviceInfo.Maui这个适配MAUI的NuGet包,别装成旧版的Plugin.DeviceInfo了。
2. 检查NuGet包版本兼容性
旧版本的Plugin.DeviceInfo可能和你的项目框架(比如.NET 6+的MAUI、新版本的Xamarin.Forms)不兼容。建议卸载现有包,重新安装最新的稳定版,或者找和你项目框架匹配的版本。
3. 验证平台权限配置
获取IMEI需要对应权限,权限缺失也会触发初始化异常:
- Android:在
AndroidManifest.xml里添加权限声明:
注意Android 10及以上系统,普通应用拿不到<uses-permission android:name="android.permission.READ_PHONE_STATE" />READ_PRIVILEGED_PHONE_STATE权限,所以没法获取IMEI,这种情况建议改用Android ID、广告ID这类替代标识符。 - iOS:iOS本身不允许获取IMEI,调用
DeviceId会返回IDFV或IDFA,要是用IDFA的话,得在项目里配置广告追踪权限。
4. 清理重建项目
有时候编译缓存或残留文件会搞出奇怪的问题,试试这几步:
- 右键解决方案选择「清理」
- 删除每个平台项目下的
bin和obj文件夹 - 重新生成整个解决方案
5. 排查插件冲突
如果项目里还有其他设备信息相关的插件,可能存在依赖冲突。可以暂时移除其他同类插件,看看异常是否消失。
要是以上步骤都没用,建议捕获异常的内部细节,精准定位问题:
try { var deviceId = Plugin.DeviceInfo.CrossDevice.Current.DeviceId; } catch (Exception ex) { Console.WriteLine($"初始化失败:{ex.Message}"); if (ex.InnerException != null) { Console.WriteLine($"内部异常详情:{ex.InnerException.Message}"); } }
内容的提问来源于stack exchange,提问作者yogesh narhare
相关产品推荐
相关产品推荐

