1. 程式人生 > >Android 獲得裝置狀態資訊、Mac地址、IP地址

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