android开发之工具类:获取手机设备的一些数据DeviceUtil
Posted FightSeeker
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android开发之工具类:获取手机设备的一些数据DeviceUtil相关的知识,希望对你有一定的参考价值。
import android.app.Activity;
import android.content.Context;
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 dandy on 2016/7/13.
*
* 获取手机设备等的一些数据
*/
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[] getDeviceSize(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[] = getDeviceSize(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
*/
public static String getDeviceIMEI(Context context)
TelephonyManager tm = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
return tm.getDeviceId();
/**
* 获取手机厂商
* @return
*/
public static String getDeviceManufacturer()
return Build.MANUFACTURER;
/**
* 获取手机型号
* @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;
测试代码结果如下:
07-14 14:43:17.062 10053-10053/? D/MainActivity: testDeviceUtil: width = 1080
07-14 14:43:17.064 10053-10053/? D/MainActivity: testDeviceUtil: height = 1776
07-14 14:43:17.065 10053-10053/? D/MainActivity: testDeviceUtil: statusHeight = 75
07-14 14:43:17.065 10053-10053/? D/MainActivity: testDeviceUtil: model = Nexus 5
07-14 14:43:17.065 10053-10053/? D/MainActivity: testDeviceUtil: factory = LGE
07-14 14:43:17.065 10053-10053/? D/MainActivity: testDeviceUtil: densityDpi = 480.0
07-14 14:43:17.065 10053-10053/? D/MainActivity: testDeviceUtil: density = 3.0
07-14 14:43:17.065 10053-10053/? D/MainActivity: testDeviceUtil: version = 5.0.1
07-14 14:43:17.067 10053-10053/? D/MainActivity: testDeviceUtil: imei = 352584060187280
以上是关于android开发之工具类:获取手机设备的一些数据DeviceUtil的主要内容,如果未能解决你的问题,请参考以下文章
关于Android的Build类——获取Android手机设备各种信息
Android 获取手机的厂商型号Android系统版本号IMEI当前系统语言等工具类