在上一篇微信登錄詳細(xì)實(shí)現(xiàn)中悼粮,實(shí)現(xiàn)了微信登錄,那么本篇探索一下微信分享.
筆者基于DIalogFragment實(shí)現(xiàn)了分享界面可配合此篇使用傳送門
效果圖:
ItemDialog.png
微信分享曾棕、收藏和登錄前期步驟都一樣扣猫,詳情請查看微信登錄篇
可分享類型:
1.文字
2.圖片
3.音樂
4.視頻
5.網(wǎng)頁
6.小程序至微信好友會(huì)話
7.朋友圈或添加到微信收藏
代碼實(shí)現(xiàn)
具體實(shí)現(xiàn)微信開發(fā)平臺(tái)說的很詳細(xì),這里就以網(wǎng)頁分享為例
//創(chuàng)建wechatOpenApi實(shí)例
override fun init() {
wechatOpenApi = WXAPIFactory.createWXAPI(this, Config.WECHAT_APPID, true)
}
private fun shareToWechat(shareIcon: Int,shareScene:Int) {
if (wechatOpenApi.isWXAppInstalled) {//是否已安裝微信客戶端
//初始化一個(gè)WXWebpageObject翘地,填寫url
val webPage = WXWebpageObject()
webPage.webpageUrl = mWebActWebContainer.originalUrl
//用 WXWebpageObject 對象初始化一個(gè) WXMediaMessage 對象
val msg = WXMediaMessage(webPage)
msg.title = mWebActWebContainer.title
msg.description = mWebActWebContainer.title
val thumbBmp = BitmapFactory.decodeResource(resources, shareIcon)
//TODO 轉(zhuǎn)到下邊說明
msg.thumbData = ImageUtil.bmpToByteArray(thumbBmp, Config.MAX_WECHAT_SHARE_THUMB, true)
//構(gòu)造一個(gè)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;
* 對應(yīng)值
*/
//調(diào)用api接口昧穿,發(fā)送數(shù)據(jù)到微信
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%,把壓縮后的數(shù)據(jù)存放到output中
options -= 10;
}
if (needRecycle) {
bitmap.recycle();
}
return output.toByteArray();
}
注意點(diǎn):
網(wǎng)頁分享圖片縮略圖(代碼msg.thumbData)不能超過32k限制橙喘,超出就會(huì)分享失敗时鸵,那么必須對原圖進(jìn)行裁剪,微信Demo中提供了一個(gè)裁剪方法厅瞎,筆者使用后不管用饰潜,在網(wǎng)上找了一同學(xué)貼出來比較好使的方法(即上述bmpToByteArray())但是地址給忘了,在此說明一下和簸!
在前期工作都做好的情況彭雾,分享比較容易。還有一項(xiàng)需要說明的是分享不需要繳300RMB也行锁保,只要資質(zhì)審核通過就可冠跷。
此外南誊,分享也可調(diào)用系統(tǒng)分享,更方便但是可定制性不高蜜托,就看開發(fā)者怎么取舍了,系統(tǒng)分享筆者就不寫了霉赡,許多同學(xué)寫的非常清楚
傳送門:
《實(shí)現(xiàn)分享功能的幾個(gè)辦法》
《Android分享---調(diào)用系統(tǒng)自帶的分享功能》
《利用 Android 系統(tǒng)原生 API 實(shí)現(xiàn)分享功能》