概述
| ||
import android.Manifest; | ||
import android.accounts.Account; | ||
import android.accounts.AccountManager; | ||
import android.app.Activity; | ||
import android.bluetooth.BluetoothAdapter; | ||
import android.content.Context; | ||
import android.content.pm.PackageManager; | ||
import android.database.Cursor; | ||
import android.graphics.BitmapFactory; | ||
import android.net.Uri; | ||
import android.net.wifi.WifiInfo; | ||
import android.net.wifi.WifiManager; | ||
import android.os.Build; | ||
import android.os.Vibrator; | ||
import android.provider.Settings; | ||
import android.telephony.CellLocation; | ||
import android.telephony.TelephonyManager; | ||
import android.util.DisplayMetrics; | ||
import android.view.WindowManager; | ||
import android.webkit.WebView; | ||
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 java.util.UUID; | ||
/** | ||
* 主要功能: 获取App应用系统基本信息 | ||
* | ||
* @Prject: CommonUtilLibrary | ||
* @Package: com.jingewenku.abrahamcaijin.commonutil | ||
* @author: AbrahamCaiJin | ||
* @date: 2017年05月04日 14:13 | ||
* @Copyright: 个人版权所有 | ||
* @Company: | ||
* @version: 1.0.0 | ||
*/ | ||
@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; | ||
} | ||
/** | ||
*获取AndroidID | ||
* @param ctx | ||
* @return | ||
*/ | ||
public static String getAndroidID(Context ctx) { | ||
return Settings.Secure.getString(ctx.getContentResolver(), Settings.Secure.ANDROID_ID); | ||
} | ||
/** | ||
* 获取设备IMSI码 | ||
* @param ctx | ||
* @return | ||
*/ | ||
public static String getIMSI(Context ctx) { | ||
TelephonyManager tm = (TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE); | ||
return tm.getSubscriberId() != null ? tm.getSubscriberId() : null; | ||
} | ||
/** | ||
* 获取网络IP地址(优先获取wifi地址) | ||
* @param ctx | ||
* @return | ||
*/ | ||
public static String getIP(Context ctx) { | ||
WifiManager wifiManager = (WifiManager) ctx.getSystemService(Context.WIFI_SERVICE); | ||
return wifiManager.isWifiEnabled() ? getWifiIP(wifiManager) : getGPRSIP(); | ||
} | ||
/** | ||
* 获取WIFI连接下的ip地址 | ||
* @param wifiManager | ||
* @return | ||
*/ | ||
public static String getWifiIP(WifiManager wifiManager) { | ||
WifiInfo wifiInfo = wifiManager.getConnectionInfo(); | ||
String ip = intToIp(wifiInfo.getIpAddress()); | ||
return ip != null ? ip : ""; | ||
} | ||
/** | ||
* 获取GPRS连接下的ip地址 | ||
* @return | ||
*/ | ||
public static String getGPRSIP() { | ||
String ip = null; | ||
try { | ||
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) { | ||
for (Enumeration<InetAddress> enumIpAddr = en.nextElement().getInetAddresses(); enumIpAddr.hasMoreElements(); ) { | ||
InetAddress inetAddress = enumIpAddr.nextElement(); | ||
if (!inetAddress.isLoopbackAddress()) { | ||
ip = inetAddress.getHostAddress(); | ||
} | ||
} | ||
} | ||
} catch (SocketException e) { | ||
e.printStackTrace(); | ||
ip = null; | ||
} | ||
return ip; | ||
} | ||
private static String intToIp(int i) { | ||
return (i & 0xFF) + "." + ((i >> 8) & 0xFF) + "." + ((i >> 16) & 0xFF) + "." + (i >> 24 & 0xFF); | ||
} | ||
/** | ||
* 获取设备序列号 | ||
* @return | ||
*/ | ||
public static String getSerial() { | ||
return Build.SERIAL; | ||
} | ||
/** | ||
* 获取SIM序列号 | ||
* @param ctx | ||
* @return | ||
*/ | ||
public static String getSIMSerial(Context ctx) { | ||
TelephonyManager tm = (TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE); | ||
return tm.getSimSerialNumber(); | ||
} | ||
/** | ||
* 获取网络运营商 46000,46002,46007 中国移动,46001 中国联通,46003 中国电信 | ||
* @param ctx | ||
* @return | ||
*/ | ||
public static String getMNC(Context ctx) { | ||
String providersName = ""; | ||
TelephonyManager telephonyManager = (TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE); | ||
if (telephonyManager.getSimState() == TelephonyManager.SIM_STATE_READY) { | ||
providersName = telephonyManager.getSimOperator(); | ||
providersName = providersName == null ? "" : providersName; | ||
} | ||
return providersName; | ||
} | ||
/** | ||
* 获取网络运营商:中国电信,中国移动,中国联通 | ||
* @param ctx | ||
* @return | ||
*/ | ||
public static String getCarrier(Context ctx) { | ||
TelephonyManager tm = (TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE); | ||
return tm.getNetworkOperatorName().toLowerCase(Locale.getDefault()); | ||
} | ||
/** | ||
* 获取硬件型号 | ||
* @return | ||
*/ | ||
public static String getModel() { | ||
return Build.MODEL; | ||
} | ||
/** | ||
* 获取编译厂商 | ||
* @return | ||
*/ | ||
public static String getBuildBrand() { | ||
return Build.BRAND; | ||
} | ||
/** | ||
*获取编译服务器主机 | ||
* @return | ||
*/ | ||
public static String getBuildHost() { | ||
return Build.HOST; | ||
} | ||
/** | ||
*获取描述Build的标签 | ||
* @return | ||
*/ | ||
public static String getBuildTags() { | ||
return Build.TAGS; | ||
} | ||
/** | ||
*获取系统编译时间 | ||
* @return | ||
*/ | ||
public static long getBuildTime() { | ||
return Build.TIME; | ||
} | ||
/** | ||
*获取系统编译作者 | ||
* @return | ||
*/ | ||
public static String getBuildUser() { | ||
return Build.USER; | ||
} | ||
/** | ||
*获取编译系统版本(5.1) | ||
* @return | ||
*/ | ||
public static String getBuildVersionRelease() { | ||
return Build.VERSION.RELEASE; | ||
} | ||
/** | ||
*获取开发代号 | ||
* @return | ||
*/ | ||
public static String getBuildVersionCodename() { | ||
return Build.VERSION.CODENAME; | ||
} | ||
/** | ||
* 获取源码控制版本号 | ||
* @return | ||
*/ | ||
public static String getBuildVersionIncremental() { | ||
return Build.VERSION.INCREMENTAL; | ||
} | ||
/** | ||
*获取编译的SDK | ||
* @return | ||
*/ | ||
public static int getBuildVersionSDK() { | ||
return Build.VERSION.SDK_INT; | ||
} | ||
/** | ||
*获取修订版本列表(LMY47D) | ||
* @return | ||
*/ | ||
public static String getBuildID() { | ||
return Build.ID; | ||
} | ||
/** | ||
*CPU指令集 | ||
* @return | ||
*/ | ||
public static String[] getSupportedABIS() { | ||
String[] result = new String[]{"-"}; | ||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { | ||
result = Build.SUPPORTED_ABIS; | ||
} | ||
if (result == null || result.length == 0) { | ||
result = new String[]{"-"}; | ||
} | ||
return result; | ||
} | ||
/** | ||
*获取硬件制造厂商 | ||
* @return | ||
*/ | ||
public static String getManufacturer() { | ||
return Build.MANUFACTURER; | ||
} | ||
/** | ||
*获取系统启动程序版本号 | ||
* @return | ||
*/ | ||
public static String getBootloader() { | ||
return Build.BOOTLOADER; | ||
} | ||
/** | ||
* | ||
* @param ctx | ||
* @return | ||
*/ | ||
public static String getScreenDisplayID(Context ctx) { | ||
WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE); | ||
return String.valueOf(wm.getDefaultDisplay().getDisplayId()); | ||
} | ||
/** | ||
* 获取系统版本号 | ||
* @return | ||
*/ | ||
public static String getDisplayVersion() { | ||
return Build.DISPLAY; | ||
} | ||
/** | ||
*获取语言 | ||
* @return | ||
*/ | ||
public static String getLanguage() { | ||
return Locale.getDefault().getLanguage(); | ||
} | ||
/** | ||
* 获取国家 | ||
* @param ctx | ||
* @return | ||
*/ | ||
public static String getCountry(Context ctx) { | ||
TelephonyManager tm = (TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE); | ||
Locale locale = Locale.getDefault(); | ||
return tm.getSimState() == TelephonyManager.SIM_STATE_READY ? tm.getSimCountryIso().toLowerCase(Locale.getDefault()) : locale.getCountry().toLowerCase(locale); | ||
} | ||
/** | ||
*获取系统版本:5.1.1 | ||
* @return | ||
*/ | ||
public static String getOSVersion() { | ||
return Build.VERSION.RELEASE; | ||
} | ||
/** | ||
*获取GSF序列号 | ||
* @param context | ||
* @return | ||
*/ | ||
//<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> | ||
public static String getGSFID(Context context) { | ||
String result; | ||
final Uri URI = Uri.parse("content://com.google.android.gsf.gservices"); | ||
final String ID_KEY = "android_id"; | ||
String[] params = {ID_KEY}; | ||
Cursor c = context.getContentResolver().query(URI, null, null, params, null); | ||
if (c == null || !c.moveToFirst() || c.getColumnCount() < 2) { | ||
return null; | ||
} else { | ||
result = Long.toHexString(Long.parseLong(c.getString(1))); | ||
} | ||
c.close(); | ||
return result; | ||
} | ||
/** | ||
* 获取蓝牙地址 | ||
* @param context | ||
* @return | ||
*/ | ||
//<uses-permission android:name="android.permission.BLUETOOTH"/> | ||
@SuppressWarnings("MissingPermission") | ||
public static String getBluetoothMAC(Context context) { | ||
String result = null; | ||
try { | ||
if (context.checkCallingOrSelfPermission(Manifest.permission.BLUETOOTH) | ||
== PackageManager.PERMISSION_GRANTED) { | ||
BluetoothAdapter bta = BluetoothAdapter.getDefaultAdapter(); | ||
result = bta.getAddress(); | ||
} | ||
} catch (Exception e) { | ||
e.printStackTrace(); | ||
} | ||
return result; | ||
} | ||
/** | ||
* Android设备物理唯一标识符 | ||
* @return | ||
*/ | ||
public static String getPsuedoUniqueID() { | ||
String devIDShort = "35" + (Build.BOARD.length() % 10) + (Build.BRAND.length() % 10); | ||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { | ||
devIDShort += (Build.SUPPORTED_ABIS[0].length() % 10); | ||
} else { | ||
devIDShort += (Build.CPU_ABI.length() % 10); | ||
} | ||
devIDShort += (Build.DEVICE.length() % 10) + (Build.MANUFACTURER.length() % 10) + (Build.MODEL.length() % 10) + (Build.PRODUCT.length() % 10); | ||
String serial; | ||
try { | ||
serial = Build.class.getField("SERIAL").get(null).toString(); | ||
return new UUID(devIDShort.hashCode(), serial.hashCode()).toString(); | ||
} catch (Exception e) { | ||
serial = "ESYDV000"; | ||
} | ||
return new UUID(devIDShort.hashCode(), serial.hashCode()).toString(); | ||
} | ||
/** | ||
* 构建标识,包括brand,name,device,version.release,id,version.incremental,type,tags这些信息 | ||
* @return | ||
*/ | ||
public static String getFingerprint() { | ||
return Build.FINGERPRINT; | ||
} | ||
/** | ||
* 获取硬件信息 | ||
* @return | ||
*/ | ||
public static String getHardware() { | ||
return Build.HARDWARE; | ||
} | ||
/** | ||
* 获取产品信息 | ||
* @return | ||
*/ | ||
public static String getProduct() { | ||
return Build.PRODUCT; | ||
} | ||
/** | ||
* 获取设备信息 | ||
* @return | ||
*/ | ||
public static String getDevice() { | ||
return Build.DEVICE; | ||
} | ||
/** | ||
* 获取主板信息 | ||
* @return | ||
*/ | ||
public static String getBoard() { | ||
return Build.BOARD; | ||
} | ||
/** | ||
* 获取基带版本(无线电固件版本 Api14以上) | ||
* @return | ||
*/ | ||
public static String getRadioVersion() { | ||
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH ? Build.getRadioVersion() : ""; | ||
} | ||
/** | ||
* 获取的浏览器指纹(User-Agent) | ||
* @param ctx | ||
* @return | ||
*/ | ||
public static String getUA(Context ctx) { | ||
final String system_ua = System.getProperty("http.agent"); | ||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { | ||
return new WebView(ctx).getSettings().getDefaultUserAgent(ctx) + "__" + system_ua; | ||
} else { | ||
return new WebView(ctx).getSettings().getUserAgentString() + "__" + system_ua; | ||
} | ||
} | ||
/** | ||
* 获取得屏幕密度 | ||
* @param ctx | ||
* @return | ||
*/ | ||
public static String getDensity(Context ctx) { | ||
String densityStr = null; | ||
final int density = ctx.getResources().getDisplayMetrics().densityDpi; | ||
switch (density) { | ||
case DisplayMetrics.DENSITY_LOW: | ||
densityStr = "LDPI"; | ||
break; | ||
case DisplayMetrics.DENSITY_MEDIUM: | ||
densityStr = "MDPI"; | ||
break; | ||
case DisplayMetrics.DENSITY_TV: | ||
densityStr = "TVDPI"; | ||
break; | ||
case DisplayMetrics.DENSITY_HIGH: | ||
densityStr = "HDPI"; | ||
break; | ||
case DisplayMetrics.DENSITY_XHIGH: | ||
densityStr = "XHDPI"; | ||
break; | ||
case DisplayMetrics.DENSITY_400: | ||
densityStr = "XMHDPI"; | ||
break; | ||
case DisplayMetrics.DENSITY_XXHIGH: | ||
densityStr = "XXHDPI"; | ||
break; | ||
case DisplayMetrics.DENSITY_XXXHIGH: | ||
densityStr = "XXXHDPI"; | ||
break; | ||
} | ||
return densityStr; | ||
} | ||
/** | ||
* 获取google账号 | ||
* @param ctx | ||
* @return | ||
*/ | ||
//<uses-permission android:name="android.permission.GET_ACCOUNTS"/> | ||
@SuppressWarnings("MissingPermission") | ||
public static String[] getGoogleAccounts(Context ctx) { | ||
if (ctx.checkCallingOrSelfPermission(Manifest.permission.GET_ACCOUNTS) == PackageManager.PERMISSION_GRANTED) { | ||
Account[] accounts = AccountManager.get(ctx).getAccountsByType("com.google"); | ||
String[] result = new String[accounts.length]; | ||
for (int i = 0; i < accounts.length; i++) { | ||
result[i] = accounts[i].name; | ||
} | ||
return result; | ||
} | ||
return null; | ||
} | ||
} |
最后
以上就是时尚荷花为你收集整理的获取App应用系统基本信息 → AppSysMgr的全部内容,希望文章能够帮你解决获取App应用系统基本信息 → AppSysMgr所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复