发现一个微信的bug:IOS版的微信查看分享的图片可以长按弹出识别图片中的二维码提示,Android版没有,这是对Android赤裸裸的歧视啊
需要注意的一点:微信分享中涉及到图片的,一律都要压缩至120*120,否则会报错
import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Handler; import android.os.Message; import android.support.v7.app.AlertDialog; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.RelativeLayout; import android.widget.Toast; import com.tencent.mm.sdk.openapi.IWXAPI; import com.tencent.mm.sdk.openapi.SendMessageToWX; import com.tencent.mm.sdk.openapi.WXAPIFactory; import com.tencent.mm.sdk.openapi.WXImageObject; import com.tencent.mm.sdk.openapi.WXMediaMessage; import com.tencent.mm.sdk.openapi.WXTextObject; import com.tencent.mm.sdk.openapi.WXVideoObject; import com.tencent.mm.sdk.openapi.WXWebpageObject; import com.tencent.mm.sdk.platformtools.Util; import com.xuehu365.xuehu.R; import com.xuehu365.xuehu.model.Constant; import com.xuehu365.xuehu.model.VideoEntity; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; /** * Created by Administrator on 2016/9/6. */ public class WXShareUtils { private static IWXAPI wxApi; private static RelativeLayout wx_share_friend; private static RelativeLayout wx_share_pengyouquan; private static Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); SendMessageToWX.Req req = (SendMessageToWX.Req) msg.obj; //调用api接口发送数据到微信 wxApi.sendReq(req); } }; private static void init(Context context) { //实例化 wxApi = WXAPIFactory.createWXAPI(context, Constant.wxAppId); wxApi.registerApp(Constant.wxAppId); //判断是否有安装微信 if (!wxApi.isWXAppInstalled()) { Toast.makeText(context, "您还未安装微信客户端", Toast.LENGTH_SHORT).show(); return; } } //显示微信分享选择页面 public static void showShareSelect(final Context context, final String title, final String description, final String icon, final String webUrl, final int contentType) { View view = LayoutInflater.from(context).inflate(R.layout.share_window, null); AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.DialogTheme); builder.setView(view); final AlertDialog shareDialog = builder.create(); //显示在底部 Window window = shareDialog.getWindow(); window.setGravity(Gravity.BOTTOM); window.setWindowAnimations(R.style.dialog_animation); window.getDecorView().setPadding(0, 0, 0, 0); WindowManager.LayoutParams lp = window.getAttributes(); lp.width = WindowManager.LayoutParams.MATCH_PARENT; lp.height = WindowManager.LayoutParams.WRAP_CONTENT; window.setAttributes(lp); shareDialog.show(); wx_share_friend = (RelativeLayout) view.findViewById(R.id.wx_share_friend); wx_share_pengyouquan = (RelativeLayout) view.findViewById(R.id.wx_share_pengyouquan); //分享给好友 wx_share_friend.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { switch (contentType) { case Constant.wxText: WXShareUtils.shareText(context, "分享", Constant.wxFriend); break; case Constant.wxVideo: WXShareUtils.shareVideo(context, null, Constant.wxFriend); break; case Constant.wxWeb: WXShareUtils.shareWeb(context, title, description, icon, webUrl, Constant.wxFriend); break; } shareDialog.dismiss(); } }); //分享到朋友圈 wx_share_pengyouquan.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { switch (contentType) { case Constant.wxText: WXShareUtils.shareText(context, "分享", Constant.wxQuan); break; case Constant.wxVideo: WXShareUtils.shareVideo(context, null, Constant.wxQuan); break; case Constant.wxWeb: WXShareUtils.shareWeb(context, title, description, icon, webUrl, Constant.wxQuan); break; } shareDialog.dismiss(); } }); } /* 分享文本 */ public static void shareText(Context context, String text, String type) { init(context); //初始化一个WXTextObject对象,填写分享的文本内容 WXTextObject textObj = new WXTextObject(); textObj.text = text; //用WXTextObject对象初始化一个WXMediaMessage对象 WXMediaMessage msg = new WXMediaMessage(); msg.mediaObject = textObj; msg.description = text; //构造一个Req SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildTransaction("text"); req.message = msg; if (Constant.wxFriend.equals(type)) { req.scene = SendMessageToWX.Req.WXSceneSession; } else if (Constant.wxQuan.equals(type)) { req.scene = SendMessageToWX.Req.WXSceneTimeline; } //调用api接口发送数据到微信 wxApi.sendReq(req); } public static String buildTransaction(final String type) { return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis(); } /** * 图片分享 */ public static void shareImage(Context context, Bitmap bitmap, String type) { init(context); WXImageObject imageObj = new WXImageObject(bitmap); WXMediaMessage msg = new WXMediaMessage(); msg.mediaObject = imageObj; Bitmap thumbBmp = Bitmap.createScaledBitmap(bitmap, 120, 120, true); bitmap.recycle(); msg.thumbData = Util.bmpToByteArray(thumbBmp, true); SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildTransaction("img"); req.message = msg; if (Constant.wxFriend.equals(type)) { req.scene = SendMessageToWX.Req.WXSceneSession; } else if (Constant.wxQuan.equals(type)) { req.scene = SendMessageToWX.Req.WXSceneTimeline; } wxApi.sendReq(req); } /* 分享视频 */ public static void shareVideo(final Context context, VideoEntity videoEntity, String type) { init(context); //初始化一个WXVideoObject对象,填写url WXVideoObject video = new WXVideoObject(); video.videoUrl = videoEntity.getVideoVid(); //用一个WXVideoObject对象初始化一个WXMediaMessage对象,填写标题、描述 final WXMediaMessage msg = new WXMediaMessage(video); msg.title = videoEntity.getTitle(); msg.description = videoEntity.getTitle(); Bitmap thumb = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_logo); msg.thumbData = Util.bmpToByteArray(thumb, true); //构造一个Req final SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildTransaction("video"); req.message = msg; if (Constant.wxFriend.equals(type)) { req.scene = SendMessageToWX.Req.WXSceneSession; } else if (Constant.wxQuan.equals(type)) { req.scene = SendMessageToWX.Req.WXSceneTimeline; } //调用api接口发送数据到微信 wxApi.sendReq(req); } /* 分享网页 */ public static void shareWeb(final Context context, String title, String description, final String icon, String webUrl, String type) { init(context); //初始化一个WXWebpageObject对象,填写URL WXWebpageObject webpage = new WXWebpageObject(); webpage.webpageUrl = webUrl; //用WXWebpageObject对象初始化一个WXMediaMessage对象,填写标题、描述 final WXMediaMessage msg = new WXMediaMessage(webpage); msg.title = title; msg.description = description; //构造一个Req final SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildTransaction("webpage"); if (Constant.wxFriend.equals(type)) { req.scene = SendMessageToWX.Req.WXSceneSession; } else if (Constant.wxQuan.equals(type)) { req.scene = SendMessageToWX.Req.WXSceneTimeline; } new Thread(new Runnable() { @Override public void run() { Bitmap bitmap = loadBitmap(icon); Bitmap thumbBmp = Bitmap.createScaledBitmap(bitmap, 120, 120, true); msg.thumbData = Util.bmpToByteArray(thumbBmp, true); req.message = msg; Message message = mHandler.obtainMessage(); message.obj = req; mHandler.sendMessage(message); } }).start(); } //下载网络图片 private static Bitmap loadBitmap(String icon) { try { URL url = new URL(icon); InputStream is = url.openStream(); Bitmap bitmap = BitmapFactory.decodeStream(is); return bitmap; } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } }