現在、ファイルが外部SDにある場合、FileProvider getUriForFileメソッドはIllegalArgumentExceptionを生成します
ファイルがデバイスのメモリ(/ storage/emulated/0の下)にある場合、正常に動作します。
Uri videoUri = FileProvider.getUriForFile(this,
getApplicationContext().getPackageName() + ".provider",
new File(videoPath));
ここで、videoPathには次の値がありました。
videoPath = /storage/extSdCard/Android/data/com.podcastcutter.debug/files/episodeMp3/TEDTalks (video)/Why you should love statistics - Alan Smith.mp4
マニフェストファイルに含まれるもの:
<provider
Android:name="Android.support.v4.content.FileProvider"
Android:authorities="${applicationId}.provider"
Android:exported="false"
Android:grantUriPermissions="true">
<meta-data
Android:name="Android.support.FILE_PROVIDER_PATHS"
Android:resource="@xml/provider_paths"/>
</provider>
そしてここにprovider_paths:
<external-path name="external_files" path="."/>
FileProvider構成を変更してこの問題を解決するにはどうすればよいですか?
前もって感謝します。
生成された例外:
Java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/extSdCard/Android/data/com.podcastcutter.debug/files/episodeMp3/TEDTalks (video)/Why you should love statistics - Alan Smith.mp4
Android.support.v4.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.Java:711)
Android.support.v4.content.FileProvider.getUriForFile(FileProvider.Java:400)
追加の構成情報:
compileSdkVersion 25
buildToolsVersion "23.0.3"
minSdkVersion 16
targetSdkVersion 25
support libraries version : 25.1.1
FileProvider構成を変更してこの問題を解決するにはどうすればよいですか?
できません。 FileProvider
はリムーバブルストレージをサポートしていません。
私は自分のprovider.xmlに次の行を追加し、SDカードからファイルURIを取得するために正常に動作します。
<root-path name="external_files" path="/storage/" />
完全なxmlファイル:
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path
name="external_files"
path="." />
<root-path
name="external_files"
path="/storage/" />
</paths>
プロバイダーパスのタイプが間違っています。 videoPath
にはアプリの外部ストレージへのパスが表示されますが、プロバイダーのパスはデバイスのルート外部ストレージにリンクするexternal-path
を使用しています。 (/storage/emulated/0
)
プロバイダーパスを<external-files-path>...</external-files-path>
に変更します