d***@d-heaven.com
d***@d-heaven.com
  • 发布:2018-03-26 15:31
  • 更新:2020-07-24 17:51
  • 阅读:4137

Android 7.1版本,使用plus.runtime.openfile方法无效

分类:HTML5+

在一个Android原生项目里,融合h5+的sdk。其中h5的部分,用到方法 下载方法和openfile方法

plus.runtime.openFile(d.filename, {}, function(e) {
plus.nativeUI.alert("无法打开此文件:" + e.message);
});

在Android 7.0及以下手机上正常打开。
在7.1.1手机上,无法打开,没有任何反馈,也没有执行alert
但是,在这个7.1.1的手机上,用hbuilder的基座是可以正常打开的。

查看logcat,发发现,报错

麻烦看一下是啥原因

03-26 09:49:44.644 22302-22302/com.inspur.mobliejnzf W/System.err: android.os.FileUriExposedException: file:///storage/emulated/0/Android/data/com.inspur.mobliejnzf/downloads/%E9%A3%9F%E5%93%81%E7%94%9F%E4%BA%A7%E7%BB%8F%E8%90%A5%E6%A3%80%E6%9F%A5%E7%BB%93%E6%9E%9C%E8%AE%B0%E5%BD%95%E8%A1%A8.doc exposed beyond app through Intent.getData()
03-26 09:49:44.657 22302-22302/com.inspur.mobliejnzf W/System.err: at android.os.StrictMode.onFileUriExposed(StrictMode.java:1799)
03-26 09:49:44.657 22302-22302/com.inspur.mobliejnzf W/System.err: at android.net.Uri.checkFileUriExposed(Uri.java:2346)
03-26 09:49:44.657 22302-22302/com.inspur.mobliejnzf W/System.err: at android.content.Intent.prepareToLeaveProcess(Intent.java:9143)
03-26 09:49:44.657 22302-22302/com.inspur.mobliejnzf W/System.err: at android.content.Intent.prepareToLeaveProcess(Intent.java:9104)
03-26 09:49:44.657 22302-22302/com.inspur.mobliejnzf W/System.err: at android.app.Instrumentation.execStartActivity(Instrumentation.java:1519)
03-26 09:49:44.657 22302-22302/com.inspur.mobliejnzf W/System.err: at android.app.Activity.startActivityForResult(Activity.java:4353)
03-26 09:49:44.657 22302-22302/com.inspur.mobliejnzf W/System.err: at android.app.Activity.startActivityForResult(Activity.java:4311)
03-26 09:49:44.657 22302-22302/com.inspur.mobliejnzf W/System.err: at android.app.Activity.startActivity(Activity.java:4650)
03-26 09:49:44.657 22302-22302/com.inspur.mobliejnzf W/System.err: at android.app.Activity.startActivity(Activity.java:4618)
03-26 09:49:44.658 22302-22302/com.inspur.mobliejnzf W/System.err: at io.dcloud.common.adapter.util.PlatformUtil.openFileBySystem(PlatformUtil.java:183)
03-26 09:49:44.658 22302-22302/com.inspur.mobliejnzf W/System.err: at io.dcloud.feature.pdr.RuntimeFeatureImpl.execute(RuntimeFeatureImpl.java:205)
03-26 09:49:44.658 22302-22302/com.inspur.mobliejnzf W/System.err: at io.dcloud.common.adapter.util.MessageHandler$1.handleMessage(MessageHandler.java:23)
03-26 09:49:44.658 22302-22302/com.inspur.mobliejnzf W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
03-26 09:49:44.658 22302-22302/com.inspur.mobliejnzf W/System.err: at android.os.Looper.loop(Looper.java:159)
03-26 09:49:44.658 22302-22302/com.inspur.mobliejnzf W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6355)
03-26 09:49:44.658 22302-22302/com.inspur.mobliejnzf W/System.err: at java.lang.reflect.Method.invoke(Native Method)
03-26 09:49:44.658 22302-22302/com.inspur.mobliejnzf W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1096)
03-26 09:49:44.658 22302-22302/com.inspur.mobliejnzf W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:883)

2018-03-26 15:31 负责人:无 分享
已邀请:
Lspring

Lspring -

找坑了一天,终于找到了。离线打包的时候在actitvity里执行:
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
builder.detectFileUriExposure();
}

  • willKing

    具体是那个文件的哪个位置?

    2019-05-18 14:29

  • 1***@qq.com

    回复 willKing: 请问解决了吗。

    2020-01-08 21:09

d***@d-heaven.com

d***@d-heaven.com (作者)

@DCloud_App_Array 颜总,麻烦看一下

d***@d-heaven.com

d***@d-heaven.com (作者)

现在用的3个手机测试
坚果pro,Android 7.1.1 。hbuilder基座好用,本地打包之后的app不可用。
华为mate 9 ,Android 7.0。hbuilder基座好用,本地打包之后的app好用。
华为荣耀9,Android 7.0。hbuilder基座好用,本地打包之后的app不可用。

好像跟Android版本也没关系。。。

2***@qq.com

2***@qq.com

vivo x9 ,Android 7.1.2。hbulider基座好用,在线打包好用,离线打包之后不可用。

2***@qq.com

2***@qq.com

这个问题解决了吗?是怎么回事啊?

z***@163.com

z***@163.com - 架构师

h5+离线打包 plus.runtime.openfile打不开文件的问题
https://ask.dcloud.net.cn/article/35703
看这个离线部分的内容,注意权限可以不用加,都在基座里有。还有那个xml不要改,在lib.5plus.base-release.aar里。

1***@qq.com

1***@qq.com

我这边也不行,安卓底层要加什么权限啊,我使用的是我们自己的安卓外壳,Runtime模块管理运行环境中好像只有openFile用不了,我使用云打包其他手机上都能运行

  • 维多利亚胡

    请问解决了吗,我也遇到这个问题,试了几个方法也不管用

    2020-09-23 10:35

该问题目前已经被锁定, 无法添加新回复