如何在Ionic安卓应用中获取IMEI号码?
获取安卓设备IMEI的完整Ionic实现方案
看起来你已经在使用cordova-plugin-uid和cordova-plugin-android-permissions尝试获取IMEI了,我来帮你补全代码并梳理关键注意事项,确保功能正常运行:
首先,确认你已安装所有必要依赖(如果还没装全的话):
- 安装UID插件:
ionic cordova plugin add cordova-plugin-uid - 安装Ionic Native UID包装:
npm install @ionic-native/uid - 安装权限插件:
ionic cordova plugin add cordova-plugin-android-permissions - 安装Ionic Native权限包装:
npm install @ionic-native/android-permissions
接下来,在你的AppModule中注册这两个插件,确保Angular能正常注入它们:
// app.module.ts import { NgModule } from '@angular/core'; import { Uid } from '@ionic-native/uid/ngx'; import { AndroidPermissions } from '@ionic-native/android-permissions/ngx'; @NgModule({ // ...其他已有配置 providers: [ Uid, AndroidPermissions, // ...其他服务提供者 ] }) export class AppModule {}
然后,补全你的getIMEI方法,完善权限请求后的逻辑,并安全获取IMEI:
async getIMEI() { const { hasPermission } = await this.androidPermissions.checkPermission( this.androidPermissions.PERMISSION.READ_PHONE_STATE ); console.log("hasPermission : " + hasPermission); if (!hasPermission) { const result = await this.androidPermissions.requestPermission( this.androidPermissions.PERMISSION.READ_PHONE_STATE ); // 如果用户拒绝权限,直接终止流程 if (!result.hasPermission) { console.error("用户拒绝读取手机状态权限,无法获取IMEI"); return; } } // 权限通过后尝试获取IMEI try { const imei = this.uid.IMEI; console.log("成功获取IMEI:", imei); // 在这里添加你的业务逻辑,比如存储IMEI或发送到后端 } catch (error) { console.error("获取IMEI失败:", error); // 处理异常情况,比如设备不支持、系统限制等 } }
关键注意事项
- Android 10+ 系统限制:从Android 10(API级别29)开始,普通第三方应用无法获取IMEI,除非你的应用是设备所有者应用或拥有特殊系统权限。如果面向普通用户,建议用
ANDROID_ID作为替代:
注意:Android ID会在设备恢复出厂设置时改变,部分厂商设备可能返回相同ID。const androidId = this.uid.ANDROID_ID; - 权限声明:务必在
config.xml中添加权限声明,否则权限请求会失败:<platform name="android"> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> </platform> - 测试环境:必须在真实安卓设备上测试,模拟器通常无法返回有效IMEI。
内容的提问来源于stack exchange,提问作者TechValens
相关产品推荐
相关产品推荐

