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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章