将文件存储在可移动的SD卡上

问题描述:

我有两个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

我认为你必须在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