0

私の Android Unity プラグインでは、unity が作成したスクリーンショットへのアクセスを提供したいので、ドキュメントごとのアプリApplication.persistentDataPathのフォルダーであるへのアクセスを提供します...files

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <files-path name="files" path="."/>
</paths>

外部ストレージも読み書きしたい。しかし、追加するとすぐに...

<!-- For access `DICM/Camera` -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

...マニフェストに、Unity はスクリーンショットを外部ストレージに追加するためFileProvider、そこからファイルを提供することはできません。

java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/emulated/0/Android/data/<PACKAGE_NAME>/files/<FILE_NAME>

どこにあるアプリfilesディレクトリからでもファイルを提供するにはどうすればよいですか?

4

1 に答える 1

2

通常、構成に一致しないを渡すと、からメッセージが表示されます。getUriForFile()File

getFilesDir()プロバイダーのメタデータでは、サービスを提供する場所としてのみ(およびその下の場所) をサポートしています。ただし、File渡したオブジェクトはgetUriForFile()から構築されているように見えますがgetExternalFilesDir()、これは同じではありません。

残念ながら、 にFileProvider直接アクセスすることはできませんgetExternalFilesDir()<external-path>近づき、ドキュメントはそれが を指していると主張していgetExternalFilesDir()ます。これはドキュメントのバグです。<external-path>実際には、外部ストレージのルート (つまり、) を指していEnvironment.getExternalStorageDirectory()ます。

オプションは次のとおりです。

  1. FileProvider内部ストレージ ファイルだけに固執しfile:// Uri、外部ストレージ上のファイルの値を使用します

  2. <external-path>アプリケーション ID に基づいて、外部ストレージの特定の部分を指すプロバイダー メタデータに追加する値を計算します。

  3. オプションとして追加されるmyStreamProviderを使用します<external-files-path>

  4. またはContentProviderを使用するのではなく、独自にロールしてこれを処理してください。FileProviderStreamProvider

于 2016-03-08T15:42:00.923 に答える