Android 获得设备状态信息、Mac地址、IP地址

前言

在我们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

猜你喜欢

转载自blog.csdn.net/q376794191/article/details/85330876