文档章节

Android获取应用名称、版本号、应用包名称,移动设备ID、MAC地址、基站信息和手机型号等详细信

boonya
 boonya
发布于 2016/07/21 13:47
字数 1203
阅读 2294
收藏 5

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

 

本文转载自:http://www.mobile-open.com/2015/38941.html

boonya
粉丝 76
博文 297
码字总数 50847
作品 0
海淀
高级程序员
私信 提问
Android之日志管理(Log)

##文章大纲 一、为什么要使用日志管理工具 二、日志管理工具实战 三、项目源码下载 ##一、为什么要使用日志管理工具 ###1. 对IT安全至关重要   当您使用强大的日志管理软件自动触发以保护您...

吴晓畅
03/18
0
0
【批处理】批处理脚本实验结果收藏

1.如下脚本是逐级创建a文件夹,b文件夹,c文件夹 @echo offmd abcpause 2.批处理删除文件 @echo offdel /f /q myfile.txtpause 3.批处理(BAT)脚本中如何自动执行adb shell里面的命令 首先创建...

beijing_zbs
2014/10/13
67
0
不需要任何权限获得Android设备的唯一ID

Is there a unique Android device ID? Android设备有没有唯一的id?如果有的话,我怎么通过java代码获得这个id? 我读了stack OverStack上每一个答案,谷歌的开发者博客和Android文档,我认...

TCTW
2017/10/25
154
0
[Android] Android中WIFI开发总结一

WIFI就是一种无线联网技术,常见的是使用无线路由器。那么在这个无线路由器的信号覆盖的范围内都可以采用WIFI连接的方式进行联网。如果无线路由器连接了一个ADSL线路或其他的联网线路,则又被...

枫兮兮
2014/02/20
4.1K
0
一周福利 | 安装OneAPM Android SDK 送你一本你最想读的书!

移动应用遇到的5大问题: 1、 运行过程中出现强制关闭;2、生产环境下出现HTTP错误;3、响应时间过长; 4、 页面元素加载缓、慢卡顿;5、不同地区响应时间有所差异 都是性能惹的祸! 谁说性能...

OneAPM蓝海讯通
2015/11/12
1K
14

没有更多内容

加载失败,请刷新页面

加载更多

Spring Cloud 笔记之Spring cloud config client

观察者模式它的数据的变化是被动的。 观察者模式在java中的实现: package com.hxq.springcloud.springcloudconfigclient;import org.springframework.context.ApplicationListener;i...

xiaoxiao_go
53分钟前
4
0
CentOS7.6中安装使用fcitx框架

内容目录 一、为什么要使用fcitx?二、安装fcitx框架三、安装搜狗输入法 一、为什么要使用fcitx? Gnome3桌面自带的输入法框架为ibus,而在使用ibus时会时不时出现卡顿无法输入的现象。 搜狗和...

技术训练营
今天
4
0
《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
今天
7
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
今天
7
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部