/**
* 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) {
}
}
}
Android分享带链接内容至QQ微信
猜你喜欢
转载自blog.csdn.net/weixin_43117800/article/details/109001152
今日推荐
周排行