Android 7.0迁移-在访问Android_资产文件夹时处理FileUrieExposedException 背景

Android 7.0迁移-在访问Android_资产文件夹时处理FileUrieExposedException 背景,android,android-webview,assets,android-7.0-nougat,android-fileprovider,Android,Android Webview,Assets,Android 7.0 Nougat,Android Fileprovider,迁移到Android 7.0后,我注意到在我的webView中加载以下url时,我的应用程序因出现FileUrieExposedException而崩溃: webView.loadUrl("file:///android_asset/myFolder/myFile.html") 我了解到这是因为Android 7.0中引入了一些文件系统权限更改,现在在尝试共享意图中的文件://Uri时抛出FileUrieExposedException 我试图实现建议的解决方法,即使用文件提供程序获得临时访问

迁移到Android 7.0后,我注意到在我的webView中加载以下url时,我的应用程序因出现
FileUrieExposedException
而崩溃:

webView.loadUrl("file:///android_asset/myFolder/myFile.html")
我了解到这是因为Android 7.0中引入了一些文件系统权限更改,现在在尝试共享意图中的文件://Uri时抛出
FileUrieExposedException

我试图实现建议的解决方法,即使用
文件提供程序
获得临时访问权限(),但我不知道如何使
android_资产
文件夹能够实现这一点,因为我只看到
文件提供程序
的可用路径涉及内部和外部存储路径

代码 来自MainActivity->

  Intent intent = new Intent(view.getContext(), HelpActivity.class);
  startActivity(intent);
 webView.loadUrl("file:///android_asset/help/index.html");
从帮助活动->

  Intent intent = new Intent(view.getContext(), HelpActivity.class);
  startActivity(intent);
 webView.loadUrl("file:///android_asset/help/index.html");
问题: 当需要从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)

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


因此,查看HTML,找出试图重定向到
help.HTML
的内容,并修复它。另外,考虑将<代码> WebViewClient <代码>添加到您的<代码> WebVIEW/COD>中,在这里您可以通过<代码> SuodoVRIDEURURLULD()/<代码> < < /P>来控制这种页面加载行为:“在迁移到Android 7之后,我注意到当我的WebVIEW中加载以下URL时,我的应用程序被一个FrimeIeExeleExtExpCurp破坏了”——严重吗?您能发布完整的Java堆栈跟踪吗?@commonware Oops很抱歉,我添加了它。堆栈跟踪看起来更像是您试图按照startActivity()使用的意图传递该文件uri。谢谢!我在my
HelpActivity
类中向my
WebView
添加了一个
WebViewClient
,并覆盖了
shouldOverrideUrlLoading
,如下所示:
WebView.setWebViewClient(new WebViewClient(){@Override public boolean shouldOverrideUrlLoading(WebView,字符串url){WebView.loadUrl(url);返回true;}
这解决了我遇到的问题。但是,我不明白为什么在更新到Nougat之前不需要这样做。(另外,正如您所说,html在href链接中包含相对路径)