/**
* 得到屏幕的寬度
*/
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());