У меня есть исключение, которое происходит только на устройствах Huawei в моем приложении при использовании FileProvider.getUriForFile
:
Exception: java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/<card name>/Android/data/<app package>/files/.export/2016-10-06 13-22-33.pdf
at android.support.v4.content.FileProvider$SimplePathStrategy.getUriForFile(SourceFile:711)
at android.support.v4.content.FileProvider.getUriForFile(SourceFile:400)
Вот определение моего поставщика файлов в моем манифесте:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_provider_paths" />
</provider>
Файл ресурсов с настроенными путями:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-files-path name="external_files" path="" />
</paths>
Любая идея о причине этой проблемы и почему это происходит только на устройствах Huawei? Как мне отладить это, учитывая, что у меня нет устройства Huawei?
UPDATE:
Я добавил в мое приложение больше журналов и получил некоторые непоследовательные результаты при печати как ContextCompat.getExternalFilesDirs
, так и context.getExternalFilesDir
на этих устройствах:
ContextCompat.getExternalFilesDirs:
/storage/emulated/0/Android/data/<package>/files
/storage/sdcard1/Android/data/<package>/files
context.getExternalFilesDir:
/storage/sdcard1/Android/data/<package>/files
Это не соответствует документации ContextCompat.getExternalFilesDirs
, которая гласит, что The first path returned is the same as getExternalFilesDir(String)
Это объясняет проблему, так как я использую context.getExternalFilesDir
в своем коде, а FileProvider
использует ContextCompat.getExternalFilesDirs
.