0

StorageActionFramework ACTION_OPEN_DOCUMENT インテントを使用して特定のファイルの情報を要求する方法はありますか? 具体的には、MediaStore から取得した特定のファイルの URI を持っています。書き込みアクセス権があるかどうかを確認し、ある場合は削除したいと思います。さらに、UI なしでこれを行いたいと思います (この特定のコンテキストでは何も必要ありません)。

intent.addCategory (Intent.CATEGORY_OPENABLE)ドキュメントには、たとえば、を使用してファイルのクラスに対してそれを行う方法が記載されています。また、特定の種類のファイルに制限するにはintent.setType ("image/*")、たとえば . しかし、特定のファイルに制限するものは何もありません。

また、StorageActionFramework から一連のファイルを受け取ると、個々のファイルのプロパティを表示できることにも気付きました。

ACTION_OPEN_DOCUMENT を使用して SAF の URI を取得できれば、それを使用DocumentsContract.deleteDocument()して削除できるようです。

より多くのコンテキスト

私の状況では、ユーザーはアプリ内からカメラ アプリを呼び出して、1 枚以上の写真を撮りました。次に、私のコードは MediaStore にクエリを実行して、新しい画像のファイル名を決定します。次に、ファイルをアプリ固有のディレクトリに移動したいと考えています。これは、「内部」ストレージと「外部」ストレージにあるファイルでは問題なく機能しますが、リムーバブル ストレージでは機能しません。

長期的には、このソリューションは明らかに多くの永続的なストレージを使用するため、不適切です (ただし、ストレージ サイズが急速に増加しているため、これは緩和されます)。ただし、私のアプリは、アプリ経由で取得した画像ファイルを制御する必要があるため、それらをリムーバブル ストレージに残すと、アプリが破損する可能性があります。

もう 1 つの複雑な要因は、複数の写真を撮影して所定の場所に保存するための Android API がないことです。1 枚の写真を撮るための API がありますが、それは私のアプリケーションでは機能しません。したがって、私は、カメラ アプリがファイルを必要な場所に保存し、後でそれらを移動できるようにするしかありません。

他の一部のアプリは、単に写真のコピーを作成し、そのコピーをプライベート ディレクトリに保存します。私はそれを行うことができますが、それはストレージの問題をさらに悪化させます. 長期的な解決策は、おそらくローカル プライベート キャッシュと組み合わせてクラウド ストレージを使用することです。

4

1 に答える 1

1

StorageActionFramework ACTION_OPEN_DOCUMENT インテントを使用して特定のファイルの情報を要求する方法はありますか?

いいえ。まず、Storage Access Framework はファイルとはほとんど関係がありません。

全体の構造に最も近いのはUri、ユーザーがその近くにあるドキュメントを選択して開くことができるように、開始を指定できる場合です。これは便利な機能ですが、サポートされていません。

ドキュメントには、たとえば、intent.addCategory (Intent.CATEGORY_OPENABLE) を使用してファイルのクラスに対してそれを行う方法が記載されています。

いいえ、返される は、、および関連するメソッドで動作する必要があり、 の は を返すことができる必要があることをCATEGORY_OPENABLE意味します。ファイルとはほとんど関係ありません。UriopenInputStream()openOutputStream()query()UriOpenableColumns

特定の種類のファイルに制限するには、intent.setType ("image/*")

これにより、コンテンツが特定の MIME タイプ (またはワイルドカード) に制限されます。ファイルとはほとんど関係ありません。


書き込みアクセス権があるかどうかを確認し、ある場合は削除したいと思います

を介して、コンテンツを変更するための書き込みアクセス権を持っている場合がありますopenOutputStream()。基になるコンテンツを削除する手段があるとは知りません。

さらに、UIなしでこれを行いたい

使用する唯一の理由ACTION_OPEN_DOCUMENTは、UI を表示して、ユーザーがコンテンツを選択できるようにすることです。


次に、私のコードは MediaStore にクエリを実行して、新しい画像のファイル名を決定します

カメラアプリが を更新する必要がないため、MediaStore特に信頼できるとは思えません。

もう 1 つの複雑な要因は、複数の写真を撮影して所定の場所に保存するための Android API がないことです。1枚の写真を撮るためのAPIがありますが、それは私のアプリケーションでは機能しません

ユーザーが複数の写真を連続して撮影できるようにするカメラアプリの要件はないため、これは特に信頼できるとは思えません。

于 2016-10-23T16:19:09.787 に答える