App应用系统基本信息工具类

简介: App应用系统基本信息工具类
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
import java.util.Locale;
import android.app.Activity;
import android.content.Context;
import android.graphics.BitmapFactory;
import android.os.Vibrator;
import android.telephony.CellLocation;
import android.telephony.TelephonyManager;
import android.util.DisplayMetrics;
import android.view.WindowManager;
/**
 * 主要功能: 获取App应用系统基本信息
 */
@SuppressWarnings("deprecation")
public class AppSysMgr {
public static final int DEFAULT_THREAD_POOL_SIZE = getSysDefaultThreadPoolSize();
/**
     * 获得客户端操作系统名称
     * @return
     */
    public static String getSysClientOs() {
        String OsName = android.os.Build.ID;
        return OsName;
    }
/**
* 获取当前操作系统的sdk版本
* @return String 系统SDK版本
*/
public static String getSysSdk() {
   String sdkVersion = android.os.Build.VERSION.SDK;
   AppLogMessageMgr.i("AppSysMgr-->>getSysLanguage", sdkVersion);
   return sdkVersion;
}
/**
* 获取当前操作系统的语言
* @return String 系统语言
*/
public static String getSysLanguage() {
String language = Locale.getDefault().getLanguage();
AppLogMessageMgr.i("AppSysMgr-->>getSysLanguage",  language);
return language;
}
/**
* 获取手机型号
* @return String 手机型号
*/
public static String getSysModel() {
String model = android.os.Build.MODEL;
AppLogMessageMgr.i("AppSysMgr-->>getSysModel",  model);
return model;
}
/**
* 获取操作系统的版本号
* @return String 系统版本号
*/
public static String getSysRelease() {
String release = android.os.Build.VERSION.RELEASE;
AppLogMessageMgr.i("AppSysMgr-->>getSysRelease",  release);
return release;
}
/**
* 读取SIM卡序列号
* @param content 上下文
* @return String SIM卡序列号
*/
public static String getSysSIMSerialNum(Context content) {
String simSerialNumber = getSysTelephonyManager(content).getSimSerialNumber();
AppLogMessageMgr.i("AppSysMgr-->>getSysSIMSerialNum",  simSerialNumber);
return simSerialNumber;
}
    /**
     * 获取手机CPU序列号
     * @return String cpu序列号(16位) 读取失败为"0000000000000000"  
     */
    public static String getSysCPUSerialNum() {
        String str = "", strCPU = "", cpuSerialNum = "0000000000000000";
        try {
            //读取CPU信息
            Process pp = Runtime.getRuntime().exec("cat/proc/cpuinfo");
            InputStreamReader ir = new InputStreamReader(pp.getInputStream());
            LineNumberReader input = new LineNumberReader(ir);
            //查找CPU序列号
            for (int i = 1; i < 100; i++) {
                str = input.readLine();
                if (str != null) {
                    //查找到序列号所在行
                    if (str.indexOf("Serial") > -1) {
                        //提取序列号
                        strCPU = str.substring(str.indexOf(":") + 1,
                        str.length());
                        //去空格
                        cpuSerialNum = strCPU.trim();
                        break;
                    }
                }else{
                    break;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
            AppLogMessageMgr.e("AppSysMgr-->>getSysCPUSerialNum",  e.getMessage().toString());
        }
        return cpuSerialNum;
    }
/**
* 获得电话管理实例对象
* @param content  上下文
* @return TelephonyManager 电话管理实例对象
*/
private static TelephonyManager getSysTelephonyManager(Context content) {
TelephonyManager telephonyManager = null;
telephonyManager = (TelephonyManager) content.getSystemService(Context.TELEPHONY_SERVICE);
AppLogMessageMgr.i("AppSysMgr-->>getSysTelephonyManager",  telephonyManager + "");
return telephonyManager;
}
/**
* 读唯一的设备ID(唯一的设备ID【GSM手机的IMEI】和【CDMA手机的 MEID】,如果获取不到返回一个默认字符串)
* @param content 上下文
* @return String 获取设备序列号
*/
public static String getSysTelephoneSerialNum(Context content) {
String deviceId = getSysTelephonyManager(content).getDeviceId();
AppLogMessageMgr.i("AppSysMgr-->>getSysTelephoneSerialNum",  deviceId + "");
return deviceId;
}
/**
* 获取运营商信息(三大运营商)
* @param content 上下文
* @return String 获取运营商名称
*/
public static String getSysCarrier(Context content) {
String moblieType = "";
TelephonyManager telephonyManager = (TelephonyManager) content.getSystemService(Context.TELEPHONY_SERVICE);
String imsi = telephonyManager.getSubscriberId();
if (imsi != null && imsi.length() > 0) {
//因为移动网络编号46000下的IMSI已经用完,所以虚拟了一个46002编号,134/159号段使用了此编号
if (imsi.startsWith("46000") || imsi.startsWith("46002")) {
//中国移动
moblieType = "China Mobile";
} else if (imsi.startsWith("46001")) {
//中国联通
moblieType = "China Unicom";
} else if (imsi.startsWith("46003")) {
//中国电信
moblieType = "China Telecom";
}
}
AppLogMessageMgr.i("AppSysMgr-->>getSysCarrier",  moblieType);
return moblieType;
}
/**
* 获取手机状态(0:无活动 1:响铃 2:待机)
* @param  context 上下文
* @return Integer 手机状态
*/
public static Integer getSysPhoneState(Context context) {
Integer callState = getSysTelephonyManager(context).getCallState();
AppLogMessageMgr.i("AppSysMgr-->>getSysPhoneState",  callState + "");
return callState;
}
/**
* 获得手机方位
* @param context 上下文
* @return CellLocation 手机方位
*/
public static CellLocation getSysPhoneLoaction(Context context) {
CellLocation cellLocation = getSysTelephonyManager(context).getCellLocation();
AppLogMessageMgr.i("AppSysMgr-->>getSysPhoneLoaction",  cellLocation + "");
return cellLocation;
}
/**
* 获得设备的软件版本号(注:the IMEI/SV(software version) for GSM phones 不支持返回“not available”)
* @param context 上下文
* @return String 设备软件版本号
*/
public static String getSysDeviceSoftVersion(Context context) {
String deviceSoftwareVersion = getSysTelephonyManager(context).getDeviceSoftwareVersion();
AppLogMessageMgr.i("AppSysMgr-->>getSysDeviceSoftVersion",  deviceSoftwareVersion + "");
return deviceSoftwareVersion;
}
/**
* 获得手机号
* @param context 上下文
* @return String 手机号
*/
public static String getSysPhoneNumber(Context context) {
String phoneNumber = getSysTelephonyManager(context).getLine1Number();
AppLogMessageMgr.i("AppSysMgr-->>getSysPhoneNumber",  phoneNumber + "");
return phoneNumber;
}
/**
* 获得SIM卡提供的移动国家码和移动网络码.5或6位的十进制数字。(注:SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断))
* @param context 上下文
* @return String SIM移动国家编码和移动网络编码
*/
public static String getSysSimCode(Context context) {
String code = "";
if (getSysTelephonyManager(context).getSimState() == 5) {
code = getSysTelephonyManager(context).getSimOperator();
}
AppLogMessageMgr.i("AppSysMgr-->>getSysSimCode",  code + "");
return code;
}
/**
* 服务商名称(注:例如:中国移动、联通SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断)).
* @param context 上下文
* @return String 服务商名称
*/
public static String getSysSimPrivatorName(Context context) {
String simOperatorName = "";
if (getSysTelephonyManager(context).getSimState() == 5) {
simOperatorName = getSysTelephonyManager(context).getSimOperatorName();
}
AppLogMessageMgr.i("AppSysMgr-->>getSysSimPrivatorName",  simOperatorName);
return simOperatorName;
}
/**
* 唯一的用户ID (注:例如:IMSI(国际移动用户识别码) for a GSM phone. 需要权限:READ_PHONE_STATE)
* @param context 上下文
* @return String 获取国际移动用户GSM识别码
*/
public static String getSysUserPhoneId(Context context) {
String subscriberId = getSysTelephonyManager(context).getSubscriberId();
AppLogMessageMgr.i("AppSysMgr-->>getSysUserPhoneId",  subscriberId);
return subscriberId;
}
/**
* 获取WindowManager对象
* @param context 上下文对象
* @return WindowManager
*/
public static WindowManager getWindowManager(Context context){
return (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
}
/**
* 获取屏幕管理类
* @param activity activity对象
* @return DisplayMetrics 屏幕管理实例
*/
public static DisplayMetrics getSysDisplayMetrics(Activity activity) {
DisplayMetrics displayMetrics = null;
if (displayMetrics == null) {
displayMetrics = new DisplayMetrics();
}
activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
AppLogMessageMgr.i("AppSysMgr-->>getSysDisplayMetrics",  "获取屏幕管理对象为:" + displayMetrics);
return displayMetrics;
}
/**
* 获取屏幕宽度和高度并返回数组
     * @param  context 上下文对象
     * @return int[] 宽和高
*/
public static int[] getScreenDispaly(Context context) {
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
//手机屏幕的宽度
int width = wm.getDefaultDisplay().getWidth();
//手机屏幕的高度
int height = wm.getDefaultDisplay().getHeight();
AppLogMessageMgr.i("AppSysMgr-->>getScreenDispaly-->>width",  "获取屏幕宽度为:" + width);
AppLogMessageMgr.i("AppSysMgr-->>getScreenDispaly-->>height",  "获取屏幕高度为:" + height);
int result[] = { width, height };
return result;
}
/**
* 获取屏幕宽度和高度并返回数组
     * @param  context 上下文对象
     * @return int[] 宽和高
*/
    public static int[] getScreenDispaly8(Context context) {
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
//手机屏幕的宽度
int width = wm.getDefaultDisplay().getWidth() /10 * 8;
//手机屏幕的高度
int height = wm.getDefaultDisplay().getHeight() /10 * 8;
AppLogMessageMgr.i("AppSysMgr-->>getScreenDispaly-->>width",  "获取屏幕宽度为:" + width);
AppLogMessageMgr.i("AppSysMgr-->>getScreenDispaly-->>height",  "获取屏幕高度为:" + height);
int result[] = { width, height };
return result;
}
/**
* 获取屏幕宽度
     * @param  context 上下文对象
     * @return Integer 屏幕宽度
*/
    public static Integer getSysScreenWidth(Context context) {  
        WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);  
        DisplayMetrics displayMetrics = new DisplayMetrics();  
        wm.getDefaultDisplay().getMetrics(displayMetrics);  
        AppLogMessageMgr.i("AppSysMgr-->>getSysScreenWidth",  "获取屏幕宽度为:" + displayMetrics.widthPixels);
        return displayMetrics.widthPixels;  
    }  
/**
* 获取屏幕高度
     * @param  context 上下文对象
     * @return Integer 屏幕高度
*/
    public static Integer getSysScreenHeight(Context context)  {  
        WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);  
        DisplayMetrics displayMetrics = new DisplayMetrics();  
        wm.getDefaultDisplay().getMetrics(displayMetrics);  
        AppLogMessageMgr.i("AppSysMgr-->>getSysScreenHeight",  "获取屏幕高度为:" + displayMetrics.heightPixels);
        return displayMetrics.heightPixels;  
    }  
    /**
     * 获取屏幕状态栏目高度
     * @param  context 上下文对象
     * @return Integer 状态栏高度
     */
    public static Integer getSysScreenStatusHeight(Context context)  {  
        int statusHeight = 0;  
        try {  
            Class<?> clazz = Class.forName("com.android.internal.R$dimen");  
            Object object = clazz.newInstance();  
            int height = Integer.parseInt(clazz.getField("status_bar_height").get(object).toString());  
            statusHeight = context.getResources().getDimensionPixelSize(height);  
            AppLogMessageMgr.i("AppSysMgr-->>getSysScreenStatusHeight",  "获取屏幕状态栏高度为:" + statusHeight);
        } catch (Exception e) {  
            e.printStackTrace();  
            AppLogMessageMgr.e("AppSysMgr-->>getSysScreenStatusHeight",  "获取屏幕状态栏高度失败!" + e.getMessage());
        }  
        return statusHeight;  
    } 
/**
* 获得系统配置相符的线程池大小
* @return Integer 返回系统配置相符合线程大小
*/
public static Integer getSysDefaultThreadPoolSize() {
Integer availableProcessors = 2 * Runtime.getRuntime().availableProcessors() + 1;
availableProcessors = availableProcessors > 8 ? 8 : availableProcessors;
AppLogMessageMgr.i("AppSysMgr-->>getSysDefaultThreadPoolSize",  availableProcessors + "");
return availableProcessors;
}
/**
* 获取当前APP应用的SampleSize大小
* @param options BitmapFactory.Options对象
* @param minSideLength  计算最小值
* @param maxNumOfPixels 计算最大值
* @return Integer  返回SampleSize大小
*/
    public static Integer getSysSampleSize(BitmapFactory.Options options, int minSideLength, int maxNumOfPixels) {  
    Integer initialSize = calculateSysInitialSampleSize(options, minSideLength, maxNumOfPixels);  
    Integer roundedSize;  
        if (initialSize <= 8 ) {  
            roundedSize = 1;  
            while (roundedSize < initialSize) {  
                roundedSize <<= 1;  
            }  
        }else{  
        roundedSize = (initialSize + 7) / 8 * 8;  
        }  
        AppLogMessageMgr.i("AppSysMgr-->>getSysSampleSize",  roundedSize + "");
        return roundedSize;  
    }  
    /**
     * 计算公式
     * @param options BitmapFactory.Options对象
* @param minSideLength  计算最小值
* @param maxNumOfPixels 计算最大值
     * @return Integer   
     */
    private static Integer calculateSysInitialSampleSize(BitmapFactory.Options options,int minSideLength, int maxNumOfPixels) {  
        double w = options.outWidth;  
        double h = options.outHeight;  
        Integer lowerBound = (maxNumOfPixels == -1) ? 1 :  (int) Math.ceil(Math.sqrt(w * h / maxNumOfPixels));  
        Integer upperBound = (minSideLength == -1) ? 128 : (int) Math.min(Math.floor(w / minSideLength), Math.floor(h / minSideLength));  
        if (upperBound < lowerBound) {  
            return lowerBound;  
        }  
        if ((maxNumOfPixels == -1) && (minSideLength == -1)) {  
            return 1;  
        } else if (minSideLength == -1) {  
            return lowerBound;  
        } else {  
            return upperBound;  
        }  
    }
    /**
     * 获取震动器对象
     * @param context 上下文对象
     * @return Vibrator 震动器对象
     */
    public static Vibrator getVibrator(Context context){
    return (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
    }
    /**
     * 获取手机IP地址
     * @return String 手机IP地址
     */
    public String getSysLocalIpAddress() {
    String hostAddress = null;
        try {
            for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
                NetworkInterface intf = en.nextElement();
                for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                    InetAddress inetAddress = enumIpAddr.nextElement();
                    if (!inetAddress.isLoopbackAddress()) {
                    hostAddress = inetAddress.getHostAddress();
                    }
                }
            }
        } catch (SocketException e) {
        e.printStackTrace();
        AppLogMessageMgr.e("AppSysMgr-->>getSysLocalIpAddress",  e.getMessage().toString());
        }
        AppLogMessageMgr.i("AppSysMgr-->>getSysLocalIpAddress",  hostAddress);
        return hostAddress;
    }
}



