Как связать HTML-страницы в Android 8 - PullRequest
0 голосов
/ 08 октября 2018

У меня есть небольшая онлайн-справка, состоящая из нескольких HTML-ссылок, связанных друг с другом.

В прошлом это работало нормально, но в Android 8 я могу показывать только страницу входа, и как только я нажимаю любую ссылку, получаю:

10-08 09:04:17.616 22871 22871 E AndroidRuntime: FATAL EXCEPTION: main
10-08 09:04:17.616 22871 22871 E AndroidRuntime: Process: net.sourceforge.uiq3.fx602p, PID: 22871
10-08 09:04:17.616 22871 22871 E AndroidRuntime: android.os.FileUriExposedException: file:///android_asset/Modes.html exposed beyond app through Intent.getData()
10-08 09:04:17.616 22871 22871 E AndroidRuntime:    at android.os.StrictMode.onFileUriExposed(StrictMode.java:1958)
10-08 09:04:17.616 22871 22871 E AndroidRuntime:    at android.net.Uri.checkFileUriExposed(Uri.java:2356)
10-08 09:04:17.616 22871 22871 E AndroidRuntime:    at android.content.Intent.prepareToLeaveProcess(Intent.java:10511)
10-08 09:04:17.616 22871 22871 E AndroidRuntime:    at android.content.Intent.prepareToLeaveProcess(Intent.java:10465)
10-08 09:04:17.616 22871 22871 E AndroidRuntime:    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1616)
10-08 09:04:17.616 22871 22871 E AndroidRuntime:    at android.app.Activity.startActivityForResult(Activity.java:4564)
10-08 09:04:17.616 22871 22871 E AndroidRuntime:    at android.app.Activity.startActivityForResult(Activity.java:4522)
10-08 09:04:17.616 22871 22871 E AndroidRuntime:    at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:784)
10-08 09:04:17.616 22871 22871 E AndroidRuntime:    at android.app.Activity.startActivity(Activity.java:4883)
10-08 09:04:17.616 22871 22871 E AndroidRuntime:    at android.app.Activity.startActivity(Activity.java:4851)
10-08 09:04:17.616 22871 22871 E AndroidRuntime:    at android.content.ContextWrapper.startActivity(ContextWrapper.java:377)
10-08 09:04:17.616 22871 22871 E AndroidRuntime:    at aiM.startActivity(SourceFile:22)
10-08 09:04:17.616 22871 22871 E AndroidRuntime:    at agA.a(SourceFile:34)
10-08 09:04:17.616 22871 22871 E AndroidRuntime:    at org.chromium.android_webview.AwContentsClientBridge.shouldOverrideUrlLoading(SourceFile:173)
10-08 09:04:17.616 22871 22871 E AndroidRuntime:    at android.os.MessageQueue.nativePollOnce(Native Method)
10-08 09:04:17.616 22871 22871 E AndroidRuntime:    at android.os.MessageQueue.next(MessageQueue.java:325)
10-08 09:04:17.616 22871 22871 E AndroidRuntime:    at android.os.Looper.loop(Looper.java:142)
10-08 09:04:17.616 22871 22871 E AndroidRuntime:    at android.app.ActivityThread.main(ActivityThread.java:6944)
10-08 09:04:17.616 22871 22871 E AndroidRuntime:    at java.lang.reflect.Method.invoke(Native Method)
10-08 09:04:17.616 22871 22871 E AndroidRuntime:    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
10-08 09:04:17.616 22871 22871 E AndroidRuntime:    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

Конечно, все страницы отображаются внутри приложения, и ничто не "просочилось" наружу.И даже если: это просто онлайн-справка, и все равно, если бы это было так.

Достаточно разглагольствования: как это исправить?

ОБНОВЛЕНИЕ 1:

Страница состояла только из простого макета и почти пустой активности:

<LinearLayout
  android:layout_height='match_parent'
  android:layout_width='match_parent'
  xmlns:android='http://schemas.android.com/apk/res/android'
>
  <WebView
    android:id='@+id/Help'
    android:layout_height='match_parent'
    android:layout_width='match_parent'
  ></WebView>
</LinearLayout>

@ igor_rb предложил перегрузить shouldOverrideUrlLoading WebViewClient - но на самом деле я не использую WebViewClient на данный момент.

1 Ответ

0 голосов
/ 08 октября 2018

Вы можете попробовать переопределить метод shouldOverrideUrlLoading, дополнительную информацию .

Дайте хост-приложению возможность взять на себя управление, когда URL собирается быть загруженным в текущемWebView.Если WebViewClient не предоставлен, по умолчанию WebView попросит Activity Manager выбрать правильный обработчик для URL.Если предоставляется WebViewClient, возвращение true приводит к тому, что текущий WebView прерывает загрузку URL, а возвращение false приводит к тому, что WebView продолжает загружать URL как обычно.

Например, вы можете попробовать просто вернуть falseот него:

  WebViewClient client = new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        return false;
    }
};
...