Android開發獲取Android設備信息的工具類

  • 2017-9-24 08:46
  • PHP二次開發
  • 閱讀(1473)
  • 評論(2
  • 來源:互聯網
  • 摘要: Android 設備工具DeviceUtilAndroid 設備工具DeviceUtil dp轉換px px轉換dp 設備寬度 設備高度 SD卡判斷 網絡判斷 VersionName VersionCode DeviceId 手機品牌 手機型號 系統Android API等級 系統Android 版本 App進 ...
    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值,然后再設置。

    Java" hljs="" java="">    /**
         * 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 版本
       /**
         * 獲取手機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。

    build.gradle

    然后在build.gradle里給這個DEBUG賦值了。

        //渠道Flavors
        productFlavors {
            APPTest {
                applicationId com.zyy.camnter.newlife
                manifestPlaceholders = [DEBUG         : debug]
            }
        }
    可以通過一下方法取得AndroidManifest.xml里DEBUG被賦上的值:

        /**
         * 獲取AndroidManifest.xml里 的值
         *
         * @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里 的值
         *
         * @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;
        }

    }


    PHP技術交流QQ群:422137578

    除非注明,文章均為 PHP二次開發 原創,轉載請注明本文地址:http://www.fujvln.live/article-2653-1.html

    相關閱讀

    發表評論

    最新評論

    引用 在家怎么賺錢   2019-4-1 09:31
    贊,
    引用 空當接龍   2019-4-1 09:29
    沙發沙發

    查看全部評論(2)

    用戶名:  *

    郵 箱:  *

    網 址: 注意加上“http://”哦!