私は Androidチュートリアル に従ってファイルを共有しようとしています。私はFileProvider
を次のように設定しました:
メインマニフェストxmlで:
_<provider
Android:name="Android.support.v4.content.FileProvider"
Android:authorities="com.example.mysecondapp.fileprovider"
Android:exported="false"
Android:grantUriPermissions="true" >
<meta-data
Android:name="Android.support.FILE_PROVIDER_PATHS"
Android:resource="@xml/filepaths" />
</provider>
_
res/xml/filpaths.xmlファイル:
_<paths xmlns:Android="http://schemas.Android.com/apk/res/Android">
<external-path name="myexternalimages" path="SpCars_album/" />
</paths>
_
そして私のコードでは、私は以下を試しています:
_File requestFile = new File(mImageFilenames[position]);
try {
fileUri = FileProvider.getUriForFile(
SeventhActivity.this,
"com.example.mysecondapp.fileprovider",
requestFile);
} catch (IllegalArgumentException e) {
Log.e("File Selector",
"The selected file can't be shared: " +
mImageFilenames[position]);
}
_
RequestFileは、ファイルの適切な作業パスでインスタンス化されます。そのファイルのパスは、getExternalFilesDir(Environment.DIRECTORY_PICTURES)
が返すものから始まります。すべてが収まるように見えるので、エラーの原因を理解できません。前もって感謝します。
そのファイルのパスは、getExternalFilesDir(Environment.DIRECTORY_PICTURES)が返すものから正確に始まります。
私の知る限り、それはあなたに_SpCars_album/
_という名前のディレクトリを与えません。
すべてが収まるように見えるので、エラーの原因を理解できません。
指定したファイルは、定義されたルートからFileProvider
が提供できるファイルではありません。
[〜#〜]更新[〜#〜]
これが FileProvider
のドキュメントのバグ に関連付けられていることを忘れていました。 FileProvider
および_<external-path>
_は[〜#〜] [〜#〜]を実行しませんが、getExternalFilesDir()
からではなく、Environment.getExternalStorageDirectory()
。私は getExternalFilesDir()
のサポートを提供するStreamProvider
サブクラス を作成しました。
私のStreamProvider
を使用して、_<external-path>
_を_<external-files-path name="myexternalimages" path="Pictures/SpCars_album/" />
_に置き換えれば、幸運が上がるはずです。
これは古い質問ですが、同じような問題が発生しました。
私が見つけた怠惰な解決策はただ使うことです:
<external-path name="myexternalimages" path="Android/" />
GetExternalStorageDirectoryは "/ storage/emulated/0 /"を返すため、/ Android(1つ下のレベル)を共有すると、アプリ内のすべてのファイルにアクセスできます。
または、より正確にしたい場合は、次のようにできます。
<external-path name="myexternalimages" path="Android/data/YOUR_BUNDLE_ID/files/SpCars_album" />
これは正確ではありませんが、動作するようです!
私の場合、アプリグラドルの依存関係にimplementation 'com.Android.support:support-v4:28.0.0'
を追加するとうまくいきました。 SDKプラットフォームのバージョン(私の場合は28.0.0)を適宜変更してください。