/* * Created by LuaView. * Copyright (c) 2017, Alibaba Group. All rights reserved. * * This source code is licensed under the MIT. * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree. */ package com.taobao.luaview.util; import android.annotation.TargetApi; import android.app.Activity; import android.app.ActivityManager; import android.content.Context; import android.graphics.Point; import android.os.Build; import android.util.DisplayMetrics; import android.util.TypedValue; import android.view.Display; import android.view.WindowManager; import java.lang.reflect.InvocationTargetException; /** * 获取系统一些属性 * * @author song * @date 15/9/8 */ public class AndroidUtil { /** * 获取可用的内存大小(in k) * * @param context * @return */ public static Long getAvailMemorySize(Context context) { ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo(); ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); activityManager.getMemoryInfo(mi); return mi != null ? mi.availMem : null; } /** * 获取所有的内存大小(in k) * * @param context * @return */ @TargetApi(16) public static Long getTotalMemorySize(Context context) { ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo(); ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); activityManager.getMemoryInfo(mi); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { return mi != null ? mi.totalMem : null; } else { return null; } } /** * 系统版本号 * * @return */ public static String getOsVersion() { return Build.VERSION.RELEASE; } /** * 系统版本号 * * @return */ public static String getSdkVersion() { return Build.VERSION.SDK; } /** * 系统版本号(int) * * @return */ public static int getSdkVersionInt() { return Build.VERSION.SDK_INT; } /** * 手机型号 * * @return */ public static String getOsModel() { return Build.MODEL; } /** * 系统品牌 * * @return */ public static String getBrand() { return Build.BRAND; } public static String getProduct() { return Build.PRODUCT; } public static String getDevice() { return Build.DEVICE; } public static String getManufacturer() { return Build.MANUFACTURER; } /** * get density of screen * * @param context Context * @return */ public static float getDensity(Context context) { return context.getApplicationContext().getResources().getDisplayMetrics().density; } /** * get screen width * * @param context Context * @return */ public static int getScreenWidth(Context context) { return context.getApplicationContext().getResources().getDisplayMetrics().widthPixels; } /** * get screen width * * @param context Context * @return */ public static int getScreenWidthInDp(Context context) { return (int) DimenUtil.pxToDpi(context.getApplicationContext().getResources().getDisplayMetrics().widthPixels); } /** * get screen height * * @param context Context * @return */ public static int getScreenHeight(Context context) { return context.getApplicationContext().getResources().getDisplayMetrics().heightPixels; } /** * get screen height * * @param context Context * @return */ public static int getScreenHeightInDp(Context context) { return (int) DimenUtil.pxToDpi(context.getApplicationContext().getResources().getDisplayMetrics().heightPixels); } /** * 获取屏幕尺寸 * * @param context * @return */ public static int[] getScreenSize(Context context) { final DisplayMetrics displayMetrics = context.getApplicationContext().getResources().getDisplayMetrics(); return new int[]{displayMetrics.widthPixels, displayMetrics.heightPixels}; } public static int[] getScreenSizeInDp(Context context) { final int[] size = getScreenSize(context); return new int[]{(int) DimenUtil.pxToDpi(size[0]), (int) DimenUtil.pxToDpi(size[1])}; } /** * 获取window的size * * @param context * @return */ public static int[] getWindowSize(Context context) { final WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); final Display display = wm.getDefaultDisplay(); if (android.os.Build.VERSION.SDK_INT >= 13) { Point point = new Point(); display.getSize(point); return new int[]{point.x, point.y}; } else { return new int[]{display.getWidth(), display.getHeight()}; } } /** * 获取window的size * * @param context * @return */ public static int[] getWindowSizeInDp(Context context) { final int[] size = getWindowSize(context); return new int[]{(int) DimenUtil.pxToDpi(size[0]), (int) DimenUtil.pxToDpi(size[1])}; } /** * get action bar height * * @param context * @return */ public static int getActionBarHeight(Context context) { int actionBarHeight = 0; if (context instanceof Activity && ((Activity) context).getActionBar() != null) { actionBarHeight = ((Activity) context).getActionBar().getHeight(); } if (actionBarHeight == 0) { final TypedValue tv = new TypedValue(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB && (context.getTheme() != null && context.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true))) { actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data, context.getResources().getDisplayMetrics()); } } return actionBarHeight; } /** * get actionbar height * * @param context * @return */ public static int getActionBarHeightInDp(Context context) { return (int) DimenUtil.pxToDpi(getActionBarHeight(context)); } /** * 获取系统的Navigation bar height * * @param context * @return */ public static int getNavigationBarHeightInDp(Context context) { Point size = getNavigationBarSize(context); return (int) DimenUtil.pxToDpi(size != null ? size.y : 0); } public static Point getNavigationBarSize(Context context) { Point appUsableSize = getAppUsableScreenSize(context); Point realScreenSize = getRealScreenSize(context); // navigation bar on the right if (appUsableSize.x < realScreenSize.x) { return new Point(realScreenSize.x - appUsableSize.x, appUsableSize.y); } // navigation bar at the bottom if (appUsableSize.y < realScreenSize.y) { return new Point(appUsableSize.x, realScreenSize.y - appUsableSize.y); } // navigation bar is not present return new Point(); } public static Point getAppUsableScreenSize(Context context) { WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display display = windowManager.getDefaultDisplay(); Point size = new Point(); display.getSize(size); return size; } public static Point getRealScreenSize(Context context) { WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display display = windowManager.getDefaultDisplay(); Point size = new Point(); if (Build.VERSION.SDK_INT >= 17) { display.getRealSize(size); } else if (Build.VERSION.SDK_INT >= 14) { try { size.x = (Integer) Display.class.getMethod("getRawWidth").invoke(display); size.y = (Integer) Display.class.getMethod("getRawHeight").invoke(display); } catch (IllegalAccessException e) { } catch (InvocationTargetException e) { } catch (NoSuchMethodException e) { } } return size; } /** * get status bar height in dp * * @param context * @return */ public static int getStatusBarHeightInDp(Context context) { return (int) DimenUtil.pxToDpi(getStatusBarHeight(context)); } 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; } }