Android分享带链接内容至QQ微信

/**
 * date:2020/7/25
 * author: wsm(Administrator)
 * function:分享
 */
public class ShareDialog {
    
    
    public static final String TAG = "ShareDialog";
    private static PopupWindow popupWindow;
    private static final String TYPE_WECHAT = "session";
    private static final String TYPE_WECHAT_MOMENT = "timeline";
    public static final String KEY_SHARE_TYPE = "key_share_type";
    private static WbShareHandler shareHandler;
    public static final int SHARE_CLIENT = 1;
    private static int mShareType = SHARE_CLIENT;
    private static IWXAPI mApi;
    private static String token;
    //    private Tencent mTencent;
    private static String mSharetypes;

    /**
     * 
     * @param v 随便一个textview
     * @param tokens 请求接口需要的token,可不加
     * @param activity 上下文
     * @param url 网络链接地址
     * @param title 分享标题
     * @param describe 分享正文
     * @param image 分享图片
     * @param type 分享类型
     */
    @SuppressLint("WrongConstant")
    public static void openPopupWindow(TextView v, String tokens, Activity activity, String url, String title, String describe, String image, String type) {
    
    
        Log.v(TAG, "share type==" + type);
        mSharetypes = type;
        //防止重复按按钮
        token = tokens;
        if (popupWindow != null && popupWindow.isShowing()) {
    
    
            return;
        }
        //设置PopupWindow的View
        View view = LayoutInflater.from(activity).inflate(R.layout.popview_share, null);
        popupWindow = new PopupWindow(view, RelativeLayout.LayoutParams.MATCH_PARENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT);
        popupWindow.setSoftInputMode(PopupWindow.INPUT_METHOD_NEEDED);
        popupWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
        popupWindow.setBackgroundDrawable(new BitmapDrawable());
        LinearLayout tvShareSeen = view.findViewById(R.id.tvShareSeen);
        LinearLayout tvSharepyq = view.findViewById(R.id.tvSharepyq);
        LinearLayout tvShareZQne = view.findViewById(R.id.tvShareZQne);
        LinearLayout tvShareQQ = view.findViewById(R.id.tvShareQQ);
        //微信好友分享
        tvShareSeen.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                setShare(activity, TYPE_WECHAT, url, title, describe, image);
                if (popupWindow != null && popupWindow.isShowing()) {
    
    
                    popupWindow.dismiss();
                }
            }
        });
        //朋友圈分享
        tvSharepyq.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                setShare(activity, TYPE_WECHAT_MOMENT, url, title, describe, image);
                if (popupWindow != null && popupWindow.isShowing()) {
    
    
                    popupWindow.dismiss();
                }
            }
        });
