[英]How to access External Micro SD card of the phone?
有誰知道如何獲得手機的SD卡?
我知道有人會告訴我它的getExternalStorageDirectory()
或Environment.getExternalStoragePublicDirectory()
。
但不幸的是,它並不總是指向所有型號的外置SD卡。 例如,我在一個三星模型中嘗試過它可以正常但另一個沒有,LG沒有。 而且根據文檔也不總是外部SD卡。
這里是,
*“不要在這里混淆”外部“這個詞。
此目錄最好被視為媒體/共享存儲。 它是一個文件系統,可以容納相對大量的數據,並在所有應用程序之間共享(不強制執行權限)。
傳統上這是一張SD卡,但它也可以作為內置存儲實現在與受保護的內部存儲不同的設備中,並且可以作為文件系統安裝在計算機上。“*
在我的應用程序中,我希望用戶只使用SD卡。
我怎么能克服這個?
我遇到了同樣的問題。 我不知道如何訪問外部SD卡位置。 我正在開發一個應用程序,其中我必須訪問外部SD卡讀取和寫入一些東西。 我嘗試了不同的方法,包括預定義的android庫。 這些是我使用的方法: -
這些是未命中的: -
File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File myFile = new File(path, "test.txt");
File root = Environment.getExternalStorageDirectory();
File dir = new File(root.getAbsolutePath()+"/Download");
File f = getExternalFilesDir(null);
File file = new File(f,"test.txt");
這些都是訪問內部存儲“/ storage / sdcard0”或“/ storage / emulated / 0”。 原因是在Android設備中,內部存儲器的一部分充當外部存儲器。 因此,如果您有大約16 Gb或更高的內部存儲空間,並且有一個選項可以使用SD卡擴展設備,那么這是我猜測訪問外部SD卡的唯一方法,因為即使是內置的功能和庫也是如此android studio將訪問內部存儲作為外部存儲。
最后我用了這個: -
String extFilePath = "/storage/sdcard1/Download";
File myFile = new File(extFilePath, "test.txt");
它起作用了。 所以你看到預先定義的android庫/函數失敗的地方,我能夠用簡單的String來完成任務。
除此之外,如果您想檢查設備的外部存儲路徑,請嘗試以下方法: -
String sdpath,sd1path,usbdiskpath,sd0path;
if(new File("/storage/extSdCard/").exists())
{sdpath="/storage/extSdCard/";
Log.i("Sd Cardext Path", sdpath);}
if(new File("/storage/sdcard1/").exists())
{sd1path="/storage/sdcard1/";
Log.i("Sd Card1 Path",sd1path);}
if(new File("/storage/usbcard1/").exists())
{usbdiskpath="/storage/usbcard1/";
Log.i("USB Path",usbdiskpath);}
if(new File("/storage/sdcard0/").exists())
{sd0path="/storage/sdcard0/";
Log.i("Sd Card0 Path",sd0path);}
檢查這些可能會幫助您了解訪問外部SD卡時要選擇的路徑。 我希望這有助於其他人。
查看CommonsWare關於同一主題的答案https://stackoverflow.com/a/5695129/582571
他提到我們無法區分移動設備的內置外部存儲和可移動外部存儲。
但是,通過Aleadam回答https://stackoverflow.com/a/6049446/582571,我們只能通過isExternalStorageRemovable()函數檢查外部存儲是否可移動。
我希望你能有所收獲。
您可以在以下條件下檢查SD卡是否可用
if (android.os.Environment.getExternalStorageState().equals(
android.os.Environment.MEDIA_MOUNTED)) {
//Check for the file
File appFolder = new File(Environment.getExternalStorageDirectory() + File.separator
+ context.getString(R.string.app_name));
boolean exist = appFolder.exists();
}
可移動存儲路徑在設備到設備之間是不同的。
可移除路徑的示例是:
1. mnt / ext
2. mnt / externalsd
3. mnt / external_sd
我的設備使用mnt / external_sd。
您可以從vold.fstab文件中檢查文件的路徑。
此文件位於系統文件夾下。
文件的路徑是:
我的最新設備遇到了同樣的問題。 然后我發現可以在/ mnt / ext_sdcard /訪問可移動SD卡。 它對我有用。 我能夠在此位置列出存儲在可移動外部SD卡中的所有文件。
以下是代碼:new File(“/ mnt / ext_sdcard /”)。listFiles();
您可以通過以下方式獲得路徑.....
File sdCardRoot = Environment.getExternalStorageDirectory();
PATH = sdCardRoot.toString();
如果路徑不存在,那么你必須通過mkdir()生成路徑.....
private File getTempFile(Context context) {
final File path = new File(Environment.getExternalStorageDirectory(),
context.getPackageName());
if (!path.exists()) {
path.mkdir();
}
return new File(path, "new.png");
}
上面的函數將返回文件...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.