Android開發之小工具

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





發佈了59 篇原創文章 · 獲贊 10 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章