获取Android 手机设备信息:操作系统版本号、手机分辨率、运营商、当前联网方式、IMEI、MEID、MAC地址

包括双卡机型上的两个IMEI信息


/*** Created by Administrator on 2019/5/15.* 手机详细信息*/public class DeviceInfoModel {private static final String TAG = "DeviceInfoModel";private static DeviceInfoModel instance;public DeviceInfoModel() {}public static DeviceInfoModel getInstance() {if (instance == null) {instance = new DeviceInfoModel();}return instance;}/*** 获取机型*/public String getPhoneModel() {
//        TelephonyManager manager= (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
//        String mtype = android.os.Build.MODEL;String brand = android.os.Build.BRAND;//手机品牌String model = android.os.Build.MODEL;//手机型号Log.w(TAG, "手机型号:" + brand + " " + model);return brand + " " + model;}/*** 获取操作系统** @return*/public String getOS() {Log.w(TAG, "操作系统:" + "Android" + android.os.Build.VERSION.RELEASE);return "Android" + android.os.Build.VERSION.RELEASE;}/*** 获取手机分辨率** @param context* @return*/public String getResolution(Context context) {// 方法1 Android获得屏幕的宽和高WindowManager windowManager = ((Activity) context).getWindowManager();Display display = windowManager.getDefaultDisplay();int screenWidth = display.getWidth();int screenHeight = display.getHeight();Log.w(TAG, "分辨率:" + screenWidth + "*" + screenHeight);return screenWidth + "*" + screenHeight;}/*** 获取唯一设备号*/public String getDeviceNo(Context context) {if (!checkReadPhoneStatePermission(context)) {Log.w(TAG, "获取唯一设备号: 无权限");return "";}TelephonyManager TelephonyMgr = (TelephonyManager) context.getSystemService(TELEPHONY_SERVICE);
//        @SuppressLint("HardwareIds") String szImei = TelephonyMgr.getDeviceId();Method method = null;String imei2 = "";try {method = TelephonyMgr.getClass().getMethod("getDeviceId", int.class);String imei1 = TelephonyMgr.getDeviceId();String imei0 = (String) method.invoke(TelephonyMgr, 0);imei2 = (String) method.invoke(TelephonyMgr, 1);String meid = (String) method.invoke(TelephonyMgr, 2);Log.e(TAG, "唯一设备号szImei-0 is  :" + imei0 + "  ---  imei1: " + imei1 + "  ---  imei2: " + imei2 + "   -meid is :" + meid);} catch (NoSuchMethodException e) {e.printStackTrace();Log.w(TAG, "唯一设备号imei-NoSuchMethodException: " + e.getMessage());} catch (IllegalAccessException e) {e.printStackTrace();Log.w(TAG, "唯一设备号imei-IllegalAccessException: " + e.getMessage());} catch (InvocationTargetException e) {e.printStackTrace();Log.w(TAG, "唯一设备号imei-InvocationTargetException: " + e.getMessage());}return imei2;}/*** 获取运营商** @param context* @return*/public String getNetOperator(Context context) {TelephonyManager manager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);String iNumeric = manager.getSimOperator();String netOperator = "";if (iNumeric.length() > 0) {if (iNumeric.equals("46000") || iNumeric.equals("46002")) {// 中国移动netOperator = "中国移动";} else if (iNumeric.equals("46003")) {// 中国电信netOperator = "中国电信";} else if (iNumeric.equals("46001")) {// 中国联通netOperator = "中国联通";} else {//未知netOperator = "未知";}}Log.w(TAG, "运营商:" + netOperator);return netOperator;}/*** 获取联网方式*/public String getNetMode(Context context) {String strNetworkType = "未知";
//        TelephonyManager manager= (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
//        manager.getNetworkType();ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo networkInfo = manager.getActiveNetworkInfo();if (networkInfo != null && networkInfo.isConnected()) {int netMode = networkInfo.getType();if (netMode == ConnectivityManager.TYPE_WIFI) {strNetworkType = "WIFI";//wifi} else if (netMode == ConnectivityManager.TYPE_MOBILE) {int networkType = networkInfo.getSubtype();switch (networkType) {//2gcase TelephonyManager.NETWORK_TYPE_GPRS:case TelephonyManager.NETWORK_TYPE_EDGE:case TelephonyManager.NETWORK_TYPE_CDMA:case TelephonyManager.NETWORK_TYPE_1xRTT:case TelephonyManager.NETWORK_TYPE_IDEN: //api<8 : replace by 11strNetworkType = "2G";break;//3gcase TelephonyManager.NETWORK_TYPE_UMTS:case TelephonyManager.NETWORK_TYPE_EVDO_0:case TelephonyManager.NETWORK_TYPE_EVDO_A:case TelephonyManager.NETWORK_TYPE_HSDPA:case TelephonyManager.NETWORK_TYPE_HSUPA:case TelephonyManager.NETWORK_TYPE_HSPA:case TelephonyManager.NETWORK_TYPE_EVDO_B: //api<9 : replace by 14case TelephonyManager.NETWORK_TYPE_EHRPD:  //api<11 : replace by 12case TelephonyManager.NETWORK_TYPE_HSPAP:  //api<13 : replace by 15strNetworkType = "3G";break;case TelephonyManager.NETWORK_TYPE_LTE:    //api<11 : replace by 13strNetworkType = "4G";break;default:String _strSubTypeName = networkInfo.getSubtypeName();// http://baike.baidu.com/item/TD-SCDMA 中国移动 联通 电信 三种3G制式if (_strSubTypeName.equalsIgnoreCase("TD-SCDMA") || _strSubTypeName.equalsIgnoreCase("WCDMA") || _strSubTypeName.equalsIgnoreCase("CDMA2000")) {strNetworkType = "3G";} else {strNetworkType = _strSubTypeName;}break;}}}Log.w(TAG, "联网方式:" + strNetworkType);return strNetworkType;}private boolean checkReadPhoneStatePermission(Context context) {try {if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE)!= PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.READ_PHONE_STATE},10);return false;}} catch (IllegalArgumentException e) {return false;}return true;}@SuppressLint({"MissingPermission", "HardwareIds"})public String getMEID(Context context) {if (!checkReadPhoneStatePermission(context)) {Log.w(TAG, "获取唯一设备号-getMEID: 无权限");return "";}String meid = "";TelephonyManager mTelephonyMgr = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);if (null != mTelephonyMgr) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {meid = mTelephonyMgr.getMeid();Log.i(TAG, "Android版本大于o-26-优化后的获取---meid:" + meid);} else {meid = mTelephonyMgr.getDeviceId();}}Log.i(TAG, "优化后的获取---meid:" + meid);return meid;}@SuppressLint("MissingPermission")public String getIMEI(Context context) {if (!checkReadPhoneStatePermission(context)) {Log.w(TAG, "获取唯一设备号-getIMEI: 无权限");return "";}String imei1 = "";TelephonyManager mTelephonyMgr = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);if (null != mTelephonyMgr) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {imei1 = mTelephonyMgr.getImei(0);Log.i(TAG, "Android版本大于o-26-优化后的获取---imei-1:" + imei1);} else {try {imei1 = getDoubleImei(mTelephonyMgr, "getDeviceIdGemini", 0);} catch (Exception e) {try {imei1 = getDoubleImei(mTelephonyMgr, "getDeviceId", 0);} catch (Exception e1) {e1.printStackTrace();}Log.e(TAG, "get device id fail: " + e.toString());}}}Log.i(TAG, "优化后的获取---imei1:" + imei1);return imei1;}@SuppressLint("MissingPermission")public String getIMEI2(Context context) {if (!checkReadPhoneStatePermission(context)) {Log.w(TAG, "获取唯一设备号-getIMEI2: 无权限");return "";}String imei2 = "";TelephonyManager mTelephonyMgr = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);if (null != mTelephonyMgr) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {imei2 = mTelephonyMgr.getImei(1);mTelephonyMgr.getMeid();Log.i(TAG, "Android版本大于o-26-优化后的获取---imei-2:" + imei2);} else {try {imei2 = getDoubleImei(mTelephonyMgr, "getDeviceIdGemini", 1);} catch (Exception e) {try {imei2 = getDoubleImei(mTelephonyMgr, "getDeviceId", 1);} catch (Exception ex) {Log.e(TAG, "get device id fail: " + e.toString());}}}}Log.i(TAG, "优化后的获取--- imei2:" + imei2);return imei2;}/*** 获取双卡手机的imei*/private String getDoubleImei(TelephonyManager telephony, String predictedMethodName, int slotID) throws Exception {String inumeric = null;Class<?> telephonyClass = Class.forName(telephony.getClass().getName());Class<?>[] parameter = new Class[1];parameter[0] = int.class;Method getSimID = telephonyClass.getMethod(predictedMethodName, parameter);Object[] obParameter = new Object[1];obParameter[0] = slotID;Object ob_phone = getSimID.invoke(telephony, obParameter);if (ob_phone != null) {inumeric = ob_phone.toString();}return inumeric;}
}

获取Android 手机设备信息:包括机型、操作系统版本号、手机分辨率、运营商、当前联网方式、IMEI、MEID、MAC地址相关推荐

  1. 获取安卓设备信息:机型、系统版本号、分辨率、运营商、联网方式、IMEI、MEID、MAC地址

    获取Android 手机设备信息:操作系统版本号.手机分辨率.运营商.当前联网方式.IMEI.MEID.MAC地址 包括双卡机型上的两个IMEI信息 /*** Created by Pandaon 2 ...

  2. Android 获取设备ID,手机厂商,运营商,联网方式,获取系统语言,获取时区

    权限 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 安卓6.0需动态获取 ...

  3. Flutter获取Android/iOS设备信息

    我们在进行各个系统的原生开发时,都有对应的方法获取设备信息,那么在使用Flutter时如何获取设备相关的相关信息呢? 我们本文就来介绍一个Flutter插件: Flutter Device Info ...

  4. ua获取手机型号_js获取移动端设备信息(IMEM,IMIS,手机型号,系统版本,浏览器信息等)...

    方法一: HTML+  封装好的方法,额外配置,使用指定方法打包才可用 属性: imei: 设备的国际移动设备身份码 imsi: 设备的国际移动用户识别码 model: 设备的型号 vendor: 设 ...

  5. android手机获取手机设备信息

    在有的项目中需要根据特定的手机信息来进行处理,这时就需要我们来获取手机的设备信息了,那首先看看我的测试机的一些基本信息: 那么这些信息怎么获得呢??其实都封装在了TelephonyManager中,我 ...

  6. Android中获取手机设备信息、RAM、ROM存储信息,如宽、高、厂商名、手机品牌

    借鉴:https://www.jianshu.com/p/ca869aa2fd72 今天有两个工具类总结,代码里都有注释,直接看代码. 一.首先第一个,主要获取手机设备信息DeviceInfoUtil ...

  7. Android 手机设备信息获取使用详解

    Android 手机是我们常用的工具之一,买手机之前,手机厂商会提供一些手机参数给我们,那么问题来了,我们该如何获取手机上的参数信息呢? 通过本文你讲了解到获取手机常用信息的基本方法. 获取手机基本信 ...

  8. android 安卓APP获取手机设备信息和手机号码的代码示例

    下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓手机.手机SIM卡确保插入手机里.eclipse ADT和android-sdk开发环境 第一步:新建一个andro ...

  9. android app 手机号码,android 安卓APP获取手机设备信息和手机号码的代码示例 .

    下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓手机.手机SIM卡确保插入手机里.eclipse ADT和android-sdk开发环境 第一步:新建一个andro ...

最新文章

  1. arch linux 下安装 conan permissionError :[Erno 13] Permission denied
  2. java,php,asp,asp.net,ror等几种Web技术对比(第一版本)
  3. K8S部署工具:KubeOperator集群导入
  4. Nuxt.js项目不识别import原因及解决方法
  5. php使用pdf2htmlex,转换 HTML 与 PDF 格式文档的神器
  6. 吴恩达机器学习笔记11-梯度下降法实践2-学习率
  7. Spring 事物传播特性
  8. mybatis_user_guide(5) 动态 SQL
  9. PHP ajax跨域问题最佳解决方案
  10. “两弹一星”元勋年轻时的考卷,连标点符号都找不到错
  11. OpenCV 编程简单介绍(矩阵/图像/视频的基本读写操作)
  12. Create directory命令
  13. 卖零食靠什么产品引流?零食店怎么做引流?
  14. dcdc芯片效率不高的原因_影响DC-DC转换器效率的主要因素
  15. 高通msm8916 gpio笔记(基于设备树)
  16. 树莓派安装网易云音乐amd64(Exagear)
  17. SpringCloud(H版alibaba)之基本框架篇
  18. GitHub忘记用户名和密码如何找回
  19. 自制表情包!android,PicsArt定制专属表情包-PicsArt表情包自制软件下载-乐游网安卓下载...
  20. esrally 如何进行简单的自定义性能测试?

热门文章

  1. A. Rainbow Dash, Fluttershy and Chess Coloring(思维) Codeforces Round #662 (Div. 2)
  2. 使用OneDNS完美解决办公网络优化问题
  3. Android11.0(R) MTK 预置可卸载app恢复出厂不恢复(仿RK方案)
  4. java实现京东云第三方登录
  5. 一个苹果成就了牛顿,一个苹果杀死了图灵。
  6. 读文献--《U-Net: Convolution Networks for Biomedical Image Segmentation 》
  7. 支持向量机(股票)——Python量化
  8. 合同管理模块样板html,可配置合同模板的合同管理系统的制作方法
  9. 方法finalizer()的应用
  10. linux双系统安装