2

SDカードから読み書きする2つのAndroidアプリが市場に出回っています。そのうちの 1 つは、バックアップ ファイルを SD カードに保存します。問題は、新しいスマートフォンには 2 つの SD カードがあることです。/mnt/sdcard に埋め込まれたものと、標準化されたディレクトリ パスを持たないリムーバブル SD カードです。私が望んでいるのは、ユーザー向けの 2 つのオプションを持つラジオ ボタン グループを追加することです。内部 SD カード (デフォルト) にバックアップを保存するか、リムーバブル SD カードに保存します。問題は、リムーバブル SD カードの正しいパスを取得し、そのパスを変数に格納することです。

すべての Android デバイスで動作するように見える Linux コマンドを発見しました。「df」コマンドは、組み込み SD カード (/mnt/sdcard) とリムーバブル SD カードの両方の場所を一覧表示します。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

上記の出力は、ご覧のとおり、/Removable/MicroSD パスをリムーバブル SD カードのディレクトリとして使用する ASUS Transformer タブレットからのものです。繰り返しますが、コードでこの出力を取得して不要なデータをすべて除外し、パスを変数に格納するだけです。

コードを書いてくれる人を探しているわけではありません。出力を取得してフィルタリングできるクラスへのより良い参照を見つける必要があるだけです。

どんな助けでも大歓迎です。

4

1 に答える 1

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();
}
于 2013-04-17T10:49:51.533 に答える