android获取设备和应用信息

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用
创建一个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;  
        }  
      
    }  

标签: 权限 网络 移动网络

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:PHP实现数据分页的通用方法

下一篇:jQuery实现页面滚动时自动加载内容