public interface OnResponseListener {
void onSuccess();
void onCancel();
void onFail(String message);
}
package com.property.palmtop.wxapi;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Bitmap;
import android.os.Parcel;
import android.os.Parcelable;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.modelmsg.SendMessageToWX;
import com.tencent.mm.opensdk.modelmsg.WXImageObject;
import com.tencent.mm.opensdk.modelmsg.WXMediaMessage;
import com.tencent.mm.opensdk.modelmsg.WXMusicObject;
import com.tencent.mm.opensdk.modelmsg.WXTextObject;
import com.tencent.mm.opensdk.modelmsg.WXVideoObject;
import com.tencent.mm.opensdk.modelmsg.WXWebpageObject;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
import java.io.ByteArrayOutputStream;
import java.util.logging.Logger;
/**
* =====================================
* 作 者: 江朋 258183284@qq.com
* 版 本:1.0.4
* 创建日期:2018/12/20
* 描 述:
* =====================================
* 分享到对话:
SendMessageToWX.Req.WXSceneSession
分享到朋友圈:
SendMessageToWX.Req.WXSceneTimeline ;
分享到收藏:
SendMessageToWX.Req.WXSceneFavorite
*/
public class WXShare {
public static final StringAPP_ID ="wx6ff8c183bcd596b8";
public static final StringACTION_SHARE_RESPONSE ="action_wx_share_response";
public static final StringEXTRA_RESULT ="result";
private static WXSharewxShare;
private final Contextcontext;
private final IWXAPIapi;
private OnResponseListenerlistener;
private ResponseReceiverreceiver;
private static final int THUMB_SIZE =150;
public WXShare(Context context) {
api = WXAPIFactory.createWXAPI(context,APP_ID);
this.context = context;
}
public static WXShare getWxShare(Context context){
if (wxShare==null){
synchronized (WXShare.class){
if (wxShare==null){
wxShare=new WXShare(context);
}
}
}
return wxShare;
}
public WXShare register() {
// 微信分享
api.registerApp(APP_ID);
receiver =new ResponseReceiver();
IntentFilter filter =new IntentFilter(ACTION_SHARE_RESPONSE);
context.registerReceiver(receiver, filter);
return this;
}
public void unregister() {
try {
api.unregisterApp();
context.unregisterReceiver(receiver);
}catch (Exception e) {
e.printStackTrace();
}
}
//分享文字
public WXShare share(String text,int who) {
WXTextObject textObj =new WXTextObject();
textObj.text = text;
WXMediaMessage msg =new WXMediaMessage();
msg.mediaObject = textObj;
// msg.title = "Will be ignored";
msg.description = text;
SendMessageToWX.Req req =new SendMessageToWX.Req();
req.transaction = buildTransaction("text");
req.message = msg;
req.scene = who;
api.sendReq(req);
return this;
}
//分享网页
public WXShare shareUrl(String urlPath,byte[] thumbBmp,String openid){
WXWebpageObject webpage =new WXWebpageObject();
webpage.webpageUrl ="网页url";
WXMediaMessage msg =new WXMediaMessage(webpage);
msg.title ="网页标题 ";
msg.description ="网页描述";
msg.thumbData =thumbBmp;
SendMessageToWX.Req req =new SendMessageToWX.Req();
req.transaction = buildTransaction("webpage");
req.message =msg;
req.scene =SendMessageToWX.Req.WXSceneSession;
req.userOpenId = openid;
api.sendReq(req);
return this;
}
public byte[] bmpToByteArray(final Bitmap bmp,final boolean needRecycle) {
ByteArrayOutputStream output =new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG,100, output);
if (needRecycle) {
bmp.recycle();
}
byte[] result = output.toByteArray();
try {
output.close();
}
catch (Exception e)
{ e.printStackTrace();
}
return result;
}
//分享图片
public void sharePhoto(Bitmap bitmap,int who){
WXImageObject imgObj =new WXImageObject(bitmap);
WXMediaMessage msg =new WXMediaMessage();
msg.mediaObject = imgObj;
Bitmap thumbBmp = Bitmap.createScaledBitmap(bitmap,THUMB_SIZE,THUMB_SIZE,true);
bitmap.recycle();
msg.thumbData = bmpToByteArray(thumbBmp,true);
SendMessageToWX.Req req =new SendMessageToWX.Req();
req.transaction = buildTransaction("img");
req.message = msg;
req.scene = who;
api.sendReq(req);
}
//分享音乐
public WXShare shareMusic(String musicUrl,Bitmap thumbBmp,int who){
WXMusicObject music =new WXMusicObject();
music.musicUrl=musicUrl;
WXMediaMessage msg =new WXMediaMessage();
msg.mediaObject = music;
msg.title ="音乐标题";
msg.description ="音乐描述";
msg.thumbData = bmpToByteArray(thumbBmp,true);
SendMessageToWX.Req req =new SendMessageToWX.Req();
req.transaction = buildTransaction("music");
req.message = msg;
req.scene = who;
api.sendReq(req);
return this;
}
//分享视频
public WXShare shareVideo(String videoUrl,Bitmap thumbBmp,int who){
//初始化一个WXVideoObject,填写url
WXVideoObject video =new WXVideoObject();
video.videoUrl =videoUrl;
WXMediaMessage msg =new WXMediaMessage(video);
msg.title ="视频标题";
msg.description ="视频描述";
msg.thumbData =bmpToByteArray(thumbBmp,true);
SendMessageToWX.Req req =new SendMessageToWX.Req();
req.transaction = buildTransaction("video");
req.message =msg;
req.scene = who;
// req.userOpenId = getOpenId();
api.sendReq(req);
return this;
}
public IWXAPI getApi() {
return api;
}
public void setListener(OnResponseListener listener) {
this.listener = listener;
}
private String buildTransaction(final String type) {
return (type ==null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
}
private class ResponseReceiverextends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Response response = intent.getParcelableExtra(EXTRA_RESULT);
String result;
if (listener !=null) {
if (response.errCode == BaseResp.ErrCode.ERR_OK) {
listener.onSuccess();
}else if (response.errCode == BaseResp.ErrCode.ERR_USER_CANCEL) {
listener.onCancel();
}else {
switch (response.errCode) {
case BaseResp.ErrCode.ERR_AUTH_DENIED:
result ="发送被拒绝";
break;
case BaseResp.ErrCode.ERR_UNSUPPORT:
result ="不支持错误";
break;
default:
result ="发送返回";
break;
}
listener.onFail(result);
}
}
}
}
public static class Responseextends BaseRespimplements Parcelable {
public int errCode;
public StringerrStr;
public Stringtransaction;
public StringopenId;
private int type;
private boolean checkResult;
public Response(BaseResp baseResp) {
errCode = baseResp.errCode;
errStr = baseResp.errStr;
transaction = baseResp.transaction;
openId = baseResp.openId;
type = baseResp.getType();
checkResult = baseResp.checkArgs();
}
@Override
public int getType() {
return type;
}
@Override
public boolean checkArgs() {
return checkResult;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest,int flags) {
dest.writeInt(this.errCode);
dest.writeString(this.errStr);
dest.writeString(this.transaction);
dest.writeString(this.openId);
dest.writeInt(this.type);
dest.writeByte(this.checkResult ? (byte)1 : (byte)0);
}
protected Response(Parcel in) {
this.errCode = in.readInt();
this.errStr = in.readString();
this.transaction = in.readString();
this.openId = in.readString();
this.type = in.readInt();
this.checkResult = in.readByte() !=0;
}
public static final Parcelable.CreatorCREATOR =new Creator() {
@Override
public Response createFromParcel(Parcel source) {
return new Response(source);
}
@Override
public Response[] newArray(int size) {
return new Response[size];
}
};
}
}
package com.property.palmtop.wxapi;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import com.ccpg.utils.Mlog;
import com.property.palmtop.activity.BaseActivity;
import com.tencent.mm.opensdk.modelbase.BaseReq;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
/**
* =====================================
* 作 者: 江朋 258183284@qq.com
* 版 本:1.0.4
* 创建日期:2018/12/20
* 描 述:
* =====================================
*/
public class WXEntryActivityextends BaseActivityimplements IWXAPIEventHandler{
private IWXAPIapi;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Mlog.logshow("WXEntryActivity");
// WXShare share = new WXShare(this);
api = WXShare.getWxShare(this).getApi();
// .register()
//注意:
//第三方开发者如果使用透明界面来实现WXEntryActivity,需要判断handleIntent的返回值,如果返回值为false,则说明入参不合法未被SDK处理,应finish当前透明界面,避免外部通过传递非法参数的Intent导致停留在透明界面,引起用户的疑惑
try {
if (!api.handleIntent(getIntent(),this)) {
finish();
}
}catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
if (!api.handleIntent(intent,this)) {
finish();
}
}
@Override
public void onReq(BaseReq baseReq) {
}
@Override
public void onResp(BaseResp baseResp) {
Intent intent =new Intent(WXShare.ACTION_SHARE_RESPONSE);
intent.putExtra(WXShare.EXTRA_RESULT,new WXShare.Response(baseResp));
sendBroadcast(intent);
finish();
}
}
网友评论