Android 7.0迁移 - 访问android_asset文件夹时处理FileUriExposedException

问题描述 投票:0回答:1

Background

迁移到Android 7.0后,我注意到我的应用程序在我的webView中加载以下URL时崩溃了FileUriExposedException

webView.loadUrl("file:///android_asset/myFolder/myFile.html")

我读here认为这是因为Android 7.0中引入了一些文件系统权限更改,现在尝试共享文件时会抛出FileUriExposedException:// Uri在Intent中。

我试图实现建议的工作,围绕使用FileProvider临时访问权限(here),但我不知道如何使这个工作的android_asset文件夹,因为我只看到FileProvider涉及的可用路径内部和外部存储路径。

Code

来自MainActivity - >

  Intent intent = new Intent(view.getContext(), HelpActivity.class);
  startActivity(intent);

来自HelpActivity - >

 webView.loadUrl("file:///android_asset/help/index.html");

Question

当需要从webView中的assets文件夹加载文件时,有没有人知道解决此异常的好方法?

android.os.FileUriExposedException: file:///android_asset/help/help.html exposed beyond app through Intent.getData()
      at android.os.StrictMode.onFileUriExposed(StrictMode.java:1958)
      at android.net.Uri.checkFileUriExposed(Uri.java:2348)
      at android.content.Intent.prepareToLeaveProcess(Intent.java:9766)
      at android.content.Intent.prepareToLeaveProcess(Intent.java:9720)
      at android.app.Instrumentation.execStartActivity(Instrumentation.java:1609)
      at android.app.Activity.startActivityForResult(Activity.java:4472)
      at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:50)
      at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:79)
      at android.app.Activity.startActivityForResult(Activity.java:4430)
      at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:859)
      at android.app.Activity.startActivity(Activity.java:4791)
      at android.app.Activity.startActivity(Activity.java:4759)
      at android.content.ContextWrapper.startActivity(ContextWrapper.java:366)
      at org.chromium.android_webview.ResourcesContextWrapperFactory$WebViewContextWrapper.startActivity(ResourcesContextWrapperFactory.java:118)
      at org.chromium.android_webview.AwContentsClient.sendBrowsingIntent(AwContentsClient.java:203)
      at org.chromium.android_webview.AwContentsClient.shouldIgnoreNavigation(AwContentsClient.java:170)
      at org.chromium.android_webview.AwContentsClientBridge.shouldOverrideUrlLoading(AwContentsClientBridge.java:352)
      at org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
      at org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:41)
      at android.os.Handler.dispatchMessage(Handler.java:105)
      at android.os.Looper.loop(Looper.java:164)
      at android.app.ActivityThread.main(ActivityThread.java:6541)
      at java.lang.reflect.Method.invoke(Native Method)
      at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
android android-webview assets android-7.0-nougat android-fileprovider
1个回答
2
投票

您的Web内容似乎包含触发WebView通过某种相对路径加载help.html的内容。 WebView的默认行为是要求默认Web浏览器加载该页面。这对file:///android_asset/ Uri值不起作用。

因此,查看HTML,找出尝试重定向到help.html的内容,并修复它。另外,考虑在你的WebViewClient中添加一个WebView,你可以通过shouldOverrideUrlLoading()控制这种页面加载行为。

© www.soinside.com 2019 - 2024. All rights reserved.