当前位置: 首页 > news >正文

uni-app 获取 android 手机 IMEI码

1、需求来源

最近项目上需要获取手机的IMEI码,并且在更换手机号登录后,需要提示重新更新IMEI码。

2、需求拆分

2.1 获取 IMEI 码

查阅 uni-app 官网发现在android 10 已经无法获取imei码,所以对于这个需求拆分成两种情况。

第一种情况: android 10 以上 选择用户手动输入的方式。

第二种情况:android 10 以下,通过 plus.device.getInfo 自动获取的方式。

2.2 获取android 手机的唯一编码

2.2.1 通过 uni.getSystemInfoSync 获取

let { deviceId } = uni.getSystemInfoSync();

可以看出 deviceId 在清理缓存等情况下,会存在不唯一的情况。

2.2.2 通过 plus.device.getOAID 获取

可以发现该方法只会在android 10 以上的手机手机有效。

2.2.3 通过 plus.device.getInfo 获取

plus.device.getInfo 方法的使用方法同 2.1 过去 IMEI码

3、完整示例

3.1 获取 IMEI码,deviceId

/** * 获取系统设备信息 */ export function getSystemDeviceInfo() { return new Promise((resolve, reject) => { // 返回结果 let resolveResult = (deviceId, imei) => { resolve({ deviceId, imei }) }; let sysInfo = uni.getSystemInfoSync(); // #ifdef APP-PLUS if (sysInfo.osName.toLowerCase() == 'android' && sysInfo.osVersion >= 10) { plus.device.getOAID({ success: ({ oaid }) => { resolveResult(oaid); }, fail: (e) => { resolveResult(sysInfo.deviceId); } }); } else { requestPermissions(['android.permission.READ_PHONE_STATE']).then(res => { plus.device.getInfo({ success: ({ uuid, imei }) => { let [oaid] = uuid?.split(",") || [] resolveResult(oaid || sysInfo.deviceId, imei) }, fail: (error) => { resolveResult(sysInfo.deviceId); }, }); }).catch((err) => { resolveResult(sysInfo.deviceId); }); } // #endif // #ifndef APP-PLUS resolveResult(sysInfo.deviceId); // #endif }); }

3.2 申请系统权限

/** * 申请权限 * * @param {Object} permissions */ export function requestPermissions(permissions) { return new Promise((resolve, reject) => { plus.android.requestPermissions(permissions, function(e) { if (e.deniedAlways.length > 0) { //权限被永久拒绝 // 弹出提示框解释为何需要定位权限,引导用户打开设置页面开启 console.log('Always Denied!!! ' + e.deniedAlways.toString()); return reject({ code: -1, message: '权限被永久拒绝', deniedAlways: e.deniedAlways }); } if (e.deniedPresent.length > 0) { //权限被临时拒绝 // 弹出提示框解释为何需要定位权限,可再次调用plus.android.requestPermissions申请权限 console.log('Present Denied!!! ' + e.deniedPresent.toString()); return reject({ code: -2, message: '权限被临时拒绝', deniedAlways: e.deniedPresent }); } if (e.granted.length > 0) { // 权限被允许 // 调用依赖获取定位权限的代码 console.log('Granted!!! ' + e.granted.toString()); return resolve(); } }, function(e) { console.log('Request Permissions error:' + JSON.stringify(e)); reject(e); }); }); }

4、注意

1、plus.device.getInfo 在用户拒绝权限后success, fail 回调都不会响应,所以增加手动获取权限方法,避免用户拒绝权限后无法正确的回调

2、plus.device.getOAID 只在 android 10 以上有用。

3、uni.getSystemInfoSync 获取的 deviceId 存在不是唯一的情况。

http://www.lryc.cn/news/472394.html

相关文章:

  • 后台管理系统的通用权限解决方案(八)认证机制介绍、JWT介绍与jjwt框架的使用
  • 接口测试 —— Postman 变量了解一下!
  • 鸿蒙系统:核心特性、发展历程与面临的机遇与挑战
  • 从0到1,用Rust轻松制作电子书
  • 半天入门!锂电池剩余寿命预测(Python)
  • 学生党头戴式耳机哪款音质更胜一筹?TOP4好音质头戴式耳机推荐
  • 数据结构 ——— 二叉树的概念及结构
  • 【React】React 的核心设计思想
  • C++ 二叉树进阶:相关习题解析
  • Matlab实现蚁群算法求解旅行商优化问题(TSP)(理论+例子+程序)
  • 2024年10月HarmonyOS应用开发者基础认证全新题库
  • kafka 分布式(不是单机)的情况下,如何保证消息的顺序消费?
  • 数据分析案例-苹果品质数据可视化分析+建模预测
  • 沈阳乐晟睿浩科技有限公司抖音小店运营创新
  • 【前端】CSS知识梳理
  • 【undefined reference to xxx】zookeeper库编译和安装 / sylar项目ubuntu20系统编译
  • IDEA解决 properties 文件乱码问题
  • 超越Jira?2024年探索项目管理新工具!
  • 大模型,多模态大模型面试问题【计算图,LLama,交叉熵,SiLU,RLHF】
  • 凌雄科技打造DaaS模式,IT设备产业链由内而外嬗变升级
  • Oracle视频基础1.2.1练习
  • 15、基于AT89C52的数码电子时钟proteus仿真设计
  • UML总结
  • 网站被浏览器提示不安全怎么办?——附解决方案
  • “前端兼容——CSS篇”(进阶版)
  • 使用Docker Compose简化微服务部署
  • 2025考研各省市网上确认时间汇总!
  • SSL/TLS 密码套件漏洞分析以及修复方法
  • [Vue warn]: Do not use built-in or reserved HTML elements as component id:
  • 【大数据学习 | kafka】kafka的shell操作