Android获取应用名称、版本号、应用包名称,移动设备ID、MAC地址、基站信息和手机型号等详细信
博客专区 > boonya 的博客 > 博客详情
Android获取应用名称、版本号、应用包名称,移动设备ID、MAC地址、基站信息和手机型号等详细信
boonya 发表于2年前
Android获取应用名称、版本号、应用包名称,移动设备ID、MAC地址、基站信息和手机型号等详细信
  • 发表于 2年前
  • 阅读 922
  • 收藏 5
  • 点赞 0
  • 评论 0

【腾讯云】新注册用户域名抢购1元起>>>   

摘要: Android获取应用名称、版本号、应用包名称,移动设备ID、MAC地址、基站信息和手机型号等详细信在实际应用开发中经常会用到,这里做一个记录。

创建一个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;
    }
   
}

 

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 72
博文 211
码字总数 43922
×
boonya
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: