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;
}
}