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



相关文章
|
9天前
|
小程序 数据挖掘 UED
开发1个上门家政小程序APP系统,都有哪些功能?
在快节奏的现代生活中,家政服务已成为许多家庭的必需品。针对传统家政服务存在的问题,如服务质量不稳定、价格不透明等,我们历时两年开发了一套全新的上门家政系统。该系统通过完善信用体系、提供奖励机制、优化复购体验、多渠道推广和多样化盈利模式,解决了私单、复购、推广和盈利四大痛点,全面提升了服务质量和用户体验,旨在成为家政行业的领导者。
|
7天前
|
机器人
布谷直播App系统源码开发之后台管理功能详解
直播系统开发搭建管理后台功能详解!
|
2月前
|
移动开发 Android开发 数据安全/隐私保护
移动应用与系统的技术演进:从开发到操作系统的全景解析随着智能手机和平板电脑的普及,移动应用(App)已成为人们日常生活中不可或缺的一部分。无论是社交、娱乐、购物还是办公,移动应用都扮演着重要的角色。而支撑这些应用运行的,正是功能强大且复杂的移动操作系统。本文将深入探讨移动应用的开发过程及其背后的操作系统机制,揭示这一领域的技术演进。
本文旨在提供关于移动应用与系统技术的全面概述,涵盖移动应用的开发生命周期、主要移动操作系统的特点以及它们之间的竞争关系。我们将探讨如何高效地开发移动应用,并分析iOS和Android两大主流操作系统的技术优势与局限。同时,本文还将讨论跨平台解决方案的兴起及其对移动开发领域的影响。通过这篇技术性文章,读者将获得对移动应用开发及操作系统深层理解的钥匙。
|
3月前
|
安全 JavaScript 应用服务中间件
【Azure Function App】如何修改Azure函数应用的默认页面呢?
【Azure Function App】如何修改Azure函数应用的默认页面呢?
|
3月前
【Azure Logic App】消费型逻辑应用在消费Service Bus时遇见消息并发速度慢,消息积压
【Azure Logic App】消费型逻辑应用在消费Service Bus时遇见消息并发速度慢,消息积压
|
3月前
|
Java 应用服务中间件 开发工具
[App Service for Windows]通过 KUDU 查看 Tomcat 配置信息
[App Service for Windows]通过 KUDU 查看 Tomcat 配置信息
|
3月前
|
JSON 数据格式
【Azure App Service】当App Service中使用系统标识无法获取Access Token时
【Azure App Service】当App Service中使用系统标识无法获取Access Token时
|
3月前
【Azure Logic App】在逻辑应用中开启或关闭一个工作流是否会对其它工作流产生影响呢?
【Azure Logic App】在逻辑应用中开启或关闭一个工作流是否会对其它工作流产生影响呢?
|
3月前
|
域名解析 网络协议 网络安全
【App Service】遇见本地访问Azure App Service应用慢或者是调用第三方接口慢的调试小工具
【App Service】遇见本地访问Azure App Service应用慢或者是调用第三方接口慢的调试小工具
|
3月前
|
存储 SQL JSON
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
下一篇
无影云桌面