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开发之获取手机SIM卡信息

关于Android的Build类——获取Android手机设备各种信息

Android 获取手机的厂商型号Android系统版本号IMEI当前系统语言等工具类

Android能够获取到唯一的设备ID吗

Android中获取手机IMEI,IMSI, MAC(Android 6.0支持4G环境获取)工具类(标识用户唯一)

Android开发工具类样式一些配置