/**
* 得到屏幕的宽度
*/
public void getScreenWidth(){
DisplayMetrics displayMetrics = new DisplayMetrics();
this.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
System.out.println("屏幕的宽度:" + displayMetrics.widthPixels);
}
/**
* 得到屏幕的高度
*/
public void getScreenHeight(){
DisplayMetrics displayMetrics = new DisplayMetrics();
this.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
System.out.println("屏幕的高度:" + displayMetrics.heightPixels);
}
/**
* dp转px
* @param dp
*/
public void dp2px(float dp){
float px = dp* Resources.getSystem().getDisplayMetrics().density;
System.out.println("dp转化为px:" + px);
}
/**
* 得到状态栏的高度
* 该方法在onCreate中获取之为0
*/
public int getStatusBarHeight1(){
Rect frame = new Rect();
this.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
int statusHeight = frame.top;
System.out.println("状态栏的高度:" + statusHeight);
return statusHeight;
}
/**
* 得到状态栏的高度
*/
public void getStatusBarHeight2(View view){
Class c = null;
Object obj = null;
Field field = null;
int x = 0;
int statusBarHeight = 0;
try {
c = Class.forName("com.android.internal.R$dimen");
obj = c.newInstance();
field = c.getField("status_bar_height");
x = Integer.parseInt(field.get(obj).toString());
statusBarHeight = getResources().getDimensionPixelSize(x);
System.out.println("状态栏的高度:" + statusBarHeight);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 得到标题栏的高度
*/
public void getTitleBarHeight(){
int contentTop = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();
int titleBatHeight = contentTop - getStatusBarHeight1();
System.out.println("标题栏的高度" + titleBatHeight);
}
/**
* 判断是否为平板
*/
public boolean isTablet(){
return (this.getResources().getConfiguration().screenLayout
& Configuration.SCREENLAYOUT_SIZE_MASK)>=Configuration.SCREENLAYOUT_SIZE_LARGE;
}
获取VersionCode:
/**
* 得到VersionCode
* @return
*/
public int getVersionCode(){
String packageName = getApplicationContext().getPackageName();
try {
PackageInfo packageInfo = getApplicationContext().getPackageManager().getPackageInfo(packageName,0);
return packageInfo.versionCode;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return -1;
}
获取VersionName: /**
* 得到VersionName
* @return
*/
public String getVersionName(){
String packageName = getApplicationContext().getPackageName();
try {
PackageInfo packageInfo = getApplicationContext().getPackageManager().getPackageInfo(packageName,0);
return packageInfo.versionName;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return null;
}
获取Application名称: /**
* 得到Application的名称
* @return
*/
public String getApplicationName(){
String packageName = getApplicationContext().getPackageName();
try {
ApplicationInfo applicationInfo = getApplicationContext().getPackageManager().getApplicationInfo(packageName,0);
String applicaiontName = (String) getApplicationContext().getPackageManager().getApplicationLabel(applicationInfo);
return applicaiontName;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return null;
}
判断一个App是否正在运行:
/**
* 判断一个App是否运行 不需要任何权限
* @return
*/
public boolean isRunning(){
String packageName = getApplicationContext().getPackageName();
ActivityManager am = (ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> infos = am.getRunningAppProcesses();
for(ActivityManager.RunningAppProcessInfo rapi : infos){
if(rapi.processName.equals(packageName)){
return true;
}
}
return false;
}
判断一个Activity是否在前台:需要权限:android.permission.REAL_GET_TASKS (使用于 L以下,对于L以上则使用am.getRunningAppProcesses()方法) /**
* 判断一个Activity是否在前台运行
* @param activityName
* @return
*/
public boolean isTopActivity(String activityName){
ActivityManager manager = (ActivityManager) getApplicationContext().getSystemService(getApplicationContext().ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> runningTaskInfos = manager.getRunningTasks(1);//maxNum限制要获取的数量
String cmpNameTemp = null;
if(runningTaskInfos != null){
cmpNameTemp = runningTaskInfos.get(0).topActivity.getShortClassName();//info.topActivity.getPackageName()得到包的名字
}
if(cmpNameTemp == null){
return false;
}
return cmpNameTemp.endsWith(activityName);
}
获取应用的公钥签名: /**
* 获取应用公钥签名
* @return
*/
public Signature getSign(){
PackageInfo pi;
Signature sign = null;
try {
pi = getApplicationContext().getPackageManager().getPackageInfo(getApplicationContext().getPackageName(),PackageManager.GET_SIGNATURES);
sign = pi.signatures[0];
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return sign;
}
比较当前签名HashCode和预设的HashCode: /**
* 比较当前签名HashCode和预设的HashCode
* @param presetHashCode
* @return
*/
public boolean signCheckWithHashCode(int presetHashCode){
Signature signature = getSign();
return signature.hashCode() == presetHashCode;
}
数据操作: /**
* 删除数据:cache,file,share prefs,databases
*/
public void clear(){
clearCache(getApplicationContext());
clearFiles(getApplicationContext());
clearSharedPreference(getApplicationContext());
clearDataBase(getApplicationContext());
}
/**
* 删除应用数据库目录
* @param context
*/
public void clearDataBase(Context context){
delete(new File("/data/data/" + context.getPackageName() + "/databases"),true);
}
/**
* 删除应用SharedPrefrence目录
* @param context
*/
public void clearSharedPreference(Context context){
delete(new File("/data/data/" + context.getPackageName() + "/shared_prefs"), true);
}
/**
* 删除应用文件目录
* @param applicationContext
*/
private void clearFiles(Context applicationContext) {
delete(getApplicationContext().getFilesDir(),true);
}
/**
* 删除应用缓存目录
* @param directory
* @param b
*/
private void clearCache(Context applicationContext) {
delete(getApplicationContext().getCacheDir(), true);
delete(getApplicationContext().getExternalCacheDir(), true);
}
private void delete(File directory, boolean b) {
if(directory != null && directory.exists()){
if(directory.isDirectory()){
for(File subDirectory : directory.listFiles()){
delete(subDirectory,false);
}
}
if(!b){
directory.delete();
}
}
}
/**
* As meaning of method name.
* 获得两点之间的距离
* @param p0
* @param p1
* @return
*/
public static float getDistanceBetween2Points(PointF p0, PointF p1) {
float distance = (float) Math.sqrt(Math.pow(p0.y - p1.y, 2) + Math.pow(p0.x - p1.x, 2));
return distance;
}
/**
* Get middle point between p1 and p2.
* 获得两点连线的中点
* @param p1
* @param p2
* @return
*/
public static PointF getMiddlePoint(PointF p1, PointF p2) {
return new PointF((p1.x + p2.x) / 2.0f, (p1.y + p2.y) / 2.0f);
}
/**
* Get point between p1 and p2 by percent.
* 根据百分比获取两点之间的某个点坐标
* @param p1
* @param p2
* @param percent
* @return
*/
public static PointF getPointByPercent(PointF p1, PointF p2, float percent) {
return new PointF(evaluateValue(percent, p1.x , p2.x), evaluateValue(percent, p1.y , p2.y));
}
/**
* 根据分度值,计算从start到end中,fraction位置的值。fraction范围为0 -> 1
* @param fraction
* @param start
* @param end
* @return
*/
public static float evaluateValue(float fraction, Number start, Number end){
return start.floatValue() + (end.floatValue() - start.floatValue()) * fraction;
}
/**
* Get the point of intersection between circle and line.
* 获取 通过指定圆心,斜率为lineK的直线与圆的交点。
*
* @param pMiddle The circle center point.
* @param radius The circle radius.
* @param lineK The slope of line which cross the pMiddle.
* @return
*/
public static PointF[] getIntersectionPoints(PointF pMiddle, float radius, Double lineK) {
PointF[] points = new PointF[2];
float radian, xOffset = 0, yOffset = 0;
if(lineK != null){
radian= (float) Math.atan(lineK);
xOffset = (float) (Math.sin(radian) * radius);
yOffset = (float) (Math.cos(radian) * radius);
}else {
xOffset = radius;
yOffset = 0;
}
points[0] = new PointF(pMiddle.x + xOffset, pMiddle.y - yOffset);
points[1] = new PointF(pMiddle.x - xOffset, pMiddle.y + yOffset);
return points;
}
记录一下Android VersionCode:
sb.append(""+ Build.VERSION_CODES.BASE+"\n")//API 1
.append("1.1" + Build.VERSION_CODES.BASE_1_1 + "\n")//API 2
.append("纸杯蛋糕1.5:" + Build.VERSION_CODES.CUPCAKE + "\n")//API 3
.append("该版本没有发布" + Build.VERSION_CODES.CUR_DEVELOPMENT + "\n")//API 1000
.append("甜甜圈1.6" + Build.VERSION_CODES.DONUT + "\n")//API 4
.append("泡芙2.0" + Build.VERSION_CODES.ECLAIR + "\n")//API 5
.append("泡芙2.0.1" + Build.VERSION_CODES.ECLAIR_0_1 + "\n")//API 6
.append("泡芙2.1" + Build.VERSION_CODES.ECLAIR_MR1 + "\n")//API 7
.append("冻酸奶2.2" + Build.VERSION_CODES.FROYO + "\n")//API 8
.append("姜饼2.3" + Build.VERSION_CODES.GINGERBREAD + "\n")//API 9
.append("姜饼2.3.3" + Build.VERSION_CODES.GINGERBREAD_MR1 + "\n")//API 10
.append("蜂巢3.0" + Build.VERSION_CODES.HONEYCOMB + "\n")//API 11
.append("蜂巢3.1" + Build.VERSION_CODES.HONEYCOMB_MR1 + "\n")//API 12
.append("蜂巢3.2" + Build.VERSION_CODES.HONEYCOMB_MR2 + "\n")//API 13
.append("冰激凌三明治4.0" + Build.VERSION_CODES.ICE_CREAM_SANDWICH + "\n")//API 14
.append("冰激凌三明治4.0.3" + Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1 + "\n")//API 15
.append("果冻豆4.1" + Build.VERSION_CODES.JELLY_BEAN + "\n")//API 16
.append("果冻豆4.2" + Build.VERSION_CODES.JELLY_BEAN_MR1 + "\n")//API 17
.append("果冻豆4.3" + Build.VERSION_CODES.JELLY_BEAN_MR2 + "\n")//API 18
.append("奇巧巧克力4.4" + Build.VERSION_CODES.KITKAT + "\n")//API 19
.append("奇巧巧克力4.4W" + Build.VERSION_CODES.KITKAT_WATCH + "\n")//API 20
.append("棒棒糖5.0" + Build.VERSION_CODES.LOLLIPOP + "\n")//API 21
.append("棒棒糖5.1" + Build.VERSION_CODES.LOLLIPOP_MR1 + "\n")//API 22
.append("棉花糖6.0" + Build.VERSION_CODES.M + "\n");//API 23
System.out.println(sb.toString());