您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關Android中怎么獲取設備狀態信息,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
1 通過build獲取手機硬件信息
運用反射獲取Build信息,然后從build中得到對應字段的值。這種情況適用于獲取所有的build信息。
或者直接調用Build類直接拿里面的字段名,如:android.os.Build.MODEL; // 手機型號 。這是為了獲取單獨某個手機信息的方法,直接調用Build的字段即可拿到對應信息,簡單快捷。
別忘了加權限
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
下面是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. String USER
//運用反射得到build類里的字段 Field[] fields = Build.class.getDeclaredFields(); //遍歷字段名數組 for (Field field : fields) { try { //將字段都設為public可獲取 field.setAccessible(true); //filed.get(null)得到的即是設備信息 haspmap.put(field.getName(), field.get(null).toString()); Log.d("CrashHandler", field.getName() + " : " + field.get(null)); } catch (Exception e) { } }
下面是小米4對應的設備信息
D/CrashHandler: BOARD : MSM8974 D/CrashHandler: BOOTLOADER : unknown D/CrashHandler: BRAND : Xiaomi D/CrashHandler: CPU_ABI : armeabi-v7a D/CrashHandler: CPU_ABI2 : armeabi D/CrashHandler: DEVICE : cancro D/CrashHandler: DISPLAY : MMB29M D/CrashHandler: FINGERPRINT : Xiaomi/cancro_wc_lte/cancro:6.0.1/MMB29M/V8.1.3.0.MXDCNDI:user/release-keys D/CrashHandler: HARDWARE : qcom D/CrashHandler: HOST : c3-miui-ota-bd43 D/CrashHandler: ID : MMB29M D/CrashHandler: IS_DEBUGGABLE : false D/CrashHandler: MANUFACTURER : Xiaomi D/CrashHandler: MODEL : MI 4LTE D/CrashHandler: PRODUCT : cancro_wc_lte D/CrashHandler: RADIO : unknown //設備的序列號碼-SERIAL D/CrashHandler: SERIAL : abcdefgh D/CrashHandler: SUPPORTED_32_BIT_ABIS : [Ljava.lang.String;@76b6d2b D/CrashHandler: SUPPORTED_64_BIT_ABIS : [Ljava.lang.String;@e42c588 D/CrashHandler: SUPPORTED_ABIS : [Ljava.lang.String;@9cdbb21 D/CrashHandler: TAG : Build D/CrashHandler: TAGS : release-keys D/CrashHandler: TIME : 1478606340000 D/CrashHandler: TYPE : user D/CrashHandler: UNKNOWN : unknown D/CrashHandler: USER : builder
2.通過getSystemService()來獲取Ip地址
Context.getSystemService()這個方法是非常實用的方法,只須在參數里輸入一個String 字符串常量就可得到對應的服務管理方法,可以用來獲取絕大部分的系統信息,各個常量對應的含義如下。
WINDOW_SERVICE (“window”)
The top-level window manager in which you can place custom windows. The returned object is a WindowManager.
LAYOUT_INFLATER_SERVICE (“layout_inflater”)
A LayoutInflater for inflating layout resources in this context.
ACTIVITY_SERVICE (“activity”)
A ActivityManager for interacting with the global activity state of the system.
POWER_SERVICE (“power”)
A PowerManager for controlling power management.
ALARM_SERVICE (“alarm”)
A AlarmManager for receiving intents at the time of your choosing.
NOTIFICATION_SERVICE (“notification”)
A NotificationManager for informing the user of background events.
KEYGUARD_SERVICE (“keyguard”)
A KeyguardManager for controlling keyguard.
LOCATION_SERVICE (“location”)
A LocationManager for controlling location (e.g., GPS) updates.
SEARCH_SERVICE (“search”)
A SearchManager for handling search.
VIBRATOR_SERVICE (“vibrator”)
A Vibrator for interacting with the vibrator hardware.
CONNECTIVITY_SERVICE (“connection”)
A ConnectivityManager for handling management of network connections.
WIFI_SERVICE (“wifi”)
A WifiManager for management of Wi-Fi connectivity.
WIFI_P2P_SERVICE (“wifip2p”)
A WifiP2pManager for management of Wi-Fi Direct connectivity.
INPUT_METHOD_SERVICE (“input_method”)
An InputMethodManager for management of input methods.
UI_MODE_SERVICE (“uimode”)
An UiModeManager for controlling UI modes.
DOWNLOAD_SERVICE (“download”)
A DownloadManager for requesting HTTP downloads
BATTERY_SERVICE (“batterymanager”)
A BatteryManager for managing battery state
JOB_SCHEDULER_SERVICE (“taskmanager”)
A JobScheduler for managing scheduled tasks
NETWORK_STATS_SERVICE (“netstats”)
A NetworkStatsManager for querying network usage statistics.
Note: System services obtained via this API may be closely associated with the Context in which they are obtained from. In general, do not share the service objects between various different contexts (Activities, Applications, Services, Providers, etc.)
Parameters
name
The name of the desired service.
Returns
The service or null if the name does not exist.
要獲取IP地址需要用到Context.CONNECTIVITY_SERVICE,這個常量所對應的網絡連接的管理方法。
代碼如下需要權限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
/**獲得IP地址,分為兩種情況,一是wifi下,二是移動網絡下,得到的ip地址是不一樣的*/ public static String getIPAddress() { Context context=MyApp.getContext(); NetworkInfo info = ((ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo(); if (info != null && info.isConnected()) { if (info.getType() == ConnectivityManager.TYPE_MOBILE) {//當前使用2G/3G/4G網絡 try { //Enumeration<NetworkInterface> en=NetworkInterface.getNetworkInterfaces(); for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) { NetworkInterface intf = en.nextElement(); for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) { InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) { return inetAddress.getHostAddress(); } } } } catch (SocketException e) { e.printStackTrace(); } } else if (info.getType() == ConnectivityManager.TYPE_WIFI) {//當前使用無線網絡 WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); //調用方法將int轉換為地址字符串 String ipAddress = intIP2StringIP(wifiInfo.getIpAddress());//得到IPV4地址 return ipAddress; } } else { //當前無網絡連接,請在設置中打開網絡 } return null; } /** * 將得到的int類型的IP轉換為String類型 * @param ip * @return */ public static String intIP2StringIP(int ip) { return (ip & 0xFF) + "." + ((ip >> 8) & 0xFF) + "." + ((ip >> 16) & 0xFF) + "." + (ip >> 24 & 0xFF); }
3.獲得Mac地址
我們知道mac地址是網卡的唯一標識,通過這個可以判斷網絡當前連接的手機設備有幾臺。代碼如下:
public static String getMacAddress(){ /*獲取mac地址有一點需要注意的就是android 6.0版本后,以下注釋方法不再適用,不管任何手機都會返回"02:00:00:00:00:00"這個默認的mac地址,這是googel官方為了加強權限管理而禁用了getSYstemService(Context.WIFI_SERVICE)方法來獲得mac地址。*/ // String macAddress= ""; // WifiManager wifiManager = (WifiManager) MyApp.getContext().getSystemService(Context.WIFI_SERVICE); // WifiInfo wifiInfo = wifiManager.getConnectionInfo(); // macAddress = wifiInfo.getMacAddress(); // return macAddress; String macAddress = null; StringBuffer buf = new StringBuffer(); NetworkInterface networkInterface = null; try { networkInterface = NetworkInterface.getByName("eth2"); if (networkInterface == null) { networkInterface = NetworkInterface.getByName("wlan0"); } if (networkInterface == null) { return "02:00:00:00:00:02"; } byte[] addr = networkInterface.getHardwareAddress(); for (byte b : addr) { buf.append(String.format("%02X:", b)); } if (buf.length() > 0) { buf.deleteCharAt(buf.length() - 1); } macAddress = buf.toString(); } catch (SocketException e) { e.printStackTrace(); return "02:00:00:00:00:02"; } return macAddress; }
4.獲取手機號碼、IMEI碼
/**獲取手機的IMEI號碼*/ public static String getPhoneIMEI() { TelephonyManager mTm = (TelephonyManager) MyApp.getContext().getSystemService(Context.TELEPHONY_SERVICE); String imei = mTm.getDeviceId(); String imsi = mTm.getSubscriberId(); String mtype = android.os.Build.MODEL; // 手機型號 String numer = mTm.getLine1Number(); // 手機號碼,有的可得,有的不可得 return imei; }
上述就是小編為大家分享的Android中怎么獲取設備狀態信息了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。