獲取Android裝置常規引數資訊(SN,IMEI)及定製資訊
阿新 • • 發佈:2019-01-06
因使用定製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,執行記憶體, 這gsm-serialno有點眼熟啊,這特麼不就是我需要的值麼.
既然知道了,通過什麼來獲取對應的值,那就好辦了,只需要把ro.serialno換成gsm-serialno即可,再擷取一下.
3.總結
如果通過公開API獲取Android裝置的常用資訊不能夠滿足需求的話,不妨adb shell prop看看你要的值對應的是哪一個,然後直接通過反射獲取吧.