ContextCompat.getExternalFilesDirs(context, null)言う:なぜContextCompat.getExternalFilesDirsにアクセスできないのですか?
アプリケーションは、それが所有している永続的なファイルを置くことができ、すべての外部ストレージデバイス上のアプリケーション固有のディレクトリへの絶対パスを返します。
Huawei社の名誉は、Android 5.1.1を実行している。例えば、そのメソッドから以下を返す:
/storage/emulated/0/Android/data/my.package.name/files
/storage/sdcard1/Android/data/my.package.name/files
第ディレクトリリムーバブルSDカードです。しかし、そのディレクトリを読み書きしようとすると例外が発生します。android.system.ErrnoException: open failed: EACCES (Permission denied)
このアプリケーションにはWRITE_EXTERNAL_STORAGE
があります。 Android 4.4.4を実行しているSamsung Galaxy Note 4でもうまく動作します。これは5.1.1での問題であるため、Android 6.0のオプションの権限とは関係ありません。
APIにはthe application can place persistent files it owns
と表示されていますが、それは当てはまりません。
最近のSamsungデバイスを含め、他のデバイスからのレポートも聞いたことがあります。これは、これを正しく実装していないOEMか、Androidの複雑なストレージフレームワークに欠けているものがありますか?
これはこのデバイスと一部のデバイスでこれを実証するコードです。
File removable = ContextCompat.getExternalFilesDirs(context, null)[1];
if (removable.exists() && removable.canRead() && removable.canWrite()) {
File test = new File(removable, "test");
test.createNewFile(); // Throws the exception mentioned above
}
このディレクトリにmkdirファイルを作成、移動、または移動しようとすると、失敗します。
「私はそのディレクトリに読み取りまたは書き込みをしようとした場合を」フォーマットする必要がありますか?あなたはそれらの2つを挙げる。 「アプリにはWRITE_EXTERNAL_STORAGEがあります」 - これはAndroid 4.4以降の場所とは関係ありません。 – CommonsWare
上記の更新。 2番目はリムーバブルSDカードです。 – cottonBallPaws
さて、あなたはそれへの読み書きアクセスが必要です。完全なスタックトレースと共に、失敗したコードを投稿することを検討するかもしれません。 IMHOでは、メーカーが外付けストレージよりもリムーバブルストレージを台無しにする可能性が高いです。 – CommonsWare