就在昨天把老板提的需求写好之后,上传审核提交发布。然后就出现了问题。在用户需要上传图片的时候,只要选择拍照程序就会重新启动。我当场就蒙逼了。小程序的bug还真是数不胜数啊。
下面贴上部分代码:
wx.chooseImage({
count,
sizeType: ['original', 'compressed'],
sourceType: ['camera', 'album']
调试的时候,同事的手机使用了之后直接重新启动,或者卡住不动弹。然而另外两位同事却没啥问题,于是在两台小米8都不行,一台Mix2和Mi10都没问题的情况下,安卓开发组的同事下了判断,有可能是内存不足。调用相机是很占系统内存的,导致了小程序奔溃。
在我反复的看文档都找不到解决问题的办法时,我在论坛上看看有啥解决问题的方法。却发现18年就有帖子说出现这种情况了。但是官方没给出没有解决问题的方法。于是我灰头土脸的回到百度了起来。却没有发现一个有用的。都是教导怎么使用wx.chooseImage的demo。
看着代码我突然发现sourceType同时调用两种类型album+camera会占用较大内存,那么单一调用是不是会好一点。虽然这不是解决问题的方法。但是应该可以让更多的手机兼容一下小程序。
于是我就写了个弹窗
const sourceType = Number(type) === 1 ? ['camera'] : ['album']
wx.chooseImage({
count,
sizeType: ['original', 'compressed'],
sourceType, // camera album
success (res) {
// tempFilePath可以作为img标签的src属性显示图片
const tempFilePaths = res.tempFilePaths
不得不说这效果还是可以的。至少我的小米8兼容了此项做法,皆大欢喜。老板现在要是问起来,接下来的锅让腾讯背上就好。(~ ̄▽ ̄)~
还有这个坑啊,我得改改我的小程序了
哈,这个我一直在用的方法。
这个代码多写点,兼容性确实好很多。
我也碰到过。
wx.showActionSheet({
itemList: ['从相册中选择', '拍照', '从微信中选择'],
强啊老哥!
这个问题,我也遇到了,但我这边只选择了拍照一种模式,还是会小程序崩溃
<camera class="camera" device-position="{{device?'back':'front'}}" flash="off" wx:if="{{camera}}">
<cover-view class="cover-1" bindtap="camera">
<cover-view class="cover-2">
<cover-view class="cover-5" wx:if="{{type=='startRecord'&&startRecord}}">{{time}}S</cover-view>
</cover-view>
</cover-view>
</camera>
<view class="btn open" data-index="1" bindtap="isShowCamera">打开</view>
<view class="btn close" data-index="2" bindtap="isShowCamera">关闭</view>
<view class="btn img" data-index="3" bindtap="isShowCamera">拍照</view>
isShowCamera: function (e) {
const camera = Number(e.currentTarget.dataset.index) === 1
this.setData({ camera })
if (Number(e.currentTarget.dataset.index) === 3) {
this.data.ctx.takePhoto({
quality: "high",
success: (res) => {
console.log(res.tempImagePath)
},
fail: (e) => {
console.log(e);
}
})
}
}