uni-app android11 调起微信分享发送图片给好友,分享到朋友圈显示发送成功,实际图片没有发送
uni-app android11 调起微信分享发送图片给好友,分享到朋友圈显示发送成功,实际图片没有发送
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | Windows 10 教育版 | HBuilderX |
| Android | Android 11 |
产品分类:uniapp/App
PC开发环境操作系统:Windows
HBuilderX类型:正式
HBuilderX版本号:3.1.9
手机系统:Android
手机系统版本号:Android 11
手机厂商:小米
手机机型:小米11
页面类型:vue
打包方式:云端
示例代码:
uni.share({
provider: "weixin",
scene: "WXSenceTimeline",
type: 2,
imageUrl: that.posterImg,
success: function(res) {
uni.showToast({
title: '分享成功',
icon: 'none'
})
},
fail: function(err) {
console.log("fail:" + JSON.stringify(err));
}
});
uni.share({
provider: "weixin",
scene: "WXSceneSession",
type: 2,
imageUrl: that.posterImg,
success: function(res) {
uni.showToast({
title: '分享成功',
icon: 'none'
})
},
fail: function(err) {
console.log("fail:" + JSON.stringify(err));
}
});
操作步骤:
uni.share({
provider: "weixin",
scene: "WXSenceTimeline",
type: 2,
imageUrl: that.posterImg,
success: function(res) {
uni.showToast({
title: '分享成功',
icon: 'none'
})
},
fail: function(err) {
console.log("fail:" + JSON.stringify(err));
}
});
uni.share({
provider: "weixin",
scene: "WXSceneSession",
type: 2,
imageUrl: that.posterImg,
success: function(res) {
uni.showToast({
title: '分享成功',
icon: 'none'
})
},
fail: function(err) {
console.log("fail:" + JSON.stringify(err));
}
});
预期结果:
- 成功分享图片
实际结果:
- 显示分享成功,可是图片并没有发出
bug描述:
- 分享朋友圈或者好友,回调显示发送成功,实际并没有发送出去,在 android 其他OS都可以,就是在 android11不行
更多关于uni-app android11 调起微信分享发送图片给好友,分享到朋友圈显示发送成功,实际图片没有发送的实战教程也可以访问 https://www.itying.com/category-93-b0.html
图片地址:_doc/uniapp_temp_1619162684693/canvas/16191627116910.png 这是通过canvas生成的图片
解决办法
var p = plus.io.convertLocalFileSystemURL(that.posterImg); let PImg = ‘file:///’+p;
回复 1***@qq.com: 你的意思是说 "_doc/xxx"写法的图片不生效? 需要转绝对路径?我们试下
回复 DCloud_Android_ST: 对
这个问题是Android 11文件权限策略变更导致的。Android 11引入了分区存储机制,应用无法直接访问其他应用的文件路径。
问题分析:
that.posterImg如果是本地文件路径,在Android 11上微信无法读取- 云端打包时文件路径可能不符合Android 11的存储要求
- 回调成功仅表示调起微信成功,不代表微信实际处理成功
解决方案:
方案一:使用base64分享
uni.downloadFile({
url: that.posterImg,
success: (res) => {
uni.getFileSystemManager().readFile({
filePath: res.tempFilePath,
encoding: 'base64',
success: (result) => {
uni.share({
provider: "weixin",
scene: "WXSenceTimeline",
type: 2,
imageUrl: 'data:image/jpeg;base64,' + result.data,
success: function(res) {
uni.showToast({
title: '分享成功',
icon: 'none'
})
}
});
}
});
}
});
方案二:使用临时文件路径
确保that.posterImg是应用可访问的临时文件路径:
// 如果是网络图片,先下载到临时目录
uni.downloadFile({
url: 'https://example.com/image.jpg',
success: (res) => {
that.posterImg = res.tempFilePath;
// 然后执行分享
}
});
方案三:检查文件路径权限 在manifest.json中配置Android权限:
{
"app-plus": {
"distribute": {
"android": {
"permissions": [
"<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>",
"<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>"
]
}
}
}
}


