20.Android 设备工具DeviceUtil

  • Android 设备工具DeviceUtil
    • dp转换px
    • px转换dp
    • 设备宽度
    • 设备高度
    • SD卡判断
    • 网络判断
    • VersionName
    • VersionCode
    • DeviceId
    • 手机品牌
    • 手机型号
    • 系统Android API等级
    • 系统Android 版本
    • App进程id
    • App进程Name
    • 创建App缓存文件夹
    • Uri转换File
    • 获取AndroidManifestxml里meta data的值
    • DeviceUtil全部源码

dp转换px

在自定义View中必须用到这个方法。自定义View的时候,不能像在xml那样可以设置dp(密度),只能设置px(像素)。不同分辨率的设备,设置px,显示就不会一样了。为了结合设计图设置dp,需要将dp转换为px值,然后再设置。

    /** * dp 转化为 px * @param context * @param dpValue * @return */    public static int dp2px(Context context, float dpValue) {        final float scale = context.getResources().getDisplayMetrics().density;        return (int) (dpValue * scale + 0.5f);    }

px转换dp

    /** * px 转化为 dp * @param context * @param pxValue * @return */    public static int px2dp(Context context, float pxValue) {        final float scale = context.getResources().getDisplayMetrics().density;        return (int) (pxValue / scale + 0.5f);    }

设备宽度

    /** * 获取设备宽度(px) * @param context * @return */    public static int deviceWidth(Context context) {        return context.getResources().getDisplayMetrics().widthPixels;    }

设备高度

    /** * 获取设备高度(px) * @param context * @return */    public static int deviceHeight(Context context) {        return context.getResources().getDisplayMetrics().heightPixels;    }

SD卡判断

    /** * SD卡判断 * @return */    public static boolean isSDCardAvailable() {        return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);    }

网络判断

    /** * 是否有网 * @param context * @return */    public static boolean isNetworkConnected(Context context) {        if (context != null) {            ConnectivityManager mConnectivityManager = (ConnectivityManager) context                    .getSystemService(Context.CONNECTIVITY_SERVICE);            NetworkInfo mNetworkInfo = mConnectivityManager                    .getActiveNetworkInfo();            if (mNetworkInfo != null) {                return mNetworkInfo.isAvailable();            }        }        return false;    }

VersionName

对应build.gradle中的versionName

    /** * 返回版本名字 * 对应build.gradle中的versionName * * @param context * @return */    public static String getVersionName(Context context) {        String versionName = "";        try {            PackageManager packageManager = context.getPackageManager();            PackageInfo packInfo = packageManager.getPackageInfo(context.getPackageName(), 0);            versionName = packInfo.versionName;        } catch (Exception e) {            e.printStackTrace();        }        return versionName;    }

VersionCode

对应build.gradle中的versionCode

    /** * 返回版本号 * 对应build.gradle中的versionCode * * @param context * @return */    public static String getVersionCode(Context context) {        String versionCode = "";        try {            PackageManager packageManager = context.getPackageManager();            PackageInfo packInfo = packageManager.getPackageInfo(context.getPackageName(), 0);            versionCode = String.valueOf(packInfo.versionCode);        } catch (Exception e) {            e.printStackTrace();        }        return versionCode;    }

DeviceId

每台设备都有唯一的标识,这就是DeviceId

    /** * 获取设备的唯一标识,deviceId * * @param context * @return */    public static String getDeviceId(Context context) {        TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);        String deviceId = tm.getDeviceId();        if (deviceId == null) {            return "-";        } else {            return deviceId;        }    }

手机品牌

    /** * 获取手机品牌 * * @return */    public static String getPhoneBrand() {        return android.os.Build.BRAND;    }

手机型号

    /** * 获取手机型号 * * @return */    public static String getPhoneModel() {        return android.os.Build.MODEL;    }

系统Android API等级

    /** * 获取手机Android API等级(22、23 ...) * * @return */    public static int getBuildLevel() {        return android.os.Build.VERSION.SDK_INT;    }

系统Android 版本

   /** * 获取手机Android 版本(4.4、5.0、5.1 ...) * * @return */    public static String getBuildVersion() {        return android.os.Build.VERSION.RELEASE;    }

App进程id

    /** * 获取当前App进程的id * * @return */    public static int getAppProcessId() {        return android.os.Process.myPid();    }

App进程Name

    /** * 获取当前App进程的Name * * @param context * @param processId * @return */    public static String getAppProcessName(Context context, int processId) {        String processName = null;        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);        // 获取所有运行App的进程集合        List l = am.getRunningAppProcesses();        Iterator i = l.iterator();        PackageManager pm = context.getPackageManager();        while (i.hasNext()) {            ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo) (i.next());            try {                if (info.pid == processId) {                    CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo(info.processName, PackageManager.GET_META_DATA));                    processName = info.processName;                    return processName;                }            } catch (Exception e) {                Log.e(DeviceUtil.class.getName(), e.getMessage(), e);            }        }        return processName;    }

