1.获取手机基本信息

参考:https://blog.csdn.net/wjky2014/article/details/109733589

一、获取手机基本信息(厂商、型号等参数)
二、设备信息获取实现图
三、获取手机设备 宽、高、IMEI 信息
四、获取手机厂商名、产品名、手机品牌、手机型号、主板名、设备名
五、获取手机硬件名、SDK版本、android版本 、语言支持、默认语言
六、获取 SD 卡存储信息
七、获取手机 RAM、ROM存储信息
八、DeviceInfoUtils 封装类
九、SDCardUtils 封装类

2.获得Android设备的唯一ID

先介绍安卓设备中的几种ID

1、IMEI
Android系统为开发者提供的用于标识手机设备的串号,也是各种方法中普适性较高的,可以说几乎所有的设备都可以返回这个串号,并且唯一性良好。它根据不同的手机设备返回IMEI,MEID或者ESN码。
缺陷:
非手机设备: 只能支持拥有通话功能的设备,对于平板不可以,如果只带有Wifi的设备或者音乐播放器没有通话的硬件功能的话就没有这个DEVICE_ID;
权限: 获取DEVICE_ID需要READ_PHONE_STATE权限;(需要弹窗提示)
在少数的一些手机设备上,该实现有漏洞,会返回垃圾或空,如:zeros或者asterisks的产品;
模拟器上可以刷IMEI。

public static String getIMEI(Context context) {String imei;try {TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);imei = telephonyManager.getDeviceId();} catch (Exception e) {imei = "";}return imei;
}

ANDROIDID - 安卓ID

在设备首次启动时,系统会随机生成一个64位的数字,并把这个数字以16进制字符串的形式保存下来,这个16进制的字符串就是ANDROID_ID,当设备被wipe后该值会被重置。
厂商定制系统的Bug:不同的设备可能会产生相同的ANDROID_ID:9774d56d682e549c。
厂商定制系统的Bug:有些设备返回的值为null。
设备差异:对于CDMA设备,ANDROID_ID和TelephonyManager.getDeviceId() 返回相同的值。
它在Android <=2.1 or Android >=2.3的版本是可靠、稳定的,但在2.2的版本并不是100%可靠的。
通常被认为不可信,因为它有时为null。开发文档中说明了:这个ID会改变如果进行了出厂设置。并且,如果某个Andorid手机被Root过的话,这个ID也可以被任意改变。

public static String getAndroidId (Context context) {String ANDROID_ID = Settings.System.getString(context.getContentResolver(), Settings.System.ANDROID_ID);return ANDROID_ID;
}

Serial Number

Android系统2.3版本以上可以通过下面的方法得到Serial Number,且非手机设备也可以通过该接口获取。

从Android 2.3 (“Gingerbread”)开始可用,可以通过android.os.Build.SERIAL获取,对于没有通话功能的设备,它会

返回一个唯一的device ID,

public static String getSerialNumber (Context context) {String SerialNumber = android.os.Build.SERIAL;return SerialNumber;
}

总结  androidID --> 剔除2.2版本(API 8)中有问题的手机,使用UUID替代 ,这种方式不需要权限

 /** 获取 设备唯一id  ,diviceId 需要权限,这边获取ANDROID_ID,如果空的话,通过设备信息自己拼接* */protected static final String PREFS_FILE = "device_id.xml";protected static final String PREFS_DEVICE_ID = "device_id";protected static volatile String uuid_device;public static String getDeviceID() {if (uuid_device == null) {final SharedPreferences prefs = context.getSharedPreferences(PREFS_FILE, 0);final String id = prefs.getString(PREFS_DEVICE_ID, null);if (id != null) {uuid_device = id;} else {uuid_device = getAndroidId();prefs.edit().putString(PREFS_DEVICE_ID, uuid_device).commit();}}return uuid_device;}public static String getAndroidId() {String uuid = "";final String androidId = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);try {if (!"9774d56d682e549c".equals(androidId)) {uuid = UUID.nameUUIDFromBytes(androidId.getBytes("utf8")).toString();} else {uuid = getUniquePsuedoID();}} catch (UnsupportedEncodingException e) {throw new RuntimeException(e);}return uuid;}//获得独一无二的Psuedo IDpublic static String getUniquePsuedoID() {String serial = null;String m_szDevIDShort = "35" +Build.BOARD.length() % 10 + Build.BRAND.length() % 10 +Build.CPU_ABI.length() % 10 + Build.DEVICE.length() % 10 +Build.DISPLAY.length() % 10 + Build.HOST.length() % 10 +Build.ID.length() % 10 + Build.MANUFACTURER.length() % 10 +Build.MODEL.length() % 10 + Build.PRODUCT.length() % 10 +Build.TAGS.length() % 10 + Build.TYPE.length() % 10 +Build.USER.length() % 10; //13 位try {serial = android.os.Build.class.getField("SERIAL").get(null).toString();//API>=9 使用serial号return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();} catch (Exception exception) {//serial需要一个初始化serial = "serial"; // 随便一个初始化}//使用硬件信息拼凑出来的15位号码  UUID.fromString(id);return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();}

