wx Share

作者: gcp | 来源:发表于2018-12-21 13:28 被阅读0次

    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();

    }

    }

    相关文章

      网友评论

          本文标题:wx Share

          本文链接:https://www.haomeiwen.com/subject/syumkqtx.html