1

そのため、4.1 の Galaxy s3 と 2.3 を実行する古い電話でアプリをテストしています。どちらの電話にもEnvironment.getExternalStorageDirectory().getAbsolutePath()sdカードはありませんが、galaxy s3で使用すると、storageというフォルダー内のsdcard0というフォルダーに移動します。古い電話で実行すると、パス mnt/sdcard/ が表示され、sdcard フォルダーは読み取り専用になります。

これらのディレクトリにフォルダを作成しようとしています。s3ではできますが、古い電話ではできません。

古い携帯電話にないストレージ フォルダに似たものはありますか、それとも sd カードが存在しない場合に sdcard フォルダに書き込むことはできますか?

編集:マニフェストに外部書き込み権限があります

4

1 に答える 1

4

一部の電話では、ドキュメントが示唆しているように、外部という言葉はあまり深刻に受け止めるべきではありません。

注:ここで「外部」という言葉を混同しないでください。このディレクトリは、メディア/共有ストレージと考えるとよいでしょう。これは、比較的大量のデータを保持できるファイル システムであり、すべてのアプリケーションで共有されます (権限を強制しません)。 従来、これは SD カードですが、保護された内部ストレージとは別のデバイスに内蔵ストレージとして実装され、コンピュータにファイルシステムとしてマウントできる場合もあります。

-methodを使用して、ストレージが本当に外部にあるかどうかを確認できます。削除できない場合は、いつでも書き込みできるはずです (アクセス許可が宣言されている場合)。Environment.isExternalStorageRemovable()

ただし、取り外し可能な場合、現在の状態を で確認する必要がありますEnvironment.getExternalStorageState()。これを使用する方法の簡単な例を次に示します。

String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
    // We can read and write!
} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
    // Mounted read only...
} else {
    // Something is wrong...
}

したがって、これらの場合は、外部ストレージに書き込むことができます。


重要: ドキュメントが複数のポイントで指定しているように、上記の方法はプライマリ外部ストレージに対して機能します。一部のデバイス (Motorola Xoom など) には、内部「外部」ストレージと SD カードの両方があります。

そのようなデバイスの「セカンダリ外部ストレージ」にアクセスする「一般化された」方法はないようですが、現在は Android 4.2 で導入された標準があります。

デバイスには外部ストレージの複数のインスタンスが含まれる場合がありますが、 現在、API を介して開発者に公開されているのはプライマリ外部ストレージのみです。

[...]

Android 4.2 以降、デバイスは複数のユーザーをサポートできるようになり、 外部ストレージは次の制約を満たす必要があります

  • [...]
  • セカンダリ外部ストレージは、アプリによって書き込み可能であってはなりません。

どのストレージ (内部または実際の外部) がプライマリと見なされるかは、ベンダーによって異なるようです。ここでできることはあまりありません (物事が混乱することなく...)


外部ストレージが存在しない場合は、保存するデータの種類に応じて、アプリケーションのInternal Storageまたは caching ディレクトリを使用できます。

于 2013-05-11T00:33:03.563 に答える