//        //微博分享
//        tvShareWeiBo.setOnClickListener(new View.OnClickListener() {
    
    
//            @Override
//            public void onClick(View v) {
    
    
//                setWeiShare(activity, url, title, image);
//                if (popupWindow != null && popupWindow.isShowing()) {
    
    
//                    popupWindow.dismiss();
//                }
//            }
//        });
        //QQ分享
        tvShareQQ.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                setQQShare(activity, "QQ", url, title, describe, image);
                if (popupWindow != null && popupWindow.isShowing()) {
    
    
                    popupWindow.dismiss();
                }
            }
        });
        //QQ空间分享
        tvShareZQne.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                setQQShare(activity, "QQZQne", url, title, describe, image);
                if (popupWindow != null && popupWindow.isShowing()) {
    
    
                    popupWindow.dismiss();
                }
            }
        });
        popupWindow.setFocusable(true);
        popupWindow.setAnimationStyle(R.style.PopupWindow);
        popupWindow.showAtLocation(v, Gravity.BOTTOM, 0, 0);
        popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
    
    
            @Override
            public void onDismiss() {
    
    
                popupWindow.dismiss();
                setBackgroundAlpha(activity, 1f);
            }
        });
        setBackgroundAlpha(activity, 0.6f);
    }

    /**
     * wx分享
     *
     * @param type
     */
    private static void setShare(Activity activity, String type, String url, String title, String describe, String image) {
    
    
        mApi = WXAPIFactory.createWXAPI(activity, 开放平台上的值);
        mApi.registerApp(开放平台上的值);
        // 通过appId得到IWXAPI这个对象
        // 检查手机或者模拟器是否安装了微信
        if (!mApi.isWXAppInstalled()) {
    
    
            ToastUtil.show("您还没有安装微信");
            return;
        }

        new Thread(new Runnable() {
    
    
            @Override
            public void run() {
    
    
                try {
    
    
                    // 初始化一个WXWebpageObject对象
                    WXWebpageObject webpageObject = new WXWebpageObject();
                    // 填写网页的url
                    webpageObject.webpageUrl = url;

                    // 用WXWebpageObject对象初始化一个WXMediaMessage对象
                    WXMediaMessage msg = new WXMediaMessage(webpageObject);
                    // 填写网页标题、描述、位图
                    msg.title = title;
                    msg.description = describe;


                    Bitmap bmp = null;

                    bmp = BitmapFactory.decodeStream(new URL(image).openStream());

                    Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, 150, 150, true);
                    bmp.recycle();
                    msg.thumbData = Bitmap2Bytes(thumbBmp);
                    // 构造一个Req
                    SendMessageToWX.Req req = new SendMessageToWX.Req();
                    // transaction用于唯一标识一个请求(可自定义)
                    req.transaction = "webpage";
                    // 上文的WXMediaMessage对象
                    req.message = msg;
                    //根据type设置分享情景
                    switch (type) {
    
    
                        case TYPE_WECHAT:
                            //分享到微信好友
                            req.scene = SendMessageToWX.Req.WXSceneSession;
                            break;
                        case TYPE_WECHAT_MOMENT:
                            //分享到微信朋友圈
                            req.scene = SendMessageToWX.Req.WXSceneTimeline;
                            break;
                    }
                    mApi.sendReq(req);
                } catch (Exception e) {
    
    
                    e.printStackTrace();
                }
            }
        }).start();
    }

    //微博
    private static void setWeiShare(Activity activity, String url, String title, String image) {
    
    
        WbSdk.install(activity, new AuthInfo(activity,
                WeiBoConstants.APP_KEY, WeiBoConstants.REDIRECT_URL, WeiBoConstants.SCOPE));
        mShareType = activity.getIntent().getIntExtra(KEY_SHARE_TYPE, SHARE_CLIENT);
        shareHandler = new WbShareHandler(activity);
        shareHandler.registerApp();
        shareHandler.setProgressColor(0xff33b5e5);
        WeiboMultiMessage weiboMessage = new WeiboMultiMessage();
        weiboMessage.mediaObject = getWebpageObj(activity, url, title, image);
        shareHandler.shareMessage(weiboMessage, mShareType == SHARE_CLIENT);

    }

    //qq
    private static void setQQShare(Activity activity, String type, String url, String title, String describe, String image) {
    
    
        // Tencent类是SDK的主要实现类,开发者可通过Tencent类访问腾讯开放的OpenAPI。

// 其中APP_ID是分配给第三方应用的appid,类型为String。

        Tencent mTencent = Tencent.createInstance(QQ开放平台上的值, activity.getApplicationContext());

// 1.4版本:此处需新增参数,传入应用程序的全局context,可通过activity的getApplicationContext方法获取
        Bundle params = new Bundle();
        if (url != null && title != null && image != null) {
    
    
            if (type.equals("QQ")) {
    
    
                params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_DEFAULT);
                params.putString(QQShare.SHARE_TO_QQ_TITLE,  title);// 标题
                params.putString(QQShare.SHARE_TO_QQ_SUMMARY, describe);// 摘要
                params.putString(QQShare.SHARE_TO_QQ_TARGET_URL, url);// 内容地址
                params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL, image);// 网络图片地址  params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "应用名称");// 应用名称
                //params.putString(QQShare.SHARE_TO_QQ_EXT_INT, "其它附加功能");
                mTencent.shareToQQ(activity, params, new ShareUiListener());
            } else {
    
    
                params.putInt(QzoneShare.SHARE_TO_QZONE_KEY_TYPE, QzoneShare.SHARE_TO_QZONE_TYPE_IMAGE_TEXT);
                params.putString(QzoneShare.SHARE_TO_QQ_TITLE, title);// 标题
                params.putString(QzoneShare.SHARE_TO_QQ_SUMMARY, describe);// 摘要
                params.putString(QzoneShare.SHARE_TO_QQ_TARGET_URL, url);// 内容地址
                ArrayList<String> imgUrlList = new ArrayList<>();
                imgUrlList.add(image);
                params.putStringArrayList(QzoneShare.SHARE_TO_QQ_IMAGE_URL, imgUrlList);// 图片地址
                mTencent.shareToQzone(activity, params, new ShareUiListener());
            }
        }

    }

    private static WebpageObject getWebpageObj(Activity activity, String url, String title, String image) {
    
    
        WebpageObject mediaObject = new WebpageObject();
        mediaObject.identify = Utility.generateGUID();
        if (url != null && title != null && image != null) {
    
    
            mediaObject.title = title;
            mediaObject.description = title;
        }
        Bitmap bitmap = BitmapFactory.decodeResource(activity.getResources(), R.drawable.icon_logo);
        mediaObject.setThumbImage(bitmap);
        mediaObject.actionUrl = image;
        mediaObject.defaultText = "app";
        return mediaObject;
    }

    //设置屏幕背景透明效果
    public static void setBackgroundAlpha(Activity activity, float alpha) {
    
    
        WindowManager.LayoutParams lp = activity.getWindow().getAttributes();
        lp.alpha = alpha;
        activity.getWindow().setAttributes(lp);
    }

//QQ分享回调
    static class ShareUiListener implements IUiListener {
    
    

        @Override
        public void onComplete(Object response) {
    
    
            Log.v(TAG, "----onCompletesss-----type==" + mSharetypes);

        }

        @Override
        public void onError(UiError uiError) {
    
    
            //分享失败
            Log.v(TAG, "----uiErrorsss-----");
            ToastUtil.show("分享失败");
        }

        @Override
        public void onCancel() {
    
    
            //分享取消
            Log.v(TAG, "----onCancelsss-----");
            ToastUtil.show("分享取消");
        }
    }

    // 图片转 byte[] 数组
    public static byte[] Bitmap2Bytes(Bitmap bm) {
    
    
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
        return baos.toByteArray();
    }

    /**
     * 分享成功回调
     */
    static class shareCall implements DataCall<Result> {
    
    

        @Override
        public void success(Result data) {
    
    
            ToastUtil.show(data.getMsg());
        }

        @Override
        public void fail(ApiException e) {
    
    

        }
    }


}

猜你喜欢

转载自blog.csdn.net/weixin_43117800/article/details/109001152