Android-DeviceUtil及状态栏高度获取
来源:互联网 发布:截取串口数据代码 编辑:程序博客网 时间:2024/05/17 19:58
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(); } /* * 手机类型: * 例如: PHONE_TYPE_NONE 无信号 PHONE_TYPE_GSM GSM信号 PHONE_TYPE_CDMA CDMA信号 * * @param context * @return getPhoneType */ public static int getDevicePhoneType(Context context) { TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); return tm.getPhoneType(); } /* * 设备的软件版本号: * 例如:the IMEI/SV(software version) for GSM phones. * Return null if the software version is not available. */ public static String getDeviceDeviceSoftwareVersion(Context context) { TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); return tm.getDeviceSoftwareVersion(); } /* * 当前使用的网络类型: * 例如: NETWORK_TYPE_UNKNOWN 网络类型未知 0 NETWORK_TYPE_GPRS GPRS网络 1 NETWORK_TYPE_EDGE EDGE网络 2 NETWORK_TYPE_UMTS UMTS网络 3 NETWORK_TYPE_HSDPA HSDPA网络 8 NETWORK_TYPE_HSUPA HSUPA网络 9 NETWORK_TYPE_HSPA HSPA网络 10 NETWORK_TYPE_CDMA CDMA网络,IS95A 或 IS95B. 4 NETWORK_TYPE_EVDO_0 EVDO网络, revision 0. 5 NETWORK_TYPE_EVDO_A EVDO网络, revision A. 6 NETWORK_TYPE_1xRTT 1xRTT网络 7 */ public static int getDeviceNetworkType(Context context) { TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); return tm.getNetworkType(); } /* * Returns the ISO country code equivalent for the SIM provider's country code. * 获取ISO国家码,相当于提供SIM卡的国家码。 * * * @param context * @return getSimCountryIso */ public static String getDeviceSimCountryIso(Context context) { TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); return tm.getSimCountryIso(); } /* * SIM的状态信息: * SIM_STATE_UNKNOWN 未知状态 0 * SIM_STATE_ABSENT 没插卡 1 * SIM_STATE_PIN_REQUIRED 锁定状态,需要用户的PIN码解锁 2 * SIM_STATE_PUK_REQUIRED 锁定状态,需要用户的PUK码解锁 3 * SIM_STATE_NETWORK_LOCKED 锁定状态,需要网络的PIN码解锁 4 * SIM_STATE_READY 就绪状态 5 * * @param context * @return getSimState */ 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(); } /* * 是否漫游: * (在GSM用途下) */ public static boolean getDeviceIsNetworkRoaming(Context context) { TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); return tm.isNetworkRoaming(); } /* * ICC卡是否存在 */ 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; } /*--------------------------------------------APP版本相关---------------------------------------------*/ /** * 获取软件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);//+86+手机号 Log.e("PermissionActivity","deviceManufacturer=="+deviceManufacturer);//生产商:HUAWEI Log.e("PermissionActivity","deviceModel=="+deviceModel);//型号:PIC-AL00 Log.e("PermissionActivity","deviceRom=="+deviceRom);//版本号:PIC-AL00C00B133 Log.e("PermissionActivity","deviceSimSerialNumber=="+deviceSimSerialNumber);//序列号 Log.e("PermissionActivity","deviceCallState=="+deviceCallState);//0 /* * 屏幕相关 * */ 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);//1080 Log.e("PermissionActivity","deviceHeight=="+deviceHeight);//1812 Log.e("PermissionActivity","deviceDensity=="+deviceDensity);//3.0 Log.e("PermissionActivity","deviceDensityDpi=="+deviceDensityDpi);//480.0 Log.e("PermissionActivity","statusHeight=="+statusHeight);//72 /* * 版本相关 * */ int softVersionCode = DeviceUtil.getSoftVersionCode(this); String softVersionName = DeviceUtil.getSoftVersionName(this); String deviceSystemVersion = DeviceUtil.getDeviceSystemVersion(); Log.e("PermissionActivity","softVersionCode=="+softVersionCode);//1 Log.e("PermissionActivity","softVersionName=="+softVersionName);//1.0 Log.e("PermissionActivity","deviceSystemVersion=="+deviceSystemVersion);//android系统版本:7.0
其他:
/** * 通过反射的方式获取状态栏高度 * * @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; }
阅读全文
0 0
- Android-DeviceUtil及状态栏高度获取
- Android获取屏幕高度和宽度及获取状态栏高度
- Android:获取状态栏高度
- Android 获取状态栏高度
- Android获取状态栏高度
- android获取状态栏高度
- android获取状态栏高度
- Android获取状态栏高度
- Android获取状态栏高度
- Android 获取状态栏高度
- android获取状态栏高度
- 获取Android状态栏高度
- android 获取状态栏高度
- Android获取状态栏高度
- android获取状态栏高度
- Android获取状态栏高度
- Android 获取状态栏高度
- android获取状态栏高度
- TeamCity 和 Nexus 的使用
- AngularJS与Angular的区别
- hive支持sql大全(7-8:字符串函数 /集合统计函数)
- 浅谈c++placement new
- Android依赖库版本冲突的一个解决方法
- Android-DeviceUtil及状态栏高度获取
- 使用0x3f3f3f3f表示无穷大
- java中的包装类型转换
- ViewPager+Fragment 懒加载学习笔记(一)
- oracle优化建议
- The import org.springframework.context.support.ClassPathXmlApplicationContext cannot be resolved
- 记录最近遇到的坑
- BootStrap FileInput 插件实现多文件上传前端功能
- spring面向切面编程