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,欢迎评论,欢迎指正



相关文章
|
2月前
|
移动开发 小程序 Android开发
基于 uni-app 开发的废品回收类多端应用功能与界面说明
本文将对一款基于 uni-app 开发的废品回收类多端应用,从多端支持范围、核心功能模块及部分界面展示进行客观说明,相关资源信息也将一并呈现。
138 0
|
4月前
|
人工智能 文字识别 小程序
旅游社用什么工具收报名 + 资料?不开发 App 也能自动收集信息
本文探讨了旅游行业中报名信息收集的常见痛点及解决方案,重点介绍了二维码表单工具在提升信息收集效率、简化操作流程方面的优势。通过对比多种工具,分析其适用场景与实际应用逻辑,为一线旅游从业者提供高效、低成本的执行参考。
|
2月前
|
存储 前端开发 API
可配置化App启动弹窗系统:实现后台动态管理与热更新引导-蜻蜓Q系统laravel+vue3-优雅草卓伊凡
可配置化App启动弹窗系统:实现后台动态管理与热更新引导-蜻蜓Q系统laravel+vue3-优雅草卓伊凡
299 5
可配置化App启动弹窗系统:实现后台动态管理与热更新引导-蜻蜓Q系统laravel+vue3-优雅草卓伊凡
|
7月前
|
存储 SQL 虚拟化
Omnissa App Volumes 4, version 2503 - 实时应用程序交付系统
Omnissa App Volumes 4, version 2503 - 实时应用程序交付系统
174 7
Omnissa App Volumes 4, version 2503 - 实时应用程序交付系统
|
2月前
|
存储 前端开发 安全
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
191 5
|
3月前
|
缓存 小程序 开发工具
最新原创uniapp+vue3仿微信界面聊天app系统
最新原创研发uniapp+vue3实战跨端仿微信App界面聊天程序。支持运行到H5+小程序+APP端。
232 6
最新原创uniapp+vue3仿微信界面聊天app系统
|
3月前
|
缓存 小程序 iOS开发
基于uni-app+vue3手机桌面oadmin管理系统
基于uniapp+vue3+pinia2+uv-ui仿ios手机界面oa后台系统解决方案。支持运行到h5+小程序+app端。
234 5
|
3月前
|
安全 测试技术 虚拟化
Omnissa App Volumes 4, version 2506 - 实时应用程序交付系统
Omnissa App Volumes 4, version 2506 - 实时应用程序交付系统
99 0
|
4月前
|
Java Shell Maven
【Azure Container App】构建Java应用镜像时候遇无法编译错误:ERROR [build 10/10] RUN ./mvnw.cmd dependency:go-offline -B -Dproduction package
在部署Java应用到Azure Container App时,构建镜像过程中出现错误:“./mvnw.cmd: No such file or directory”。尽管项目根目录包含mvnw和mvnw.cmd文件,但依然报错。问题出现在Dockerfile构建阶段执行`./mvnw dependency:go-offline`命令时,系统提示找不到可执行文件。经过排查,确认是mvnw文件内容异常所致。最终通过重新生成mvnw文件解决该问题,镜像成功构建。
164 1
|
4月前
|
存储 Android开发 数据安全/隐私保护
Thanox安卓系统增加工具下载,管理、阻止、限制后台每个APP运行情况
Thanox是一款Android系统管理工具,专注于权限、后台启动及运行管理。支持应用冻结、系统优化、UI自定义和模块管理,基于Xposed框架开发,安全可靠且开源免费,兼容Android 6.0及以上版本。
408 4

热门文章

最新文章

下一篇
oss云网关配置