1. ホーム
  2. アンドロイド

[解決済み】リムーバブルSDカードの場所を検索する。

2022-04-08 19:32:03

質問

外付けSDカードの場所を確認する一般的な方法はありますか?

と混同しないようにお願いします。 外部ストレージ .

Environment.getExternalStorageState() は、内部 SD マウントポイントへのパスを返します。 /mnt/sdcard . しかし、問題は外部SDについてです。どうすれば、次のようなパスを取得できるのでしょうか。 /mnt/sdcard/external_sd (デバイスによって異なる場合があります)?

の出力のフィルタリングで終わりかな。 mount コマンドをファイルシステム名で実行します。しかし、この方法が十分に堅牢であるかどうか、自信がありません。

解決方法は?

<ブロッククオート

Environment.getExternalStorageState() は、内部 SD マウントポイントへのパスを返します。

いいえ。 Environment.getExternalStorageDirectory() は、デバイスの製造元が「外部ストレージ」と見なしたものを指します。あるデバイスでは、これはSDカードのようなリムーバブルメディアです。あるデバイスでは、これはデバイス上のフラッシュの一部です。ここで、quot;外部ストレージとは、少なくともAndroid 1.xおよび2.xでは、ホストマシンにマウントされたときにUSBマスストレージモードでアクセス可能なものを指します。

<ブロッククオート

しかし、質問は外部SDについてです。どのようにして "/mnt/sdcard/external_sd" のようなパスを取得するのでしょうか(デバイスによって異なるかもしれません)?

Androidには、上記のような外部ストレージとは別に、quot;外部SD"という概念がありません。

外部ストレージをオンボードフラッシュとし、SDカードも搭載している端末メーカーの場合、SDカードが使えるかどうか(保証はできません)、どのようなパスで使用するかなど、そのメーカーに問い合わせることが必要です。


アップデイト

最近気になることを2つ。

まず、Android 4.4+ では、リムーバブルメディア (例: 外部 SD") への書き込みアクセスは、そのメディア上のロケーションが getExternalFilesDirs()getExternalCacheDirs() . 参照 Dave Smithの優れた分析 特に低レベルの詳細が必要な場合は、こちらをご覧ください。

次に、リムーバブルメディアへのアクセスがAndroid SDKの一部であるかどうかについて、誰かがとやかく言わないように、以下をご覧ください。 Dianne Hackbornの評価 :

Android 4.4まで、公式のAndroidプラットフォームは、以下のSDカードをサポートしていません。 すべて 外部ストレージが SD カードである昔ながらのストレージ レイアウト(現在もプラットフォームでサポートされています)と、Android 3.0 に追加された小さな機能(追加の SD カードをスキャンしてメディア プロバイダに追加し、アプリにそのファイルへの読み取り専用アクセスを与える)です(これも現在もプラットフォームでサポートされています)。

Android 4.4は、アプリケーションがSDカードをストレージとして実際に使用できるようになった最初のリリースです。 それ以前のSDカードへのアクセスは、プライベートでサポートされていないAPIを使用していました。 アプリのパーミッションを必要とせず、アプリ固有のストレージ領域を自由に使用でき、ファイルピッカーを経由する限り、SD カード上の他のファイルにもアクセスできます。