1. 程式人生 > >獲取Android裝置常規引數資訊(SN,IMEI)及定製資訊

獲取Android裝置常規引數資訊(SN,IMEI)及定製資訊

因使用定製Android系統的RFID巴槍
RFID巴槍註冊,使用的是外包裝的序列號,在進入APP需要本地與註冊資訊作校驗.校驗通過才允許使用APP.

1.常規獲取Android裝置資訊.

  • 獲取IMEI號

    • Android裝置可以通過設定介面、撥號*#06# 進行檢視
    • APP通過TelephonyManager獲取對應的DeviceId.即IMEI號.
  • 獲取序列號

    首先,序列號分為多種.裝置序列號,SIM序列號等…

    • Android裝置可以通過設定介面進行檢視
    • APP通過TelephonyManager獲取SimSerialNumber(CDMA裝置,返回可能為"")、或者Build.SERIAL獲取、或者反射呼叫ro.serialno獲取.
//通過反射獲取ro.serialno
public static String getSerialNumber(){

    String serial = null;

    try {

    Class<?> c =Class.forName("android.os.SystemProperties");

       Method get =c.getMethod("get", String.class);

       serial = (String)get.invoke(c, "ro.serialno");

    } catch (Exception e) {

       e.printStackTrace();

    }

    return serial;

}

當裝置被定製過,亦或者以上獲取的序列號都和外包裝/設定資訊裡面的序列號對應不上怎麼辦?

2.獲取常規API無法獲取的Android裝置資訊

注意一下 第三種,通過反射獲取序列號的方法.反射呼叫的是android.os.SystemProperties -> ro.serialno,獲取serial.

那麼是不是也可以通過反射獲取我想要的引數呢,比如說,我這個和其他獲取的序列號對應不上的"序列號".

反射呼叫這個類,那麼必須首先要知道android.os.SystemProperties裡面有哪些方法,儲存著哪些值.

通過執行 adb shell getprop來進行檢視…
emmm…
看看我都看到了什麼?
螢幕解析度,時區資訊


ro.serialno資訊
Android執行記憶體
這眼熟啊,這不就是我想要的 序列號麼
螢幕解析度,ro.serialno,執行記憶體, 這gsm-serialno有點眼熟啊,這特麼不就是我需要的值麼.

既然知道了,通過什麼來獲取對應的值,那就好辦了,只需要把ro.serialno換成gsm-serialno即可,再擷取一下.

3.總結

如果通過公開API獲取Android裝置的常用資訊不能夠滿足需求的話,不妨adb shell prop看看你要的值對應的是哪一個,然後直接通過反射獲取吧.