创建App缓存文件夹

    /** * 创建App文件夹 * * @param appName * @param application * @return */    public static String createAPPFolder(String appName, Application application) {        return createAPPFolder(appName, application, null);    }    /** * 创建App文件夹 * * @param appName * @param application * @param folderName * @return */    public static String createAPPFolder(String appName, Application application, String folderName) {        File root = Environment.getExternalStorageDirectory();        File folder;        /** * 如果存在SD卡 */        if (DeviceUtil.isSDCardAvailable() && root != null) {            folder = new File(root, appName);            if (!folder.exists()) {                folder.mkdirs();            }        } else {            /** * 不存在SD卡,就放到缓存文件夹内 */            root = application.getCacheDir();            folder = new File(root, appName);            if (!folder.exists()) {                folder.mkdirs();            }        }        if (folderName != null) {            folder = new File(folder, folderName);            if (!folder.exists()) {                folder.mkdirs();            }        }        return folder.getAbsolutePath();    }

Uri转换File

    /** * 通过Uri找到File * * @param context * @param uri * @return */    public static File uri2File(Activity context, Uri uri) {        File file;        String[] project = {MediaStore.Images.Media.DATA};        Cursor actualImageCursor = context.getContentResolver().query(uri, project, null, null, null);        if (actualImageCursor != null) {            int actual_image_column_index = actualImageCursor                    .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);            actualImageCursor.moveToFirst();            String img_path = actualImageCursor                    .getString(actual_image_column_index);            file = new File(img_path);        } else {            file = new File(uri.getPath());        }        if (actualImageCursor != null) actualImageCursor.close();        return file;    }

获取AndroidManifest.xml里meta data的值

AndroidManifest.xml

比如自定义了一个meta-data,名为DEBUG。

<meta-data    android:name="DEBUG"    android:value="${DEBUG}" />

build.gradle

然后在build.gradle里给这个DEBUG赋值了。

    //渠道Flavors    productFlavors {        APPTest {            applicationId "com.zyy.camnter.newlife"            manifestPlaceholders = [DEBUG         : "debug"]        }    }

可以通过一下方法取得AndroidManifest.xml里DEBUG被赋上的值:

    /** * 获取AndroidManifest.xml里 <meta-data>的值 * * @param context * @param name * @return */    public static String getMetaData(Context context, String name) {        String value = null;        try {            ApplicationInfo appInfo = context.getPackageManager().getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);            value = appInfo.metaData.getString(name);        } catch (PackageManager.NameNotFoundException e) {            e.printStackTrace();        }        return value;    }

DeviceUtil全部源码

