在app开发中经常需要获取一些app的数据或者手机信息。由于经常用到,道长就积累了一些。现在和小伙伴们分享一下。
一、app中的信息
1.获取控件的宽、高
这里获取的宽高并非是设置的控件的dp值,而是返回的像素值,实现代码如下:
ViewTreeObserver viewTreeObserver = image_view.getViewTreeObserver();
viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
image_view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
Log.e("yushan", image_view.getHeight() + "," + image_view.getWidth());
}
});
注意:这段代码要放到Activity的onCreate()中,否则无效。
2.获取状态栏的高
实现代码如下:
private int getStatusBarHeight() {
Class<?> clazz = null;
Object obj = null;
Field field = null;
int x = 0;
try {
clazz = Class.forName("com.android.internal.R$dimen");
obj = clazz.newInstance();
field = clazz.getField("status_bar_height");
x = Integer.parseInt(field.get(obj).toString());
return getResources().getDimensionPixelSize(x);
} catch (Exception e) {
e.printStackTrace();
return 75;
}
}
3.获取actionBar的高度
实现代码如下:
private int getActionBarHeight() {
int actionBarHeight = ((ActionBarActivity) activity)
.getSupportActionBar().getHeight();
if (actionBarHeight != 0) {
return actionBarHeight;
}
final TypedValue tv = new TypedValue();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
if (((ActionBarActivity) activity).getTheme()
.resolveAttribute(android.R.attr.actionBarSize, tv, true)) {
actionBarHeight = TypedValue.complexToDimensionPixelSize(
tv.data, getResources().getDisplayMetrics());
}
} else {
// 使用android.support.v7.appcompat包做actionbar兼容的情况
if (((ActionBarActivity) activity).getTheme()
.resolveAttribute(
android.support.v7.appcompat.R.attr.actionBarSize,
tv, true)) {
actionBarHeight = TypedValue.complexToDimensionPixelSize(
tv.data, getResources().getDisplayMetrics());
}
}
return actionBarHeight;
}
注意:这里使用的Activity必须是actionBarActivity的子类,也就是说actionBar必须存在。
二、手机信息
1.获取手机型号
String model = Build.MODEL;
2.获取手机品牌
String board = Build.BOARD;
3.获取手机序列号(IMEI)
首先在清单文件中添加权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
然后实现代码如下:
TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String szImei = TelephonyMgr.getDeviceId();
注意:如果你的手机是水货(没有量产的手机),返回值可能是无效的IMEI。
4.获取手机屏幕的宽、高
DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
int width = metric.widthPixels; // 屏幕宽度(像素)
int height = metric.heightPixels; // 屏幕高度(像素)
注意:这些代码要放到Activity的onCreate()方法中。
5.获取手机屏幕的像素密度
DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
float density = metric.density; // 屏幕密度(0.75 / 1.0 / 1.5)
int densityDpi = metric.densityDpi; // 屏幕密度DPI(120 / 160 / 240)
注意:这些代码要放到Activity的onCreate()方法中。
6.获取手机内存大小
// 获取android当前可用内存大小
private String getAvailMemory() {
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();
am.getMemoryInfo(mi);
// mi.availMem; 当前系统的可用内存
return Formatter.formatFileSize(getBaseContext(), mi.availMem);// 将获取的内存大小规格化
}
private String getTotalMemory() {
String str1 = "/proc/meminfo";// 系统内存信息文件
String str2;
String[] arrayOfString;
long initial_memory = 0;
try {
FileReader localFileReader = new FileReader(str1);
BufferedReader localBufferedReader = new BufferedReader(
localFileReader, 8192);
str2 = localBufferedReader.readLine();// 读取meminfo第一行,系统总内存大小
arrayOfString = str2.split("\\s+");
for (String num : arrayOfString) {
Log.i(str2, num + "\t");
}
initial_memory = Integer.valueOf(arrayOfString[1]).intValue() * 1024;// 获得系统总内存,单位是KB,乘以1024转换为Byte
localBufferedReader.close();
} catch (IOException e) {
}
return Formatter.formatFileSize(getBaseContext(), initial_memory);// Byte转换为KB或者MB,内存大小规格化
}
7.获取SD卡的容量
public void SDKSPace(){
//获取SDcard的目录
File SDcardDir = Environment.getExternalStorageDirectory();
//获取SDcard的容量
long totalSpace = SDcardDir.getTotalSpace();
//获取SDcard的可用容量
long usableSpace = SDcardDir.getUsableSpace();
//转换SDcard的容量
String total = Formatter.formatFileSize(this, totalSpace);
String usable = Formatter.formatFileSize(this, usableSpace);
rom.setText("SD卡总容量:" + total + " 可用容量:" + usable);
}
暂时只有这么多,这个道长以后还会有补充的。希望这篇博客能够为小伙伴提供一些帮助。