На Android 7.0 и выше получаю исключение FileUriExposedException при вызове html файла из html в android_asset

207
30 сентября 2018, 14:10

API приложения:
minSdkVersion 14
targetSdkVersion 25

В проекте приложения есть файл справки в \app\src\main\assets\help\help_ru.html
Тут же находится файл \app\src\main\assets\help\WhatsNew_ru.html

Справка открывается в отдельном активити с помощью
webView.loadUrl( file:///android_asset/help/help_ru.html );
В help_ru.html стандартный вызов локального файла
<a href="WhatsNew_ru.html">Изменения в приложении</a>

На андроидах до 7-го при нажатии на "Изменения в приложении" файл WhatsNew_ru.html открывается без проблем, а на 7 и выше приложение падает с исключением:
android.os.FileUriExposedException: file:///android_asset/help/WhatsNew_ru.html exposed beyond app through Intent.getData()

FileProvider в манифесте объявлен, путь в \res\xml\filepaths.xml тоже:
<paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-path name="external_files" path="."/> </paths>
Путь задан для запуска апк на устновку с помощью интента Intent.ACTION_INSTALL_PACKAGE из /storage/emulated/0/Android/data/appname/files/appname.apk и работает норамльно на всех целевых андроидах.
Все сделано, как тут https://stackoverflow.com/a/38858040/10141625

Весь интернет и форум перерыл, ответа не нашел.
Возможно ли исправить эту ситуацию?

Answer 1

Проблема решилась добавлением в HelpActivity:
webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView webView, String url) { webView.loadUrl(url); return true; } });

READ ALSO
Как сверстать с помощью flex-box?

Как сверстать с помощью flex-box?

Есть такая разметка, можно ли без дополнительных оберток сделать это на флексбокс? Что должно получится прикрепляю изображением

289
Как оптимизировать обновление Dictionary в цикле foreach?

Как оптимизировать обновление Dictionary в цикле foreach?

Хочу оптимизировать - записать по другому эту часть кода:

225
Можно ли использовать VideoCapture вместо Capture

Можно ли использовать VideoCapture вместо Capture

Пишу программу на C# по распознаванию речи (MicrosoftSpeech

217
Как указать профиль браузера Chrome в Silenium WebDriver C#

Как указать профиль браузера Chrome в Silenium WebDriver C#

В браузере Chrome присутствуют разные профили пользователя, мне необходимо при создании экземпляра ChromeDriver запустить именно браузер под пользователя...

186