package com.example.lenovo.mysmartrefresh.mypermission;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.os.Build;
import android.telephony.TelephonyManager;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.WindowManager;
/**
* Created by lenovo on 2017/7/25.
*/
public class DeviceUtil {
/**
* 获取DisplayMetrics
*
* @param context
* @return
*/
private static DisplayMetrics obtain(Context context) {
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(dm);
return dm;
}
/**
* 获取屏幕宽度
*
* @param context
* @return
*/
public static int getDeviceWidth(Context context) {
DisplayMetrics outMetrics = obtain(context);
return outMetrics.widthPixels;
}
/**
* 获取屏幕高度
*
* @param context
* @return
*/
public static int getDeviceHeight(Context context) {
DisplayMetrics outMetrics = obtain(context);
return outMetrics.heightPixels;
}
/**
* 获取屏幕大小[0]宽,[1]高
*
* @param context
* @return
*/
public static int[] getDeviceResolution(Context context) {
DisplayMetrics outMetrics = obtain(context);
int[] sizes = new int[2];
sizes[0] = outMetrics.widthPixels;
sizes[1] = outMetrics.heightPixels;
return sizes;
}
/**
* 获取设备屏幕密度dpi,每寸所包含的像素点
*
* @param context
* @return
*/
public static float getDeviceDensityDpi(Context context) {
return context.getResources().getDisplayMetrics().densityDpi;
}
/**
* 获取设备屏幕密度,像素的比例
*
* @param context
* @return
*/
public static float getDeviceDensity(Context context) {
return context.getResources().getDisplayMetrics().density;
}
/**
* 获取状态栏高度
*
* @param context
* @return
*/
public static int getStatusHeight(Context context) {
int statusHeight = -1;
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);
} catch (Exception e) {
e.printStackTrace();
}
return statusHeight;
}
/**
* 截取当前屏幕画面为bitmap图片
*
* @param activity
* @param hasStatusBar 是否包含当前状态栏,true:包含
* @return
*/
public static Bitmap snapCurrentScreenShot(Activity activity, boolean hasStatusBar) {
View decorView = activity.getWindow().getDecorView();
decorView.setDrawingCacheEnabled(true);
decorView.buildDrawingCache();
Bitmap bmp = decorView.getDrawingCache();
int deviceSize[] = getDeviceResolution(activity);
int coordinateY = 0;
int cutHeight = deviceSize[1];
if (!hasStatusBar) {
Rect frame = new Rect();
decorView.getWindowVisibleDisplayFrame(frame);
coordinateY += frame.top;
cutHeight -= frame.top;
}
Bitmap shot = Bitmap.createBitmap(bmp, 0, coordinateY, deviceSize[0], cutHeight);
decorView.destroyDrawingCache();
return shot;
}
/**
* 获取手机IMEI号
* add <uses-permission android:name="android.permission.READ_PHONE_STATE" /> in AndroidManifest.xml
*
* @param context
* @return getDeviceId
*/
public static String getDeviceIMEI(Context context) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
return tm.getDeviceId();
}
/**
* 获取手机imsi号
* add <uses-permission android:name="android.permission.READ_PHONE_STATE" /> in AndroidManifest.xml
*
* @param context
* @return getSubscriberId
*/
public static String getDeviceIMSI(Context context) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
return tm.getSubscriberId();
}
/**
* 获取手机号
* add <uses-permission android:name="android.permission.READ_PHONE_STATE" /> in AndroidManifest.xml
*
* @param context
* @return
*/
public static String getDeviceLine1Number(Context context) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
return tm.getLine1Number();
}
/**
* 获取手机SimSerialNumber号
* add <uses-permission android:name="android.permission.READ_PHONE_STATE" /> in AndroidManifest.xml
*
* @param context
* @return
*/
public static String getDeviceSimSerialNumber(Context context) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
return tm.getSimSerialNumber();
}
/**
* 服务商名称:
* 例如:中国移动、联通
* SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断).
*
* @param context
* @return getSimOperatorName
*/
public static String getDeviceSimOperatorName(Context context) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
return tm.getSimOperatorName();
}
public static int getDevicePhoneType(Context context) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
return tm.getPhoneType();
}
public static String getDeviceDeviceSoftwareVersion(Context context) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
return tm.getDeviceSoftwareVersion();
}
public static int getDeviceNetworkType(Context context) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
return tm.getNetworkType();
}
public static String getDeviceSimCountryIso(Context context) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
return tm.getSimCountryIso();
}
public static int getDeviceSimState(Context context) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
return tm.getSimState();
}
/**
* 电话状态:
* 1.tm.CALL_STATE_IDLE=0 无活动
* 2.tm.CALL_STATE_RINGING=1 响铃
* 3.tm.CALL_STATE_OFFHOOK=2 摘机
*
* @param context
* @return getCallState
*/
public static int getDeviceCallState(Context context) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
return tm.getCallState();
}
public static boolean getDeviceIsNetworkRoaming(Context context) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
return tm.isNetworkRoaming();
}
public static boolean getDeviceHasIccCard(Context context) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
return tm.hasIccCard();
}
/**
* 获取手机厂商
*
* @return
*/
public static String getDeviceManufacturer() {
return Build.MANUFACTURER;
}
/**
* 获取手机ROM
*
* @return
*/
public static String getDeviceRom() {
return Build.DISPLAY;
}
/**
* 获取手机型号
*
* @return
*/
public static String getDeviceModel() {
return Build.MODEL;
}
/**
* 获取手机系统版本号
*
* @return
*/
public static String getDeviceSystemVersion() {
return Build.VERSION.RELEASE;
}
/**
* 将px值转变成dip
*
* @param context
* @param px
* @return
*/
public static float pxToDip(Context context, float px) {
return px / getDeviceDensity(context) + 0.5f;
}
/**
* 将dip值转成px
*
* @param context
* @param dip
* @return
*/
public static float dipToPx(Context context, float dip) {
return dip * getDeviceDensity(context) + 0.5f;
}
/**
* 将px值转成sp值
*
* @param context
* @param px
* @return
*/
public static float pxToSp(Context context, float px) {
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return px / fontScale + 0.5f;
}
/**
* 将sp值转成px值
*
* @param context
* @param sp
* @return
*/
public static float spTpPx(Context context, float sp) {
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return sp * fontScale + 0.5f;
}
/**
* 获取软件versionName
*
* @param context
* @return
*/
public static String getSoftVersionName(Context context) {
PackageInfo info = null;
try {
info = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
return info.versionName;
} catch (Exception e) {
e.printStackTrace();
}
return "1.0";
}
/**
* 获取软件VersionCode
*
* @param context
* @return
*/
public static int getSoftVersionCode(Context context) {
PackageInfo info = null;
try {
info = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
return info.versionCode;
} catch (Exception e) {
e.printStackTrace();
}
return 1;
}
}
调用测试(手机:华为Nova2)
String deviceIMEI = DeviceUtil.getDeviceIMEI(this);
String deviceIMSI = DeviceUtil.getDeviceIMSI(this);
String deviceLine1Number = DeviceUtil.getDeviceLine1Number(this);
String deviceManufacturer = DeviceUtil.getDeviceManufacturer();
String deviceModel = DeviceUtil.getDeviceModel();
String deviceRom = DeviceUtil.getDeviceRom();
String deviceSimSerialNumber = DeviceUtil.getDeviceSimSerialNumber(this);
int deviceCallState = DeviceUtil.getDeviceCallState(this);
Log.e("PermissionActivity","deviceIMEI=="+deviceIMEI);
Log.e("PermissionActivity","deviceIMSI=="+deviceIMSI);
Log.e("PermissionActivity","deviceLine1Number=="+deviceLine1Number);
Log.e("PermissionActivity","deviceManufacturer=="+deviceManufacturer);
Log.e("PermissionActivity","deviceModel=="+deviceModel);
Log.e("PermissionActivity","deviceRom=="+deviceRom);
Log.e("PermissionActivity","deviceSimSerialNumber=="+deviceSimSerialNumber);
Log.e("PermissionActivity","deviceCallState=="+deviceCallState);
int deviceWidth = DeviceUtil.getDeviceWidth(this);
int deviceHeight = DeviceUtil.getDeviceHeight(this);
float deviceDensity = DeviceUtil.getDeviceDensity(this);
float deviceDensityDpi = DeviceUtil.getDeviceDensityDpi(this);
int statusHeight = DeviceUtil.getStatusHeight(this);
Log.e("PermissionActivity","deviceWidth=="+deviceWidth);
Log.e("PermissionActivity","deviceHeight=="+deviceHeight);
Log.e("PermissionActivity","deviceDensity=="+deviceDensity);
Log.e("PermissionActivity","deviceDensityDpi=="+deviceDensityDpi);
Log.e("PermissionActivity","statusHeight=="+statusHeight);
int softVersionCode = DeviceUtil.getSoftVersionCode(this);
String softVersionName = DeviceUtil.getSoftVersionName(this);
String deviceSystemVersion = DeviceUtil.getDeviceSystemVersion();
Log.e("PermissionActivity","softVersionCode=="+softVersionCode);
Log.e("PermissionActivity","softVersionName=="+softVersionName);
Log.e("PermissionActivity","deviceSystemVersion=="+deviceSystemVersion);
其他:
/**
* 通过反射的方式获取状态栏高度
*
* @return
*/
private int getStatusBarHeight() {
try {
Class<?> c = Class.forName("com.android.internal.R$dimen");
Object obj = c.newInstance();
Field field = c.getField("status_bar_height");
int x = Integer.parseInt(field.get(obj).toString());
return getResources().getDimensionPixelSize(x);
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
/**
* 获取状态栏高度, 单位px
*
* @param context
* @return
*/
public static int getStatusBarHeight(Context context) {
int result = 0;
int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
result = context.getResources().getDimensionPixelSize(resourceId);
}
return result;
}
/**
* 获取actionbar高度, 单位px
*
* @param context
* @return
*/
public static int getActionBarHeight(Context context) {
TypedValue localTypedValue = new TypedValue();
if (context.getTheme().resolveAttribute(android.R.attr.actionBarSize, localTypedValue, true)) {
return TypedValue.complexToDimensionPixelSize(localTypedValue.data, context.getResources().getDisplayMetrics());
}
return 0;
}
/**
* 获取actionbar的高度
*
* @return
*/
private float getActionBarHeight() {
TypedArray actionbarSizeTypedArray = this.obtainStyledAttributes(new int[] {android.R.attr.actionBarSize});
float h = actionbarSizeTypedArray.getDimension(0, 0);
actionbarSizeTypedArray.recycle();
return h;
}