前言

在我们APP开发时,经常会遇到要获取手机状态信息的场景,像升级时获取版本号,像发生异常时要收集手机信息等等。有些软件还要根据Mac地址来判定当前用户以前是否登录过。也有些需要通过不同的IMEI对APP进行管理。下面将一一介绍获取这些手机状态信息的方法。

1.获得Mac地址

我们知道mac地址是网卡的唯一标识,通过这个可以判断网络当前连接的手机设备有几台,MAC的文件路径 是/sys/class/net/wlan0/address,我们可以通过adb shell 的cat命令来查询。代码如下:

private String getMac() {String macSerial = null;String str = "";try{Process pp = Runtime.getRuntime().exec("cat /sys/class/net/wlan0/address ");InputStreamReader ir = new InputStreamReader(pp.getInputStream());LineNumberReader input = new LineNumberReader(ir);for (; null != str;){str = input.readLine();if (str != null){macSerial = str.trim();// 去空格break;}}} catch (IOException ex) {// 赋予默认值ex.printStackTrace();}return macSerial;}

2.获取手机IMEI码

这个需要添加读写权限

 <uses-permission android:name="android.permission.READ_PHONE_STATE" />
public static String getPhoneIMEI(Context context) {TelephonyManager mTm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);String imei = mTm.getDeviceId();return imei;}

3、重头大戏–通过build获取手机硬件信息

  1. 运用反射获取Build信息,然后从build中得到对应字段的值。这种情况适用于获取所有的build信息。
  2. 或者直接调用Build类直接拿里面的字段名,如:android.os.Build.MODEL; // 手机型号
    。这是为了获取单独某个手机信息的方法,直接调用Build的字段即可拿到对应信息,简单快捷。
  3. 别忘了加权限 ,也是读写权限和MAC的一样
 public void getBuildInfo(){Field[] fields = Build.class.getDeclaredFields();//遍历字段名数组for (Field field : fields) {try {//将字段都设为public可获取field.setAccessible(true);//filed.get(null)得到的即是设备信息Log.d("MainActivity", field.getName() + " : " + field.get(null));} catch (Exception e) {}}}

这样就Log一些设备相关的信息了,我们来看一下官方提供的Build字段所对应的信息

String  BOARD       The name of the underlying board, like "goldfish".基板名
String  BOOTLOADER  The system bootloader version number.
String  BRAND       The brand (e.g., carrier) the software is customized for, if any.品牌名
String  CPU_ABI     The name of the instruction set (CPU type + ABI convention) of native code.
String  CPU_ABI2    The name of the second instruction set (CPU type + ABI convention) of native code.
String  DEVICE      The name of the industrial design.品牌型号名,如小米4对应cancro
String  DISPLAY     A build ID string meant for displaying to the user
String  FINGERPRINT A string that uniquely identifies this build.包含制造商,设备名,系统版本等诸多信息
String  HARDWARE    The name of the hardware (from the kernel command line or /proc).
String  HOST
String  ID          Either  a changelist number, or a label like "M4-rc20".
String  MANUFACTURER    The manufacturer of the product/hardware.
String  MODEL       The end-user-visible name for the end product.
String  PRODUCT     The name of the overall product.
String  RADIO       The radio firmware version number.
String  SERIAL      A hardware serial number, if available.
String  TAGS        Comma-separated tags describing the build, like "unsigned,debug".
long    TIME        当前时间,毫秒值
String  TYPE        The type of build, like "user" or "eng".
String  UNKNOWN     Value used for when a build property is unknown.

下面是博主自己的MIX2手机对应Log的信息

12-28 19:59:44.954 23123-23123/com.example.administrator.pdademo D/MainActivity: BOARD : msm8998
12-28 19:59:44.954 23123-23123/com.example.administrator.pdademo D/MainActivity: BOOTLOADER : unknown
12-28 19:59:44.954 23123-23123/com.example.administrator.pdademo D/MainActivity: BRAND : Xiaomi
12-28 19:59:44.954 23123-23123/com.example.administrator.pdademo D/MainActivity: CPU_ABI : arm64-v8a
12-28 19:59:44.954 23123-23123/com.example.administrator.pdademo D/MainActivity: CPU_ABI2 :
12-28 19:59:44.954 23123-23123/com.example.administrator.pdademo D/MainActivity: DEVICE : chiron
12-28 19:59:44.954 23123-23123/com.example.administrator.pdademo D/MainActivity: DISPLAY : OPR1.170623.027
12-28 19:59:44.954 23123-23123/com.example.administrator.pdademo D/MainActivity: FINGERPRINT : Xiaomi/chiron/chiron:8.0.0/OPR1.170623.027/V10.0.1.0.ODECNFH:user/release-keys
12-28 19:59:44.954 23123-23123/com.example.administrator.pdademo D/MainActivity: HARDWARE : qcom
12-28 19:59:44.954 23123-23123/com.example.administrator.pdademo D/MainActivity: HOST : c3-miui-ota-bd113.bj
12-28 19:59:44.954 23123-23123/com.example.administrator.pdademo D/MainActivity: ID : OPR1.170623.027
12-28 19:59:44.954 23123-23123/com.example.administrator.pdademo D/MainActivity: IS_CONTAINER : false
12-28 19:59:44.954 23123-23123/com.example.administrator.pdademo D/MainActivity: IS_DEBUGGABLE : false
12-28 19:59:44.954 23123-23123/com.example.administrator.pdademo D/MainActivity: IS_EMULATOR : false
12-28 19:59:44.954 23123-23123/com.example.administrator.pdademo D/MainActivity: IS_ENG : false
12-28 19:59:44.954 23123-23123/com.example.administrator.pdademo D/MainActivity: IS_TREBLE_ENABLED : false
12-28 19:59:44.954 23123-23123/com.example.administrator.pdademo D/MainActivity: IS_USER : true
12-28 19:59:44.954 23123-23123/com.example.administrator.pdademo D/MainActivity: IS_USERDEBUG : false
12-28 19:59:44.954 23123-23123/com.example.administrator.pdademo D/MainActivity: MANUFACTURER : Xiaomi
12-28 19:59:44.954 23123-23123/com.example.administrator.pdademo D/MainActivity: MODEL : MIX 2
12-28 19:59:44.954 23123-23123/com.example.administrator.pdademo D/MainActivity: PERMISSIONS_REVIEW_REQUIRED : false
12-28 19:59:44.955 23123-23123/com.example.administrator.pdademo D/MainActivity: PRODUCT : chiron
12-28 19:59:44.955 23123-23123/com.example.administrator.pdademo D/MainActivity: RADIO : unknown
12-28 19:59:44.955 23123-23123/com.example.administrator.pdademo D/MainActivity: SERIAL : aa59c05
12-28 19:59:44.955 23123-23123/com.example.administrator.pdademo D/MainActivity: SUPPORTED_32_BIT_ABIS : [Ljava.lang.String;@b27b08f
12-28 19:59:44.955 23123-23123/com.example.administrator.pdademo D/MainActivity: SUPPORTED_64_BIT_ABIS : [Ljava.lang.String;@54bef1c
12-28 19:59:44.955 23123-23123/com.example.administrator.pdademo D/MainActivity: SUPPORTED_ABIS : [Ljava.lang.String;@fd78725
12-28 19:59:44.955 23123-23123/com.example.administrator.pdademo D/MainActivity: TAG : Build
12-28 19:59:44.955 23123-23123/com.example.administrator.pdademo D/MainActivity: TAGS : release-keys
12-28 19:59:44.955 23123-23123/com.example.administrator.pdademo D/MainActivity: TIME : 1535024469000
12-28 19:59:44.955 23123-23123/com.example.administrator.pdademo D/MainActivity: TYPE : user
12-28 19:59:44.956 23123-23123/com.example.administrator.pdademo D/MainActivity: UNKNOWN : unknown
12-28 19:59:44.956 23123-23123/com.example.administrator.pdademo D/MainActivity: USER : builder

4、最后再补充一个关于ADB的命令也可以获取相关信息

那便是adb shell getprop 我在Android studio中Log一下,大家也可以连接手机然后使用cmd打开命令窗口输入adb shell getprop获取到。如下:


这里我只截取了一部分,大家可以尝试一下。再里面根据关键字找自己所需要的信息,如果觉得难找也可以复制到文本中Ctrl+F就OK了。
这里我提一点IMEI的关键字也就是KEY是gsm.phone.imei

Android 获得设备状态信息、Mac地址、IP地址相关推荐

  1. android获取设备eth0,eth1,wlan0的IP地址

    在做一些跟网络相关的需求时,很多时候需要获取到相关网络类型的IP地址,如下图: 这个时候用什么方法来获取这个IP地址呢?楼主在之前的开发中,找到了以下方法,代码如下,仅供参考: /*** Get Ip ...

  2. Android获取设备各项信息(设备id、ip地址、设备名称、运行商、品牌、型号、分辨率、处理器、国家码、系统语言、网络类型、oaid、android版本、操作系统版本、mac地址、应用程序签名..)

    Android获取设备各项信息(设备id.ip地址.APP应用名称.设备名称.运行商.品牌.型号.分辨率.处理器.国家码.系统语言.网络类型.oaid.android版本.操作系统版本.mac地址.应 ...

  3. 【计算机网络 1.网络报文的传递 MAC与IP地址的用处】

    首先我们先抛出一个问题"有了 IP 地址,为什么还要用 MAC 地址"? 估计很多人都有这个疑问,但没见哪本书上解释清楚,都只是描述IP是什么,MAC是什么.当数据包到达局域网后, ...

  4. android设备如何苹果,Android安卓设备如何连接Mac的方法

    Android安卓设备如何连接Mac的方法 本篇文章主要给大家总结了安卓设备连接MAC电脑的方法以及中间遇到连接问题以后的处理办法. 平时大家用到最多的就是安卓手机和苹果电脑互连,由于安卓系统应用广泛 ...

  5. qt准确获取本机mac和ip地址

    前言 公司服务器有多个mac地址,是用网上的代码获取时总是不准确,只能自己封装一下.qt通过QNetworkInterface类来获取网络接口的各种信息,我是通过解析QNetworkInterface ...

  6. 华为ensp模拟器实验:端口安全绑定MAC地址ip地址

    端口安全,交换机会通过MAC地址表记录连接到交换机端口的以太网MAC地址,并只允许某个MAC地址通过本端口通信.使用端口安全特性可以防止未经允许的设备访问网络,并增强安全性.另外,端口安全特性也可用于 ...

  7. Linux查看Mac和IP地址

    1.ifconfig  可查看ip和Mac 可以查看所有激活的网卡信息,其中包括Mac和IP地址 [root@loaclhost /]# ifconfig 2.ifconfig -a|grep 10  ...

  8. 从dhcpd.lease中提取MAC和IP地址

    http://coolerfeng.blog.51cto.com/133059/58773 原创作品,允许转载,转载时请务必以超链接形式标明文章  原始出处 .作者信息和本声明.否则将追究法律责任. ...

  9. 怎样才能快速批量绑定MAC与IP地址(图)

    怎样才能快速批量绑定MAC与IP地址(图) 一.问题的提出 校园网建成后,要求在服务器端把网内各工作站的MAC地址和分配的静态IP地址进行绑定,以方便统一管理,减小安全隐患.无论是在终端获取MAC地址 ...

  10. Android 手机上获取手机当前上网IP地址(手机网关给手机号分配的IP)

    Android 手机上获取手机当前上网IP地址 (手机网关给手机号分配的IP) 每个手机上网通过移动网关的时候,网关都会给该手机号分配一个IP地址(当然这个IP地址会在下线上线后会改变,网关都有记录的 ...

最新文章

  1. Spring Boot 异步请求和异步调用
  2. 黑苹果闪屏解决方法_脖子黑可以用什么方法解决,专家讲解
  3. Next.js 7发布,构建速度提升40%
  4. 一个子数组最大值的问题
  5. php ci session获取值,CI3.1 Session类取不到值的问题
  6. postgresql成本因子调整
  7. 【华为大咖分享】5.交付在云端-全云DevOps研发实践(后附PPT下载地址)
  8. 一直跳出来 visual_六天时间排出来肾结石,这种经历再也不要了
  9. python书籍推荐-Python爬虫开发与项目实战
  10. 在linux系统下用rpm查看安装信息,rpm的查询命令
  11. 【codevs4228】小猫爬山(最优化剪枝)
  12. 计算机应用中英文缩写ai表示,2010黑龙江省全国计算机等级考试二级VB笔试试卷及参考答案考试重点和考试技巧...
  13. 如何使用微软官方工具MediaCreationTool来制作Windows10启动盘
  14. 国家缩写大全 mysql_所有国家英文缩写
  15. 探讨:Mac真的有必要安装双系统吗
  16. secureCRT 设置背景色等操作
  17. python爬取歌曲教程_歌曲网站,教你爬取 mp3 和 lyric
  18. hmmbuild结果文件解读:hmm文件
  19. rpc服务器不可用然后无限重启,系统同步更新失败提示RPC服务器不可用怎么办
  20. spark 学习(二) RDD及共享变量

热门文章

  1. 像计算机科学家那样思考,如何像计算机科学家一样思考?(C语言篇)
  2. 账结法”、“表结法”两种财务会计处理方法
  3. java回溯_java实现回溯算法
  4. buu RSA what(共模攻击+base64隐写)
  5. Vue概述和各种前端框架
  6. 有道词典java下载电脑版下载不了_有道词典电脑版
  7. r语言boxcox异方差_R教程-15:线性回归中的异方差
  8. 二叉树的深度遍历和广度遍历
  9. apk双开多开分身术的原理
  10. 北京理工大学计算机学院ppt,北京理工大学计算机学院2015级4班德育开题展示报告.ppt...