Huawei端末の「デフォルトの保存場所」と externalCacheDir と FileProvider.parsePathStrategy

Huawei端末はデフォルトの保存先をSDカードにすることができる。

私の手元では以下の2機種にその設定があった。

f:id:tateisu:20211121141542p:plain

f:id:tateisu:20211121141524p:plain

その設定により、context.externalCacheDir は SDカードのパスを返す。
しかし ContextCompat.getExternalCacheDirs(context)[0] はプライマリストレージのパスを返す。

FileProvider#parsePathStrategy が参照するのは後者であり、よってFileProvider経由で外部アプリに公開したいならアプリでも ContextCompat.getExternalCacheDirs(context)[0] を使ってファイル保存を行うべきだ。

結果としてキャッシュデータはプライマリストレージに保存されてユーザの意向は反映されなくなるが、動作しないよりはマシ。