public class DeviceUtil {    /** * dp 转化为 px * * @param context * @param dpValue * @return */    public static int dp2px(Context context, float dpValue) {        final float scale = context.getResources().getDisplayMetrics().density;        return (int) (dpValue * scale + 0.5f);    }    /** * px 转化为 dp * * @param context * @param pxValue * @return */    public static int px2dp(Context context, float pxValue) {        final float scale = context.getResources().getDisplayMetrics().density;        return (int) (pxValue / scale + 0.5f);    }    /** * 获取设备宽度(px) * * @param context * @return */    public static int deviceWidth(Context context) {        return context.getResources().getDisplayMetrics().widthPixels;    }    /** * 获取设备高度(px) * * @param context * @return */    public static int deviceHeight(Context context) {        return context.getResources().getDisplayMetrics().heightPixels;    }    /** * SD卡判断 * * @return */    public static boolean isSDCardAvailable() {        return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);    }    /** * 是否有网 * * @param context * @return */    public static boolean isNetworkConnected(Context context) {        if (context != null) {            ConnectivityManager mConnectivityManager = (ConnectivityManager) context                    .getSystemService(Context.CONNECTIVITY_SERVICE);            NetworkInfo mNetworkInfo = mConnectivityManager                    .getActiveNetworkInfo();            if (mNetworkInfo != null) {                return mNetworkInfo.isAvailable();            }        }        return false;    }    /** * 返回版本名字 * 对应build.gradle中的versionName * * @param context * @return */    public static String getVersionName(Context context) {        String versionName = "";        try {            PackageManager packageManager = context.getPackageManager();            PackageInfo packInfo = packageManager.getPackageInfo(context.getPackageName(), 0);            versionName = packInfo.versionName;        } catch (Exception e) {            e.printStackTrace();        }        return versionName;    }    /** * 返回版本号 * 对应build.gradle中的versionCode * * @param context * @return */    public static String getVersionCode(Context context) {        String versionCode = "";        try {            PackageManager packageManager = context.getPackageManager();            PackageInfo packInfo = packageManager.getPackageInfo(context.getPackageName(), 0);            versionCode = String.valueOf(packInfo.versionCode);        } catch (Exception e) {            e.printStackTrace();        }        return versionCode;    }    /** * 获取设备的唯一标识,deviceId * * @param context * @return */    public static String getDeviceId(Context context) {        TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);        String deviceId = tm.getDeviceId();        if (deviceId == null) {            return "-";        } else {            return deviceId;        }    }    /** * 获取手机品牌 * * @return */    public static String getPhoneBrand() {        return android.os.Build.BRAND;    }    /** * 获取手机型号 * * @return */    public static String getPhoneModel() {        return android.os.Build.MODEL;    }    /** * 获取手机Android API等级(22、23 ...) * * @return */    public static int getBuildLevel() {        return android.os.Build.VERSION.SDK_INT;    }    /** * 获取手机Android 版本(4.4、5.0、5.1 ...) * * @return */    public static String getBuildVersion() {        return android.os.Build.VERSION.RELEASE;    }    /** * 获取当前App进程的id * * @return */    public static int getAppProcessId() {        return android.os.Process.myPid();    }    /** * 获取当前App进程的Name * * @param context * @param processId * @return */    public static String getAppProcessName(Context context, int processId) {        String processName = null;        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);        // 获取所有运行App的进程集合        List l = am.getRunningAppProcesses();        Iterator i = l.iterator();        PackageManager pm = context.getPackageManager();        while (i.hasNext()) {            ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo) (i.next());            try {                if (info.pid == processId) {                    CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo(info.processName, PackageManager.GET_META_DATA));                    processName = info.processName;                    return processName;                }            } catch (Exception e) {                Log.e(DeviceUtil.class.getName(), e.getMessage(), e);            }        }        return processName;    }    /** * 创建App文件夹 * * @param appName * @param application * @return */    public static String createAPPFolder(String appName, Application application) {        return createAPPFolder(appName, application, null);    }    /** * 创建App文件夹 * * @param appName * @param application * @param folderName * @return */    public static String createAPPFolder(String appName, Application application, String folderName) {        File root = Environment.getExternalStorageDirectory();        File folder;        /** * 如果存在SD卡 */        if (DeviceUtil.isSDCardAvailable() && root != null) {            folder = new File(root, appName);            if (!folder.exists()) {                folder.mkdirs();            }        } else {            /** * 不存在SD卡,就放到缓存文件夹内 */            root = application.getCacheDir();            folder = new File(root, appName);            if (!folder.exists()) {                folder.mkdirs();            }        }        if (folderName != null) {            folder = new File(folder, folderName);            if (!folder.exists()) {                folder.mkdirs();            }        }        return folder.getAbsolutePath();    }    /** * 通过Uri找到File * * @param context * @param uri * @return */    public static File uri2File(Activity context, Uri uri) {        File file;        String[] project = {MediaStore.Images.Media.DATA};        Cursor actualImageCursor = context.getContentResolver().query(uri, project, null, null, null);        if (actualImageCursor != null) {            int actual_image_column_index = actualImageCursor                    .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);            actualImageCursor.moveToFirst();            String img_path = actualImageCursor                    .getString(actual_image_column_index);            file = new File(img_path);        } else {            file = new File(uri.getPath());        }        if (actualImageCursor != null) actualImageCursor.close();        return file;    }    /** * 获取AndroidManifest.xml里 <meta-data>的值 * * @param context * @param name * @return */    public static String getMetaData(Context context, String name) {        String value = null;        try {            ApplicationInfo appInfo = context.getPackageManager().getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);            value = appInfo.metaData.getString(name);        } catch (PackageManager.NameNotFoundException e) {            e.printStackTrace();        }        return value;    }}

更多相关文章

  1. OpenGL ES基础篇
  2. android关于View的截图
  3. Android(安卓)CountDownTimer
  4. android获取网络图片的用法
  5. Android编程心得-在任意类中获取当前屏幕宽高
  6. android抓取网络通讯包
  7. 安卓启动流程
  8. Android下的binder机制和IPC原理
  9. Android(安卓)技能图谱学习路线

随机推荐

  1. 短视频平台源码Android(安卓)页面自动跳
  2. Re-installation failed 的解决办法
  3. android内核,busybox编译
  4. Android: 用Instrumentation类发送鼠标或
  5. Android(安卓)launcher 源码 app 的启动
  6. Android(安卓)获取设备IP,已连接WiFi信息
  7. android中框架设计的小总结
  8. android 自动亮度控制
  9. Android(安卓)的消息机制(3)
  10. Android(安卓)Base64字符串转换成图片