最后附上所有工具类的下载链接:

http://download.csdn.net/detail/u014727709/9697759



欢迎start,欢迎评论,欢迎指正



相关文章
|
1天前
|
供应链 搜索推荐 API
1688APP原数据API接口的开发、应用与收益(一篇文章全明白)
1688作为全球知名的B2B电商平台,通过开放的原数据API接口,为开发者提供了丰富的数据资源,涵盖商品信息、交易数据、店铺信息、物流信息和用户信息等。本文将深入探讨1688 APP原数据API接口的开发、应用及其带来的商业收益,包括提升流量、优化库存管理、增强用户体验等方面。
17 6
|
2天前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
21 3
|
8天前
|
移动开发 小程序 PHP
校园圈子论坛系统采取的PHP语音和uni账号开发的小程序APP公众号H5是否只需要4800元?是的,就是只需要4800元
关于校园圈子论坛系统采用PHP语言和uni-app开发的小程序、APP、公众号和H5是否仅需4800元这个问题,实际上很难给出一个确定的答案。这个价格可能受到多种因素的影响
38 8
|
11天前
|
缓存 移动开发 小程序
uni-vue3-wetrip自创跨三端(H5+小程序+App)酒店预订app系统模板
vue3-uni-wetrip原创基于vite5+vue3+uniapp+pinia2+uni-ui等技术开发的仿去哪儿/携程预约酒店客房app系统。实现首页酒店展示、预订搜索、列表/详情、订单、聊天消息、我的等模块。支持编译H5+小程序+App端。
47 8
毋庸置疑,就是要买好的上门家政APP系统!
在家政APP平台建设中,选择合适的家政系统至关重要。它直接影响平台的运营与未来发展。以低价为唯一标准选择系统,可能因质量问题导致重大损失。应注重系统的质量与适应性,确保平台稳定运行,支持市场快速变化的需求。
|
23天前
|
传感器 iOS开发 UED
探索iOS生态系统:从App Store优化到用户体验提升
本文旨在深入探讨iOS生态系统的多个方面,特别是如何通过App Store优化(ASO)和改进用户体验来提升应用的市场表现。不同于常规摘要仅概述文章内容的方式,我们将直接进入主题,首先介绍ASO的重要性及其对开发者的意义;接着分析当前iOS平台上用户行为的变化趋势以及这些变化如何影响应用程序的设计思路;最后提出几点实用建议帮助开发者更好地适应市场环境,增强自身竞争力。
|
26天前
|
移动开发 小程序
仿青藤之恋社交交友软件系统源码 即时通讯 聊天 微信小程序 App H5三端通用
仿青藤之恋社交交友软件系统源码 即时通讯 聊天 微信小程序 App H5三端通用
54 3
|
1月前
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
|
1月前
|
小程序 数据挖掘 UED
开发1个上门家政小程序APP系统,都有哪些功能?
在快节奏的现代生活中,家政服务已成为许多家庭的必需品。针对传统家政服务存在的问题,如服务质量不稳定、价格不透明等,我们历时两年开发了一套全新的上门家政系统。该系统通过完善信用体系、提供奖励机制、优化复购体验、多渠道推广和多样化盈利模式,解决了私单、复购、推广和盈利四大痛点,全面提升了服务质量和用户体验,旨在成为家政行业的领导者。
|
1月前
|
机器人
布谷直播App系统源码开发之后台管理功能详解
直播系统开发搭建管理后台功能详解!

热门文章

最新文章