[解決済み] Android 4.0以降で外部SDカードのパスを取得するにはどうすればよいですか?
2023-02-14 19:30:41
質問
サムスン電子のギャラクシーS3
には外部 SD カード スロットが搭載されています。
/mnt/extSdCard
.
このパスを取得するには、次のような方法で行います。
Environment.getExternalStorageDirectory()
?
これは
mnt/sdcard
と表示され、外部 SD カード用の API が見当たりません。(または、一部のタブレットのリムーバブル USB ストレージ)。
どのように解決するのですか?
私が見つけた解決策のバリエーションがあります ここで
public static HashSet<String> getExternalMounts() {
final HashSet<String> out = new HashSet<String>();
String reg = "(?i).*vold.*(vfat|ntfs|exfat|fat32|ext3|ext4).*rw.*";
String s = "";
try {
final Process process = new ProcessBuilder().command("mount")
.redirectErrorStream(true).start();
process.waitFor();
final InputStream is = process.getInputStream();
final byte[] buffer = new byte[1024];
while (is.read(buffer) != -1) {
s = s + new String(buffer);
}
is.close();
} catch (final Exception e) {
e.printStackTrace();
}
// parse output
final String[] lines = s.split("\n");
for (String line : lines) {
if (!line.toLowerCase(Locale.US).contains("asec")) {
if (line.matches(reg)) {
String[] parts = line.split(" ");
for (String part : parts) {
if (part.startsWith("/"))
if (!part.toLowerCase(Locale.US).contains("vold"))
out.add(part);
}
}
}
}
return out;
}
オリジナルのメソッドをテストして動作したのは
- Huawei X3 (純正)
- ギャラクシー S2 (純正)
- ギャラクシー S3 (在庫品)
テスト時のアンドロイドのバージョンは定かではありません。
私の修正したバージョンは、以下のものでテストしました。
- Moto Xoom 4.1.2 (純正)
- OTG ケーブルを使用した Galaxy Nexus (cyanogenmod 10)
- HTC Incredible (cyanogenmod 7.2) これは、内部と外部の両方を返しました。このデバイスは、getExternalStorage() が代わりに sdcard へのパスを返すため、内部がほとんど使用されないという点でちょっと変わり種です。
と、メイン ストレージとして SD カードを使用するシングル ストレージ デバイスの一部です。
- HTC G1 (cyanogenmod 6.1)
- HTC G1 (純正)
- HTC Vision/G2 (在庫あり)
Incredible を除いて、これらのデバイスはすべてリムーバブル ストレージを返しただけです。おそらく、私が行うべき余分なチェックがいくつかあると思いますが、これは少なくとも、これまでに私が見つけたどの解決策よりも少しはましです。
関連
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] インスタンス状態の保存を使用してアクティビティ状態を保存するにはどうすればよいですか?
-
[解決済み] Androidで画面の大きさをピクセル単位で取得する方法
-
[解決済み] 深くネストされたスタックから離れるとき、Fragmentのバックスタックをクリーンアップする方法はこれで良いのでしょうか?
-
[解決済み] Eclipseでのandroid:configChangesでのAdmobエラー
-
[解決済み] 「KotlinとAndroidで「パラメータTを推測するのに十分な情報がありません。
-
[解決済み] FloatingActionButtonのサンプルとサポートライブラリ
-
[解決済み] XMLで矩形を描画できますか?
-
[解決済み] データベースでリサイクルビューを使用する
-
[解決済み] Androidのadb logcatでTAG名で特定のメッセージを除外する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】リムーバブルSDカードの場所を検索する。
-
[解決済み] Androidの連絡先リストを呼び出すには?
-
[解決済み] XMLで矩形を描画できますか?
-
[解決済み] DialogFragmentを正しく終了させるには?
-
[解決済み] Androidのadb logcatでTAG名で特定のメッセージを除外する方法は?
-
[解決済み] 複数のフィルタを持つBroadcastReceiverか、複数のBroadcastReceiverか?
-
[解決済み] TextView.setTextSizeの挙動がおかしい - テキストビューのテキストサイズを画面ごとに動的に設定する方法
-
[解決済み] proguard hell - 参照されているクラスが見つかりません。
-
[解決済み] FABアイコンの色を設定する
-
[解決済み] Androidで内部/外部メモリの空き容量を取得する