文档章节

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

boonya
 boonya
发布于 2016/07/21 13:47
字数 1203
阅读 1270
收藏 5
点赞 0
评论 0

创建一个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
粉丝 72
博文 214
码字总数 43922
作品 0
成都
高级程序员
【批处理】批处理脚本实验结果收藏

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

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

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

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

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

枫兮兮
2014/02/20
0
0
Android 项目开发基础再回顾(一)

1,主activity_splash:

眉间雪
07/03
0
0
Android如何区别真机和模拟器

现在的模拟器的功能太强大,从蓝牙,传感器等配件到IMEI,Mac,以及手机硬件信息什么都可以模拟 为了防止用户利用模拟器模仿真机进行刷单,刷流量等恶意操作 需要获取设备返回的一些信息来鉴别...

yizhihaohut
2015/06/03
0
2
基于Android平台的Web服务技术研究

基于Android平台的Web服务技术研究 Android 平台是Google 于2007 年11 月推出的一种智能手机平台,由操作系统、中间件、用户界面、应用软件组成,全面整合的移动"软件栈".诚然,提到Android...

李禾根
2012/10/09
0
2
关于Android中Contact API的讲解

今日学习任务:实现读取手机中所有联系人的主要信息(名称和联系电话),并以ListView显示 涉及的主要内容:1) Contact API的结构和使用方法 2) ContentProvider组件作用,URI概念及使用方法...

大爱rails
2013/07/04
0
0
Android中SQLite应用详解

现在的主流移动设备像Android、iPhone等都使用SQLite作为复杂数据的存储引擎,在我们为移动设备开发应用程序时,也许就要使用到 SQLite来存储我们大量的数据,所以我们就需要掌握移动设备上的...

娶到笨笨
2014/04/23
0
0
Android入门学习_Android获取手机信息

Android开发平台中,可通过TelephonyManager 获取本机号码。 java代码: TelephonyManager phoneMgr=(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE); txtPhoneNumber......

cathleencheng
2011/06/03
0
0
Android之获取手机相关信息

一、Android 获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等) 1、通过PackageManager可获取手机端已安装的apk文件的信息,具体代码如下:...

IT丶小生
2014/02/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

线程安全,底层实现原理和JMM

让多线程下的类安全起来:无状态、加锁、让类不可变、栈封闭(方法封装) 、安全的发布对象(不暴露成员) 死锁 一定发生在多个线程争夺多个资源里的情况下,发生的原因是每个线程拿到了某个(某...

这很耳东先生
5分钟前
0
0
MyBatis源码解读之延迟加载

1. 目的 本文主要解读MyBatis 延迟加载实现原理 2. 延迟加载如何使用 Setting 参数配置 设置参数 描述 有效值 默认值 lazyLoadingEnabled 延迟加载的全局开关。当开启时,所有关联对象都会延...

无忌
11分钟前
0
0
javascript 类变量的实现

代码如下: function echo(){ for(let i=0;i<arguments.length;i++) console.log(arguments[i]);}function extend(o, p){for (prop in p) {o[prop] = p[prop]}retur......

backbye
15分钟前
0
2
编程语言对比分析:Python与Java和JavaScript(图)

编程语言对比分析:Python与Java和JavaScript(图): 凭什么说“Python 太慢,Java 太笨拙,我讨厌 JavaScript”?[图] 编程语言生而为何? 我们人类从原始社会就是用语言表达自己,互相沟通...

原创小博客
23分钟前
0
0
Akka构建Reactive应用《one》

看到这Akka的官网,描述使用java或者scala构建响应式,并发和分布式应用更加简单,听着很高级的样子,下面的小字写着消息驱动,但是在quickstart里面又写容错事件驱动,就是这么钻牛角尖。 ...

woshixin
35分钟前
0
0
ffmpeg源码分析 (四)

io_open 承接上一篇,对于avformat_open_input的分析还差其中非常重要的一步,就是io_open,该函数用于打开FFmpeg的输入输出文件。 在init_input中有这么一句 if ((ret = s->io_open(s, &s-...

街角的小丑
37分钟前
0
0
String,StringBuffer ,StringBuilder的区别

不同点 一、基类不同 StringBuffer、StringBuilder 都继承自AbStractStringBuilder,String 直接继承自 Object 2、底层容器“不同” 虽然底层都是字符数组,但是String的是final修饰的不可变...

不开心的时候不要学习
52分钟前
0
0
nodejs 文件操作

写文件code // 加载文件模块var fs = require("fs");var content = 'Hello World, 你好世界!';//params 文件名,内容,编码,回调fs.writeFile('./hello.txt',content,'utf8',function (er......

yanhl
54分钟前
0
0
SpringBoot mybits 查询为0条数据 但是在Navicat 中可以查询到数据

1.页面请求: 数据库查询: 2018-07-16 17:56:25.054 DEBUG 17312 --- [nio-9010-exec-3] c.s.h.m.C.selectSelective : ==> Preparing: select id, card_number, customer_id, customer_nam......

kuchawyz
今天
0
0
译:Self-Modifying cod 和cacheflush

date: 2014-11-26 09:53 翻译自: http://community.arm.com/groups/processors/blog/2010/02/17/caches-and-self-modifying-code Cache处在CPU核心与内存存储器之间,它给我们的感觉是,它具......

我叫半桶水
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部