FileProvider
を使用してプライベートパスからビデオを再生しようとしています。
Java.lang.IllegalArgumentException: Failed to find configured root that contains /data/data/XXXXX(Package)/files/Videos/final.mp4
コード:
<paths>
<files-path path="my_docs" name="Videos/" />
</paths>
Javaコード:
File imagePath = new File(getFilesDir(), "Videos");
File newFile = new File(imagePath, "final.mp4");
Log.d(TAG, "-------------newFile:"+newFile.exists());//True here
//Exception in below line
Uri contentUri = FileProvider.getUriForFile(this,"com.wow.fileprovider", newFile);
Manifest.xml
<provider
Android:name="Android.support.v4.content.FileProvider"
Android:authorities="com.wow.fileprovider"
Android:exported="false"
Android:grantUriPermissions="true">
<meta-data
Android:name="Android.support.FILE_PROVIDER_PATHS"
Android:resource="@xml/file_paths" />
これに関する手がかりはありますか?
おかげでニッツ
name
とpath
が反転しています。 name
はUri
に含まれるものであり、path
はファイルシステム上のルート内の相対位置です。
と一緒に行きます:
<paths>
<files-path name="my_docs" path="Videos/" />
</paths>
基本的な状況はまったく同じでした。すべてを正しく定義しました(xmlのfiles-path)が、同じ例外につながるもう1つのことがあります。追加とコメントが読みにくいように、別の回答を追加します。
私は次のようなファイルを保存するディレクトリを作成/読み取りました:
context.getDir("Documents", Context.MODE_PRIVATE)
これにより、次のようなパスになります。
/data/user/0/ch.myapp/app_Documents/6c3c70d5-af66-48ef-8dfc-f4341de4e1bd.docx
次に、ディレクトリの作成を次のように変更しました。
File directory = new File(context.getFilesDir(), "Documents");
if (!directory.exists()) {
directory.mkdir();
}
これにより、次のようなパスになります。
/data/user/0/ch.myapp/files/Documents/6c3c70d5-af66-48ef-8dfc-f4341de4e1bd.docx
ドキュメントによると ディレクトリを開く 私が理解する限り、2つの方法は同等であるはずです。しかし、それは別の道を作ります...たぶん、ドキュメンテーションでは定式化が明確ではないかもしれませんが、間違って書かれています。
getDir(名前、モード)
アプリの一意のファイルシステムディレクトリ内に新しいディレクトリを作成します(または既存のディレクトリを開きます)。この新しいディレクトリは、getFilesDir()によって提供されるディレクトリ内に表示されます。