2013-03-08 97 views
1

我有兩個Android應用程序在市場上讀取/寫入SD卡。其中之一將備份文件存儲到SD卡。問題是,對於較新的智能手機,有兩個SD卡;嵌入在/ mnt/sdcard中的一個以及沒有標準化目錄路徑的可移動SD卡。我希望做的是爲用戶添加一個帶有兩個選項的單選按鈕組;將備份存儲在內部SD卡上(默認)或存儲在可移動SD卡上。困境是獲得可移動SD卡的正確路徑並將該路徑存儲在變量中。將文件存儲在可移動的SD卡上

我發現了一個似乎適用於所有android設備的linux命令。 「df」命令列出了嵌入式sdcard(/ mnt/sdcard)以及可移動sdcard的位置。我知道如何使用dataoutputstream類發送命令,但是我卡住的地方是從命令的輸出中讀取數據,並從輸出中篩選出我需要的部分。

這裏是什麼樣的「DF」命令的輸出看起來像一個例子:

/ $ df 
Filesystem   1K-blocks  Used Available Use% Mounted on 
tmpfs     369128  32 369096 0% /dev 
tmpfs     369128   0 369128 0% /mnt/asec 
tmpfs     369128   0 369128 0% /mnt/obb 
/dev/block/mmcblk0p1 516040 476832  39208 92% /system 
/dev/block/mmcblk0p7 13813852 2948206 10865646 21% /data 
/dev/block/mmcblk0p2 533616  8574 525042 2% /cache 
tmpfs     369128   0 369128 0% /Removable 
/dev/fuse    13813852 2948206 10865646 21% /mnt/sdcard 
/dev/block/vold/179:9 30306304 12222624 18083680 40% /Removable/MicroSD 

上述輸出來自於我的華碩變壓器平板電腦,正如你所看到的,使用路徑/移動/的MicroSD作爲可移動SD卡的目錄。同樣,我需要做的就是在代碼中抓取這個輸出,過濾掉所有不必要的數據,然後將路徑存儲在一個變量中。

我不想找人爲我編寫代碼我只需要找到更好的引用,以便任何類將允許我抓取輸出並過濾它。

任何幫助表示讚賞。

+0

我認爲這可以幫助私人字符串的root = Environment.getExternalStorageDirectory()的getPath() + Tags.DIRECTORY_PATH – DjHacktorReborn 2013-03-08 05:30:46

+0

感謝您的答覆。不幸的是,ExternalStorage類早於具有嵌入式SD卡的智能手機,並且只指向/ mnt/sdcard。 – XSYLUS 2013-03-08 08:11:39

回答

2

我認爲你必須在SD卡或內存中創建自己的文件夾目錄。像我在下面顯示的 。

if (sdCardDir != null) 
     return (new File(sdCardDir, CALLHISTORY_FILE).exists()); 

    ArrayList<File> posibleDir = new ArrayList<File>(); 
    File esd = Environment.getExternalStorageDirectory(); 
    posibleDir.add(new File(esd, "external_sd")); 
    posibleDir.add(esd); 
    posibleDir.add(new File("/sdcard")); 

    // Use first possible sdcard directory 
    for (File dir : posibleDir) { 
     if (dir.exists() && dir.isDirectory()) { 
      sdCardDir = new File(dir, TBACKUP_DIR); 
      if(!sdCardDir.exists()) 
       sdCardDir.mkdir(); 
      return true; 
     } 
    } 

    throw new IOException(); 
} 
+0

我還不清楚這對我有什麼幫助。系統始終假定嵌入式不可移動SD卡是正確的位置。如果設備需要恢復,可能會導致/ mnt/sdard在該過程中被擦除,從而破壞備份的目的。 – XSYLUS 2013-04-18 04:34:18

+0

由於有一種方法可以將「df」這樣的命令發送到終端,應該有一種方法可以將輸出讀回到程序中,但到目前爲止,我發現的唯一方法是將輸出轉換爲字節並使其不可讀。 – XSYLUS 2013-04-18 04:36:52