日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 反射获取内外置存储卡方法

發布時間:2023/12/10 Android 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 反射获取内外置存储卡方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

以前的Android(4.1之前的版本)中,SDcard跟路徑通過“/sdcard”或者“/mnt/sdcard”來表示存儲卡,而在Jelly Bean系統中修改為了“/storage/sdcard0”,以后可能還會有多個SDcard的情況。

目前為了保持和之前代碼的兼容,sdcard路徑做了link映射。

為了使您的代碼更加健壯并且能夠兼容以后的Android版本和新的設備,請通過Environment.getExternalStorageDirectory().getPath()來獲取sdcard路徑,

如果您需要往sdcard中保存特定類型的內容,可以考慮使用Environment.getExternalStoragePublicDirectory(String type)函數,該函數可以返回特定類型的目錄,目前支持如下類型:

DIRECTORY_ALARMS //警報的鈴聲

DIRECTORY_DCIM //相機拍攝的圖片和視頻保存的位置

DIRECTORY_DOWNLOADS //下載文件保存的位置

DIRECTORY_MOVIES //電影保存的位置, 比如 通過google play下載的電影

DIRECTORY_MUSIC //音樂保存的位置

DIRECTORY_NOTIFICATIONS //通知音保存的位置

DIRECTORY_PICTURES //下載的圖片保存的位置

DIRECTORY_PODCASTS //用于保存podcast(博客)的音頻文件

DIRECTORY_RINGTONES //保存鈴聲的位置


如果您的應用需要下載以上類型的文件,則可以放到上面對應的目錄中去來幫助用戶查找,比如最常用的就是下載文件了。如果您開發了一個瀏覽器,在下載文件的時候把文件下載到Download目錄則方便用戶以后查找該文件,當然如果你希望用戶需要通過啟動您的程序來查看他們下載的文件,您也可以不這么做 ^_^。


在使用這些目錄保存文件的時候,需要注意一點:其他程序也有可能在使用這些目錄,在保存文件前,注意判斷下文件是否已經存在,不要覆蓋了用戶之前的數據。


Android4.1之后Android增加了多存儲卡的支持,一般手機會存在內置存儲卡和外置存儲卡,也可能有多個外置存儲卡。如何獲取存儲卡路徑呢?

特別是各種android設備的存儲器路徑,是不一樣的,比如T卡路徑,可能是/mnt/sdcard、/mnt/extsd、/mnt/external_sd 或者/mnt/sdcard2。有時內置存儲器的路徑也可能是/mnt/sdcard,而host usb存儲器的路徑也是各種各樣的。

下面方法是通過反射,調用StorageManager的隱藏接口getVolumePaths(),實現獲取存儲器列表。

[java]

package ckl.storage.list;


import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

import android.app.Activity;

import android.os.storage.StorageManager;


public class StorageList {

private Activity mActivity;

private StorageManager mStorageManager;

private Method mMethodGetPaths;


public StorageList(Activity activity) {

mActivity = activity;

if (mActivity != null) {

mStorageManager = (StorageManager)mActivity

.getSystemService(Activity.STORAGE_SERVICE);

try {

mMethodGetPaths = mStorageManager.getClass()

.getMethod("getVolumePaths");

} catch (NoSuchMethodException e) {

e.printStackTrace();

}

}

}


public String[] getVolumePaths() {

String[] paths = null;

try {

paths = (String[]) mMethodGetPaths.invoke(mStorageManager);

} catch (IllegalArgumentException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

e.printStackTrace();

}

return paths;

}

}

在android2.3中,判斷內置SD卡是否掛載:


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

{

//為true的話,內置sd卡存在

}


判斷外置SD卡是否掛載:

if(Environment.getStorageState(Environment.STORAGE_PATH_SD2).equals(Environment.MEDIA_MOUNTED))

{

//為true的話,外置sd卡存在

}


順帶描述怎么取得sdcard的空間大小,

File sdcardDir = Environment.getExternalStorageDirectory();

StatFs sf = new StatFs(sdcardDir.getPath()); //sdcardDir.getPath())值為/mnt/sdcard,想取外置sd卡大小的話,直接代入/mnt/sdcard2

long blockSize = sf.getBlockSize(); //總大小

long blockCount = sf.getBlockCount();

long availCount = sf.getAvailableBlocks(); //有效大小


轉載于:https://my.oschina.net/u/1244156/blog/371897

總結

以上是生活随笔為你收集整理的Android 反射获取内外置存储卡方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。