在破解微信数据库时,需要获取手机的DeviceId,但是有时会出现打不开的情况,报出file is not a database: , while compiling: select count(*) from sqlite_master的异常,这时发现我的数据库密码和之前的不一致,对比一下发现获取的deviceId不一致导致的,难道手机的deviceId也会变来变去吗?
搜了一下资料,发现获取手机的deviceId还真没想的那么容易。一般情况我们获取手机的DeviceId也就是手机的IMEI码,一般通过如下代码。此外还需要获取READ_PHONE_STATE权限。

private String getPhoneIMEI() {TelephonyManager tm = (TelephonyManager) getContext().getSystemService(Service.TELEPHONY_SERVICE);return tm.getDeviceId();
}

一个双卡手机不止一个IMEI值,全网通双卡手机有两个IMEI和一个MEID,Android6.0的API中提供了这样的方法getDeviceId(int slotIndex)

type value meaning
int PHONE_TYPE_CDMA Phone radio is CDMA
int PHONE_TYPE_GSM Phone radio is GSM
private String getPhoneIMEI(int slotIndex) {TelephonyManager tm = (TelephonyManager) getContext().getSystemService(Service.TELEPHONY_SERVICE);return tm.getIMEI(slotIndex);
}private String getPhoneMEID(int slotIndex) {TelephonyManager tm = (TelephonyManager) getContext().getSystemService(Service.TELEPHONY_SERVICE);return tm.getMEID(slotIndex);
}

在Android5.0系统中,可以通过反射获取IMEI和MEID的值。

private String getIMEI(int slotId){try {Class clazz = Class.forName("android.os.SystemProperties");Method method = clazz.getMethod("get", String.class, String.class);String imei = (String) method.invoke(null, "ril.gsm.imei", "");if(!TextUtils.isEmpty(imei)){String[] split = imei.split(",");if(split.length > slotId){imei = split[slotId];}Log.d(TAG,"getIMEI imei: "+ imei);return imei;}} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException | ClassNotFoundException e) {e.printStackTrace();Log.w(TAG,"getIMEI error : "+ e.getMessage());}return "";}private String getMEID(){try {Class clazz = Class.forName("android.os.SystemProperties");Method method = clazz.getMethod("get", String.class, String.class);String meid = (String) method.invoke(null, "ril.cdma.meid", "");if(!TextUtils.isEmpty(meid)){Log.d(TAG,"getMEID meid: "+ meid);return meid;}} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException | ClassNotFoundException e) {e.printStackTrace();Log.w(TAG,"getMEID error : "+ e.getMessage());}return "";}

至于上面提到的手机deviceId改变因为之前调用tm.getDeviceId()返回的imei值,后来返回meid值导致的,什么原因导致的还没发现。

Android获取IMEI和MEID相关推荐

  1. android获取imei兼容_Android获取IMEI号码

    1 android 获取 imei号码2 3 核心代码:4 5 Imei =((TelephonyManager) getSystemService(TELEPHONY_SERVICE))6 .get ...

  2. android 获取 imei号码

    转自:http://blog.csdn.net/gumanren/archive/2011/02/26/6209237.aspx android 获取 imei号码 核心代码: Imei = ((Te ...

  3. android 获取imei(国际移动设备身份码)号码详解及其应用场景

    IMEI简介: IMEI(International Mobile Equipment Identity)是国际移动设备身份码的缩写,国际移动装备辨识码,是由15位数字组成的"电子串号&qu ...

  4. 获取linux系统编码,Android获取IMEI码

    相比大家都知道,每部手机都有一个属于自己的字符串,这个字符串是全球唯一的:即使相同品牌,相同型号,它们彼此也不会雷同:这个码就是IEMI码. 有了IMEI码,我们就能很方便的区分出每一台机器,区分出机 ...

  5. android 获取 meid 代码,Android 各个版本获取IMEI、MEID

    public class IMEIUtil { /** * 获取默认的imei 一般都是IMEI 1 * * @param context * @return */ public static Str ...

  6. Android 各个版本获取IMEI、MEID

    MEID/IMEI1/IMEI2 (可通过在手机拨号键盘中输入 *#06# 即可查询) IMEI:(International Mobile Equipment Identity)国际移动设备身份码的 ...

  7. android获取imei兼容_Android如何获取双卡手机IMEI的方法示例

    前言: 项目中有个统计付费广告转化率的需求,需要获取用户手机的IMEI.但是网上最常见的方法有坑,也就是TelephonyManager.getDeviceId(),这方法有可能获取的是MEID或者空 ...

  8. android获取imei(android获取wifi密码)

    android系统如何获取imei号码,获取手机型号和系统版本号 /*****创建日期2010-4-29下午05:02:47**/packagenet.sunniwell.app;importandr ...

  9. android获取imei需要read_phone_state吗,Firemonkey android read_phone_state运行时权限要求获取IMEI...

    编辑:对不起,我没有在FireMonkey上做更多的功课.这就是我坚持自己的主题,而不是属于它的主题.我已经添加了这些内容,试图让我的答案更值得赏金. 如果您可以将应用清单上的targetSdk限制为 ...

最新文章

  1. 安装nvidia-docker2
  2. 深度学习训练模型中的 train from scrath 是什么意思?(247)
  3. SAP UI5 应用开发教程之二十八 - SAP UI5 应用的集成测试工具 OPA 介绍
  4. mysql 日期分隔符_sql中的日期处理
  5. recyclerview放不同的布局_RecyclerView系列之(2):为RecyclerView添加分隔线
  6. MySQL数据库实操教程(24)——用户管理
  7. ip地址合不合法怎么看_如何判断IP地址的合法性
  8. linux的字体文件夹在哪里,把windows下的字体安装到Linux系统下的方法介绍
  9. 赌运挖洞之Apache目录浏览
  10. 微信流量主几个月几年没结算,无月份结算单解决方案
  11. 第五章 数组Ivor Horton
  12. c语言编程植物信息查询系统,C:\WINDOWS\Desktop\导航库\植物\xzjs\hzc.htm
  13. 《缠中说禅108课》66:主力资金的食物链
  14. php测试号推送消息失败,php 给ios推送消息 提示这个错误
  15. Centos7安装百度云盘
  16. 大连理工计算机专业课考几门,大连理工大学计算机专业考研科目及研究方向
  17. 人脸性别转换APP有什么?快把这些APP收好
  18. python 人生的第一个小爬虫 爬小说 保存一下
  19. Codeforces #618 div.2 C. Anu Has a Function
  20. 韦伯分布(Weibull)参数矩估计MATLAB实现

热门文章

  1. 宏基因组测序结果分析中的名词汇总
  2. 批训练、注意力模型及其声纹分割应用,谷歌三篇论文揭示其声纹识别技术原理
  3. 【历史上的今天】3 月 24 日:苹果推出 Mac OS X;微软前任 CEO 出生;Spring 1.0 正式发布
  4. 陪学读书会——《定位》第⑤章:你不能由此及彼
  5. 对象与对象变量 LJY第二周
  6. MVVM模式原理与实现
  7. jeet air缺点_Jeet框架; 什么是新的?
  8. vscode配置C++环境(图文详解)
  9. EXCEL二级数据有效性的设置问题
  10. IDaaS | 使用 Authing + Lambda 轻松替代 AWS Cognito