簡體   English   中英

如何訪問手機的外接Micro SD卡?

[英]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文件中檢查文件的路徑。
此文件位於系統文件夾下。
文件的路徑是:

“/etc/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM