android獲取裝置和應用資訊
阿新 • • 發佈:2019-02-04
本文將介紹如何獲取當前裝置和應用基本資訊!
建立一個android應用(AndroidTest),所需許可權如下(AndroidManifest.xml檔案):
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
接下來是MainActivity.java檔案:
上述程式碼有足夠多的註釋,本文就不做過多解釋啦!package com.example.androidtest; import org.json.JSONException; import org.json.JSONObject; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Bundle; import android.provider.Settings.Secure; import android.app.Activity; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.telephony.TelephonyManager; import android.telephony.cdma.CdmaCellLocation; import android.telephony.gsm.GsmCellLocation; import android.view.Menu; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getInfo(); } public void getInfo() { try { StringBuilder strLog = new StringBuilder(); Context ctx = this.getApplicationContext(); /** * 1.獲取應用資訊 * * 要想獲取更多應用相關資訊請查閱PackageManager、ApplicationInfo資料 */ // 獲取應用名稱 String appName = getAppName(ctx); strLog.append("應用名稱:" + appName + "\r\n"); // 獲取應用包名稱 String packName = getPackName(ctx); strLog.append("應用包名稱:" + packName + "\r\n"); // 獲取應用版本 String verName = getVerName(ctx, packName); strLog.append("應用版本名稱:" + verName + "\r\n"); // 獲取應用版本號 int verCode = getVerCode(ctx, packName); strLog.append("應用版本號:" + verCode + "\r\n"); /** * 2.獲取裝置資訊 */ // 獲取手機型號 String model = getPhoneModel(); strLog.append("手機型號:" + model + "\r\n"); // 獲取手機號碼 String phoneNum = getLineNum(ctx); strLog.append("手機號碼:" + phoneNum + "\r\n"); // 獲取移動使用者標誌,IMSI String imsi = getSubscriberId(ctx); strLog.append("IMSI:" + imsi + "\r\n"); // 獲取裝置ID String devID = getDeviceID(ctx); strLog.append("裝置ID:" + devID + "\r\n"); // 獲取SIM卡號 String sim = getSim(ctx); strLog.append("SIM卡號:" + sim + "\r\n"); // 獲取基站資訊 SCell cellInfo = getCellInfo(ctx); String strCell = ""; if (cellInfo != null) { strCell = cellInfo.toJSON().toString(); } strLog.append("基站資訊:" + strCell + "\r\n"); // 獲取Mac地址 String mac = getMac(ctx); strLog.append("Mac地址:" + mac + "\r\n"); System.out.println(strLog.toString()); } catch (Exception e) { e.printStackTrace(); } } /** * 獲取應用包名稱 */ public String getPackName(Context ctx) { return ctx.getPackageName(); } /** * 獲取應用版本名稱 */ public String getVerName(Context ctx, String packName) { String verName = ""; try { verName = ctx.getPackageManager().getPackageInfo(packName, 0).versionName; } catch (NameNotFoundException e) { } return verName; } /** * 獲取應用版本號 */ public int getVerCode(Context context, String packName) { int versionCode = 0; try { versionCode = context.getPackageManager().getPackageInfo(packName, 0).versionCode; } catch (NameNotFoundException e) { } return versionCode; } /** * 獲取應用名稱 */ public String getAppName(Context ctx) { String appName = ""; try { PackageManager packManager = ctx.getPackageManager(); ApplicationInfo appInfo = ctx.getApplicationInfo(); appName = (String) packManager.getApplicationLabel(appInfo); } catch (Exception e) { } return appName; } /** * 獲取手機型號 * * android.os.Build提供以下資訊: * String BOARD The name of the underlying board, like "goldfish". * String BRAND The brand (e.g., carrier) the software is customized for, if any. * String DEVICE The name of the industrial design. * String FINGERPRINT A string that uniquely identifies this build. * String HOST * String ID Either a changelist number, or a label like "M4-rc20". * String MODEL The end-user-visible name for the end product. * String PRODUCT The name of the overall product. * String TAGS Comma-separated tags describing the build, like "unsigned,debug". * long TIME * String TYPE The type of build, like "user" or "eng". * String USER */ public String getPhoneModel() { return android.os.Build.MODEL; } /** * 獲取手機號碼,一般獲取不到 * * 用到的許可權: * <uses-permission android:name="android.permission.READ_PHONE_STATE" /> * * 要想獲取更多電話、資料、行動網路相關資訊請查閱TelephonyManager資料 */ public String getLineNum(Context ctx) { String strResult = ""; TelephonyManager telephonyManager = (TelephonyManager) ctx .getSystemService(Context.TELEPHONY_SERVICE); if (telephonyManager != null) { strResult = telephonyManager.getLine1Number(); } return strResult; } /** * 獲取移動使用者標誌,IMSI * * 用到的許可權: * <uses-permission android:name="android.permission.READ_PHONE_STATE" /> */ public String getSubscriberId(Context ctx) { String strResult = ""; TelephonyManager telephonyManager = (TelephonyManager) ctx .getSystemService(Context.TELEPHONY_SERVICE); if (telephonyManager != null) { strResult = telephonyManager.getSubscriberId(); } return strResult; } /** * 獲取裝置ID * * 用到的許可權: * <uses-permission android:name="android.permission.READ_PHONE_STATE" /> */ public String getDeviceID(Context ctx) { String strResult = null; TelephonyManager telephonyManager = (TelephonyManager) ctx .getSystemService(Context.TELEPHONY_SERVICE); if (telephonyManager != null) { strResult = telephonyManager.getDeviceId(); } if (strResult == null) { strResult = Secure.getString(ctx.getContentResolver(), Secure.ANDROID_ID); } return strResult; } /** * 獲取SIM卡號 * * 用到的許可權: * <uses-permission android:name="android.permission.READ_PHONE_STATE" /> */ public String getSim(Context ctx) { String strResult = ""; TelephonyManager telephonyManager = (TelephonyManager) ctx .getSystemService(Context.TELEPHONY_SERVICE); if (telephonyManager != null) { strResult = telephonyManager.getSimSerialNumber(); } return strResult; } /** * 獲取Wifi Mac地址 * * 要想獲取更多Wifi相關資訊請查閱WifiInfo資料 * * 用到的許可權: * <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> */ public String getMac(Context ctx) { WifiManager wifiManager = (WifiManager) ctx .getSystemService(Context.WIFI_SERVICE); if (wifiManager != null) { WifiInfo wi = wifiManager.getConnectionInfo(); return wi.getMacAddress(); } return null; } /** * 獲取基站資訊 * * 用到的許可權: * <uses-permission android:name="android.permission.READ_PHONE_STATE" /> * <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> */ public SCell getCellInfo(Context ctx) { SCell cell = new SCell(); TelephonyManager tm = null; try { tm = (TelephonyManager) ctx .getSystemService(Context.TELEPHONY_SERVICE); } catch (Exception e) { return null; } // IMSI號前面3位460是國家,緊接著後面2位00 02是中國移動,01是中國聯通,03是中國電信。 String IMSI = tm.getSubscriberId(); if (IMSI != null) { if (IMSI.startsWith("46000") || IMSI.startsWith("46002")) { cell.NETWORK_TYPE = "CHINA MOBILE"; GsmCellLocation location = (GsmCellLocation) tm .getCellLocation(); if (location == null) { cell = null; } else { String operator = tm.getNetworkOperator(); if (operator.length() > 4) { int mcc = Integer.parseInt(operator.substring(0, 3)); int mnc = Integer.parseInt(operator.substring(3)); int cid = location.getCid(); int lac = location.getLac(); cell.MCC = mcc; cell.MNC = mnc; cell.LAC = lac; cell.CID = cid; } else { cell = null; } } } else if (IMSI.startsWith("46001")) { cell.NETWORK_TYPE = "CHINA UNICOM"; GsmCellLocation location = (GsmCellLocation) tm .getCellLocation(); if (location == null) { cell = null; } else { String operator = tm.getNetworkOperator(); if (operator.length() > 4) { int mcc = Integer.parseInt(operator.substring(0, 3)); int mnc = Integer.parseInt(operator.substring(3)); int cid = location.getCid(); int lac = location.getLac(); cell.MCC = mcc; cell.MNC = mnc; cell.LAC = lac; cell.CID = cid; } else { cell = null; } } } else if (IMSI.startsWith("46003")) { cell.NETWORK_TYPE = "CHINA TELECOM"; CdmaCellLocation location = (CdmaCellLocation) tm .getCellLocation(); if (location == null) { cell = null; } else { String operator = tm.getNetworkOperator(); if (operator.length() > 4) { int mcc = Integer.parseInt(operator.substring(0, 3)); int mnc = Integer.parseInt(operator.substring(3)); int cid = location.getBaseStationId(); int lac = location.getNetworkId(); cell.MCC = mcc; cell.MNC = mnc; cell.LAC = lac; cell.CID = cid; } else { cell = null; } } } else { // cell.NETWORK_TYPE = "UNDENTIFIED"; cell = null; } } else { cell = null; } return cell; } /** * 基站資訊 */ class SCell { public String NETWORK_TYPE; public int MCC; public int MNC; public int LAC; public int CID; public JSONObject toJSON() throws JSONException { JSONObject json = new JSONObject(); json.put("network_type", NETWORK_TYPE); json.put("mcc", MCC); json.put("MNC", MNC); json.put("LAC", LAC); json.put("CID", CID); return json; } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } }
列印結果如下: