操作步骤
在
EntryAbility
中响应来自微信的回调,如果不配置将接收不到分享结果。export default class EntryAbility extends UIAbility { onCreate(want: Want, _launchParam: AbilityConstant.LaunchParam): void { ShareService.getInstance().initWeiXin('WXApp_ID') this.handleWeChatCallIfNeed(want) } onNewWant(want: Want, _launchParam: AbilityConstant.LaunchParam): void { this.handleWeChatCallIfNeed(want) } private handleWeChatCallIfNeed(want: Want) { ShareService.getInstance().getWeiXinAppId()?.handleWant(want, WXEventHandler) }
通过 ShareService 实例发起分享请求。
ShareService 的 API 如下:
注册分享监听
this.shareService.registerOnWXRespCallback()
注销分享监听
this.shareService.unRegisterOnWXRespCallback()
发起请求(shareType 分享类型,shareContent 分享内容,callback 分享返回的结果为 ShareCallBack)
this.shareService.requestShare(ShareType.TEXT, shareContent, callback)
@Entry @Component export struct SendMessage { //获取shareService实例 private shareService = ShareService.getInstance() aboutToAppear(): void { //注册分享回调监听 this.shareService.registerOnWXRespCallback() } aboutToDisappear(): void { //注销监听 this.shareService.unRegisterOnWXRespCallback() } build() { Column({ space: 20 }) { Button("发送Text消息").onClick(() => { //设置分享内容 let shareContent = new ShareContent() shareContent.text = kTextMessage shareContent.title = '测试文本标题' shareContent.description = '测试文本描述' //发起分享请求,并通过ShareType设置分享类型 this.shareService.requestShare(ShareType.TEXT, shareContent, callback) }).width('80%') }
创建接口类
ShareCallBackImpl
实现ShareCallBack
。export class ShareCallBackImpl implements ShareCallBack { //分享取消 onCancel(): void { } //未安装微信 onAppUnInstall(): void { } //分享成功 onSuccess(): void { } //分享异常,返回对应错误码 onError(msg: string, code: number): void { } }
代码示例
文本分享示例
//设置分享内容
let shareContent = new ShareContent()
shareContent.text = ‘分享内容’
shareContent.title = '测试文本标题'
shareContent.description = '测试文本描述'
//发起分享请求
this.shareService.requestShare(ShareType.TEXT, shareContent, callback)
图片分享示例
字段 | 类型 | 含义 | 备注 |
uri | string | 图片本地路径的 URI | 支持 jpeg/png 类型的图片 |
imageData | string | 图片二进制数据的 base64字符串 | 系统跳转限制大小不能超过 100KB,URI 和 imageData 同时存在时会优先使用 URI 字段,忽略 imageData。 |
使用 URI 发送图片
Button("用网络图片发送Image消息(uri)").onClick(async () => {
let imageUrl = "https://img.tukuppt.com/photo-big/00/10/77/619619681755c5463.jpg"
this.downloadImageWithUrl(imageUrl, async (imageData) => {
let file: fileIo.File | undefined;
let filePath = getContext(this).filesDir + `/original-${Date.now()}.jpg`;
file = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);
fileIo.writeSync(file.fd, imageData);
fileIo.closeSync(file);
let shareContent = new ShareContent()
shareContent.uri = fileUri.getUriFromPath(filePath)
shareContent.title = '测试图片标题'
shareContent.description = '测试图片描述'
this.shareService.requestShare(ShareType.IMAGE, shareContent, callback)
})
}).width('80%')
downloadImageWithUrl(url: string,
completion: (imageData: ArrayBuffer) => void) {
http.createHttp().request(url,
(error: BusinessError, data: http.HttpResponse) => {
if (error || data.responseCode != 200) {
return
}
completion((data.result as ArrayBuffer))
})
}
使用 imageBase64 发送图片
let resourceManager = getContext(this).resourceManager
let imageArray = await resourceManager.getMediaContent($r('app.media.test0'));
let pixelBuffer = imageArray.buffer as ArrayBuffer;
let imageResource = image.createImageSource(pixelBuffer);
let opts: image.DecodingOptions = { editable: true }
this.pixelMap = await imageResource.createPixelMap(opts);
const imagePackerApi: image.ImagePacker = image.createImagePacker();
let packOpts: image.PackingOption = { format: 'image/jpeg', quality: 30 };
imagePackerApi.packing(this.pixelMap, packOpts).then((data: ArrayBuffer) => {
let shareContent = new ShareContent()
shareContent.imageData = data
shareContent.title = '测试图片标题'
shareContent.description = '测试图片描述'
this.shareService.requestShare(ShareType.IMAGE, shareContent, callback)
})
网页分享
字段 | 类型 | 含义 | 备注 |
webpageUrl | string | 网页链接 | 长度需大于 0 且不超过 10KB。 |
let shareContent = new ShareContent()
shareContent.webpageUrl = "http://www.qq.com"
shareContent.title = '测试网页标题'
shareContent.description = '测试网页描述'
const thumbData = await getContext(this).resourceManager.getMediaContent($r("app.media.test0"))
const thumbPixel = image.createImageSource(thumbData.buffer).createPixelMapSync()
const thumbBuffer = await image.createImagePacker().packing(thumbPixel,{ format: "image/png", quality: 100 })
shareContent.thumbData = new Uint8Array(thumbBuffer)
this.shareService.requestShare(ShareType.WEBPAGE, shareContent, callback)
该文章对您有帮助吗?