获取手机的设备信息和唯一ID相关推荐

  1. Android开发之获取手机SIM卡信息

    TelephonyManager是一个管理手机通话状态.电话网络信息的服务类,该类提供了大量的getXxx(),方法获取电话网络的相关信息. TelephonyManager类概述: 可用于访问有关设 ...

  2. 最全详解Android设备UDID还是唯一ID?

    这篇文章主要介绍了Android设备UDID还是唯一ID?我觉得挺不错的,现在分享给大家,也给大家做个参考. 我想为我的 Android应用程序生成android设备唯一ID,以根据用户设备udid创 ...

  3. App获取android分辨率,Android 获取手机及APP信息实例详解

    霜风渐紧寒侵被,听孤雁声嘹唳,一声声送一声悲.<御街行>中的这句诗用来形容这个季节的北京真是再合适不过了,霜风阵阵,跑步的时候也越来越舍不得脱去外套了,考验毅力的时刻到了! 言归正传,开发 ...

  4. Android获取手机应用程序包的信息

    2019独角兽企业重金招聘Python工程师标准>>> 今天写了一个获取手机程序相关信息的demo,以下是demo的运行结果. 这是项目的结构. 下面是项目的具体代码: 1.Main ...

  5. iphone 获取手机运营商信息

    获取手机运营商信息是通过获取imsi来判断的,它是有一个自己的标准和规则的,下面先介绍一下imsi: IMSI: 国际移动用户识别码(IMSI:International Mobile Subscri ...

  6. protal服务器获取不到设备信息,Poral网页认证提示portal服务器获取不到设备信息或者设备没有回应req_info报文的解决办法...

    portal网页认证时提示获取不到设备信息或者没有回应req_info报文 文档名称 文档密级 问题描述: Portal网页认证场景,用户在浏览器输入账号名.密码点击登录时,系统提示portal se ...

  7. Android初级教程获取手机系统联系人信息

    在手机内部,对联系人信息存在对应的数据库.我们创建的而联系人信息都存在这张表中.如下是对数据库的截图,我已经对表和应该注意的地方做了红笔标注: 好了,现在可以根据数据库里面的数据来写代码了. 代码如下 ...

  8. Flutter获取Android/iOS设备信息

    我们在进行各个系统的原生开发时,都有对应的方法获取设备信息,那么在使用Flutter时如何获取设备相关的相关信息呢? 我们本文就来介绍一个Flutter插件: Flutter Device Info ...

  9. 开发第一步之SMTP协议发送邮件,获取手机的详细信息

    目前是测试代码,只有一个页面,运行软件时会自动的获取系统信息,并且发送,开机自启动等. 布局准备把应用的图标让他从下往上旋转变大,应用的名称从左往右移动,应用的版本从右往左移动,现在只是用文字代替,看 ...

最新文章

  1. SLAM精度测评——rpg_trajectory_evaluatio
  2. inter® management engine interface黄色感叹号解决方法
  3. 【控制】《多智能体系统的动力学分析与设计》徐光辉老师-第1章-绪论
  4. Delphi的StringReplace[转]
  5. CMD命令硬盘/光驱挂载
  6. r语言赋值为na_r语言将空白格替换成NA
  7. java mvc页面传值方式_详解SpringMVC的ModelAndView传值方法
  8. C++_类和对象_对象特性_友元_全局函数做友元_在类中声明友元权限的全局函数来访问_类中的private权限的变量---C++语言工作笔记052
  9. ubuntu 修改默认用户名_Tars框架在Ubuntu上的部署小结
  10. wxpython隐藏panel_在wxPython中绘制到Frame内部的Panel
  11. “Windows Sandbox”——PC主系统从未如此安全
  12. 小菜找实习-动态规划
  13. 网络监测用计算机安全管理制度,计算机信息网络安全管理制度
  14. STRUTS 2 教程
  15. 白话前沿IT技术系列—云计算
  16. 外卖行业现状分析_2019年中国外卖行业市场现状与发展趋势分析
  17. 如何利用MATLAB做非线性一元回归,Matlab一元非线性回归分析
  18. mysql连接泄露 定位_数据库连接泄漏
  19. html整体图片拆分拼图代码源代码,canvas拼图功能实现代码示例
  20. 基于51单片机的贪吃蛇小游戏

热门文章

  1. 使用Eclipse自带的工具检测和数据库连接时否成功
  2. 张艾迪(创始人):23岁天才的创业史
  3. 详解最近公共祖先(LCA)
  4. ROS2教程 04 话题Topic
  5. 【30分钟学完】canvas动画|游戏基础(7):动量守恒与多物体碰撞
  6. Boost.Spirit.Karma 自定义directive
  7. 【纪中受难记】——Day5: 改题好烦
  8. 线性代数 --- 线性代数基本定理上(四个基本子空间的维数,行秩=列秩)
  9. 什么是ThreadLocal?ThreadLocal基本使用
  10. java五位随机验证码的实现。要求前四位是随机大小写的字母,最后一位是数字的组合。例如qWrY4