1. 程式人生 > >Android檔案路徑獲取

Android檔案路徑獲取

圖片Bitmap相關知識:Android Bitmap計算所佔記憶體空間的大小 getRowBytes和getByteCount()

int size = bitmap.getRowBytes() * bitmap.getHeight();

獲取大小,Bitmap所佔用的記憶體空間數等於Bitmap的每一行所佔用的空間數乘以Bitmap的行數

可以獲取Bitmap大小的方法有如下幾種:

1. getRowBytes:Since API Level 1

2. getByteCount:Since API Level 12

3. getAllocationByteCount:Since API Level 19

相容性解決方案:

public static int getBitmapSize(Bitmap bitmap) {  

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {  //SInce API 19  

         return bitmap.getAllocationByteCount();  

     }  

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1) { //Since API 12  

         return bitmap.getByteCount();  

     }  

     return bitmap.getRowBytes() * bitmap.getHeight();               

}

Note:

如果點陣圖被重用、解碼更小尺寸的其他點陣圖或重新配置,getAllocationByteCount()的計算結果有可能比getByteCount()的結果大一些。

獲取sd卡快取路徑或手機快取路徑

2017年03月20日 14:20:50

閱讀數:911

獲取應用程式在手機的快取路徑

有sd卡就獲取sd卡快取路徑

沒有sd卡就獲取手機快取路徑

public File getDiskCacheDir(Context context, String uniqueName) {  

    String cachePath;  

    if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())  

            || !Environment.isExternalStorageRemovable()) {  

        cachePath = context.getExternalCacheDir().getPath();  

    } else {  

        cachePath = context.getCacheDir().getPath();  

    }  

    return new File(cachePath + File.separator + uniqueName);  

}  

可以看到,當SD卡存在或者SD卡不可被移除的時候,就呼叫getExternalCacheDir()方法來獲取快取路徑,否則就呼叫getCacheDir()方法來獲取快取路徑。前者獲取到的就是 /sdcard/Android/data/<application package>/cache 這個路徑,而後者獲取到的是 /data/data/<application package>/cache 這個路徑。

接著又將獲取到的路徑和一個uniqueName進行拼接,作為最終的快取路徑返回。那麼這個uniqueName又是什麼呢?其實這就是為了對不同型別的資料進行區分而設定的一個唯一值,比如說在網易新聞快取路徑下看到的bitmap、object等資料夾

File.separator

比如說要在temp目錄下建立一個test.txt檔案,在Windows下應該這麼寫:

File file1 = new File ("C:\tmp\test.txt");

在Linux下則是這樣的:

File file2 = new File ("/tmp/test.txt");

如果要考慮跨平臺,則最好是這麼寫:

File myFile = new File("C:" + File.separator + "tmp" + File.separator, "test.txt");

File類有幾個類似separator的靜態欄位,都是與系統相關的,在程式設計時應儘量使用。

separatorChar

public static final char separatorChar

與系統有關的預設名稱分隔符。此欄位被初始化為包含系統屬性 file.separator 值的第一個字元。在 UNIX 系統上,此欄位的值為 '/';在 Microsoft Windows 系統上,它為 '\'。

separator

public static final String separator

與系統有關的預設名稱分隔符,為了方便,它被表示為一個字串。此字串只包含一個字元,即 separatorChar。

pathSeparatorChar

public static final char pathSeparatorChar

與系統有關的路徑分隔符。此欄位被初始為包含系統屬性 path.separator 值的第一個字元。此字元用於分隔以路徑列表 形式給定的檔案序列中的檔名。在 UNIX 系統上,此欄位為 ':';在 Microsoft Windows 系統上,它為 ';'。

pathSeparator

public static final String pathSeparator

與系統有關的路徑分隔符,為了方便,它被表示為一個字串。此字串只包含一個字元,即 pathSeparatorChar。

方法getDiskCacheDir()來判斷是否有SD卡,如果有再返回一個自己組裝的路徑。

/**

     * 判斷是否有SD卡來得到儲存路徑

     * 再在路徑之後加上自己進行Android/data目錄下的快取路徑

     * 返回新的SD卡快取的路徑

     *

     * @param context

     * @param uniqueName

     * @return

     */

    public File getDiskCacheDir(Context context, String uniqueName) {

        String cachePath;

        if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())

                || !Environment.isExternalStorageRemovable()) {

            cachePath = context.getExternalCacheDir().getPath();

        } else {

            cachePath = context.getCacheDir().getPath();

        }

        return new File(cachePath + File.separator + uniqueName);

    }