【Android-混合开发】奇案-上传照片至 H5 失败

混合开发小白的探坑之路--这次话不多说,直接进入主题。

在开发阶段,涉及的手机都没有出现上面的问题-在 H5 调起原生相机相册,选择文件后,H5 页面无法获取到对应文件展示。

 

结果一到测试阶段--红米note9(Android10) ,荣耀 30(Android10),OPPO R17(Android10),OPPO Reno5 (Android11),小米10(Android10),均出现了该问题。但均不是必现。而且,通过云测以上机型也均没有出现问题。你说是不是奇案?


在没有思路的情况下,我决定写一个 Demo,将因素一个个进行研究。

最直接的发现是

只与是否经历过压缩操作(当时,我都打算研究压缩的源码了)。后来,从结果出发研究了一下,发现在最后发给H5的路径有点不同

从上面的日志,我们可以发现:

第一:压缩后的是file://协议

第二:最后的文件名也是不一样的(看着应该是时间戳)看了一下源码

String cacheBuilder = mTargetDir + "/" +
    System.currentTimeMillis() +
    (int) (Math.random() * 1000) +
    (TextUtils.isEmpty(suffix) ? ".jpg" : suffix);

哦?既然最后传过去的是这样,那假设我不经过压缩,我直接将结果组织成这样返回,按理说应该也是可以成功的。

于是我

mFilePathCallback?.onReceiveValue(arrayOf(Uri.parse("file://"+PhotoUtils.PATH_PHOTO)))

并且其中 PATH_PHOTO

PATH_PHOTO = getSdCardDirectory(context) + "/"+System.currentTimeMillis()+".png"

果不其然,成功了。解决了上面的问题

实验得出,可正常使用的方案就是:

1.传给H5的路径,要符合 file:// (file 协议)。

2.拍照后的照片存储的名字要唯一。


问题解决了?可以说解决了,但是没有完全解决。

如果只是想满足【能用】就行,那的确是解决了。接下来,放出几个我测试过程中发现的问题,暂时没有研究出为什么?后续有结论后会补充说明。大家也可以帮我看看是为什么?谢过。

情况1:

在拍照的时候,拍照临时存的文件,如果是设定为同一个名字。即 PATH_PHOTO 设置为

PATH_PHOTO = getSdCardDirectory(context) + "/temp.png"

,会出现第二张拍照的文件无法上传

操作如下:

日志如下:

情况2:

正当,我以为是同一个文件名,可能系统缓存中认为是同一张照片,所以没办法上传的时候。我发现了如果在两次拍照的中间,加一次上传相册的图片,TMD又可以了?我自闭了。

操作如下:操作gif太大,无法上传。假设你们可以看懂。实在想象不到的话

链接:https://pan.baidu.com/s/1nTZDXqPusq4wWBPdl1nrqw
提取码:lqna
复制这段内容后打开百度网盘手机App,操作更方便哦

日志如下:

情况3:

测试是否与websetting (appCache,domStorage)有关

WebView类型

enable AppCache

enable domStorage

enable

both

X5(Tencent)

X

X

原生

X

X

X

测试结果:在 X5WebView 中,将 appCache,domStorage 都使能的情况下。App 在第二次进入时,相机&相册功能均正常。

情况4:

测试是否与 file协议 有关

WebView类型

遵循file协议

X5(Tencent)

原生

测试结果:无论是 X5 还是原生 在遵循file协议下,相机&相册均可成功。

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Q-CODER

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值