在上一篇微信登录详细实现中,实现了微信登录,那么本篇探索一下微信分享.
笔者基于DIalogFragment实现了分享界面可配合此篇使用传送门
效果图:
ItemDialog.png微信分享、收藏和登录前期步骤都一样,详情请查看微信登录篇
可分享类型:
1.文字
2.图片
3.音乐
4.视频
5.网页
6.小程序至微信好友会话
7.朋友圈或添加到微信收藏
代码实现
具体实现微信开发平台说的很详细,这里就以网页分享为例
//创建wechatOpenApi实例
override fun init() {
wechatOpenApi = WXAPIFactory.createWXAPI(this, Config.WECHAT_APPID, true)
}
private fun shareToWechat(shareIcon: Int,shareScene:Int) {
if (wechatOpenApi.isWXAppInstalled) {//是否已安装微信客户端
//初始化一个WXWebpageObject,填写url
val webPage = WXWebpageObject()
webPage.webpageUrl = mWebActWebContainer.originalUrl
//用 WXWebpageObject 对象初始化一个 WXMediaMessage 对象
val msg = WXMediaMessage(webPage)
msg.title = mWebActWebContainer.title
msg.description = mWebActWebContainer.title
val thumbBmp = BitmapFactory.decodeResource(resources, shareIcon)
//TODO 转到下边说明
msg.thumbData = ImageUtil.bmpToByteArray(thumbBmp, Config.MAX_WECHAT_SHARE_THUMB, true)
//构造一个Req
val req = SendMessageToWX.Req()
req.transaction = buildTransaction("webPage")
req.message = msg
/**
//分享场景:微信好友、朋友圈、收藏、特定好友
req.scene=shareScene
/**
* public static final int WXSceneSession = 0;
* public static final int WXSceneTimeline = 1;
* public static final int WXSceneFavorite = 2;
* public static final int WXSceneSpecifiedContact = 3;
* 对应值
*/
//调用api接口,发送数据到微信
wechatOpenApi.sendReq(req)
} else {
showError(R.string.not_install_wechat_prompt)
}
}
private fun buildTransaction(type: String?): String {
return if (type == null) System.currentTimeMillis().toString() else type + System.currentTimeMillis()
}
//裁剪图片
public static byte[] bmpToByteArray(final Bitmap bitmap, int maxKb, final boolean needRecycle) {
ByteArrayOutputStream output = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, output);
int options = 100;
while (output.toByteArray().length > maxKb && options != 10) {
output.reset(); //清空output
bitmap.compress(Bitmap.CompressFormat.JPEG, options, output);//这里压缩options%,把压缩后的数据存放到output中
options -= 10;
}
if (needRecycle) {
bitmap.recycle();
}
return output.toByteArray();
}
注意点:
网页分享图片缩略图(代码msg.thumbData)不能超过32k限制,超出就会分享失败,那么必须对原图进行裁剪,微信Demo中提供了一个裁剪方法,笔者使用后不管用,在网上找了一同学贴出来比较好使的方法(即上述bmpToByteArray())但是地址给忘了,在此说明一下!
在前期工作都做好的情况,分享比较容易。还有一项需要说明的是分享不需要缴300RMB也行,只要资质审核通过就可。
此外,分享也可调用系统分享,更方便但是可定制性不高,就看开发者怎么取舍了,系统分享笔者就不写了,许多同学写的非常清楚
传送门:
《实现分享功能的几个办法》
《Android分享---调用系统自带的分享功能》
《利用 Android 系统原生 API 实现分享功能》
网友评论