Android平台的微信分享
2015-12-01 17:41
302 查看
现在微信分享已经是一个app必备的功能,在这里简单的介绍一下最基本的微信分享的功能。
主要流程:
1,在微信开发平台注册账号,这与微信账号不同,微信开放平台
2,在微信开放平台创建你的应用app
3,导入微信sdk
4,启动微信
5,分享文本到好友或朋友圈
6,分享图片到好友或朋友圈
7,分享音频到好友或朋友圈
8,分享视频到好友或朋友圈
9,分享url到好友或朋友圈
10,分享表情到好友或朋友圈
2,在微信开放平台创建你的应用app,建议现在你的IDE中创建你的项目,然后在根据你的项目在开放平台上创建
响应的应用。注意包名必须与你的IDE中项目包名一致,应用签名必须使用开放平台资源下载-签名生成工具生成的签名。
3,导入微信sdk,即将libammsdk.jar考入libs文件中。右击jar-build path - configure build path...
然后在AndroidManifest.xml中添加响应的权限,移动应用接入指南
4,启动微信:
要调用微信sdk中的api,必须先初始化(在以后的api调用中,都默认已经初始化)
启动微信的api调用:
5,分享文本到好友或朋友圈
6,分享图片到好友或朋友圈
6.1,二进制图片
6.2,分享本地图片
6.3,分享网络图片
7,分享音频到好友或朋友圈
8,分享视频到好友或朋友圈
9,分享url 到好友或朋友圈
10,分享表情到好友或朋友圈
其他辅助代码
特别注意,在设置缩略图,缩略图有严格的要求:大小不能超过32k,高宽也有要求,另外限制的还有title、description等参数的。
主要流程:
1,在微信开发平台注册账号,这与微信账号不同,微信开放平台
2,在微信开放平台创建你的应用app
3,导入微信sdk
4,启动微信
5,分享文本到好友或朋友圈
6,分享图片到好友或朋友圈
7,分享音频到好友或朋友圈
8,分享视频到好友或朋友圈
9,分享url到好友或朋友圈
10,分享表情到好友或朋友圈
2,在微信开放平台创建你的应用app,建议现在你的IDE中创建你的项目,然后在根据你的项目在开放平台上创建
响应的应用。注意包名必须与你的IDE中项目包名一致,应用签名必须使用开放平台资源下载-签名生成工具生成的签名。
3,导入微信sdk,即将libammsdk.jar考入libs文件中。右击jar-build path - configure build path...
然后在AndroidManifest.xml中添加响应的权限,移动应用接入指南
4,启动微信:
要调用微信sdk中的api,必须先初始化(在以后的api调用中,都默认已经初始化)
private IWXAPI mIWXAPI = null;//定义成员变量 public static final String AppId = "wx94697bac0300039f";//在开放平台创建项目时,获得appId。初始化:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_testweixin); initViews(); mContext = this; mIWXAPI = WXAPIFactory.createWXAPI(mContext, AppId,true); mIWXAPI.registerApp(AppId); registerListener(); }
启动微信的api调用:
Toast.makeText(mContext, ""+mIWXAPI.openWXApp(), Toast.LENGTH_LONG).show();//顺便Tosat了返回的结果。
5,分享文本到好友或朋友圈
/** * 发送消息到微信 * */ private void shareTextToWX() { String text = et_share_content.getText().toString(); WXTextObject textObj = new WXTextObject(); textObj.text = text; WXMediaMessage mediaMsg = new WXMediaMessage(); mediaMsg.mediaObject = textObj; mediaMsg.description = text; // 创建一个请求的对象 SendMessageToWX.Req req = new SendMessageToWX.Req(); req.message = mediaMsg; // 唯一标示 req.transaction = System.currentTimeMillis() + "text"; // 标示发送给朋友或朋友圈 if (tg.isChecked()) { req.scene = SendMessageToWX.Req.WXSceneSession; } else { req.scene = SendMessageToWX.Req.WXSceneTimeline; } mIWXAPI.sendReq(req); }
6,分享图片到好友或朋友圈
6.1,二进制图片
/** * 分享二进制 */ private void shareImageToWxWidthBinary() { Options options = new Options(); options.inSampleSize = 3; // 第一步,获取bitmap对象 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.shamo, options); // 第二步,创建Wx。。。Object对象,并包装bitmap WXImageObject wxObj = new WXImageObject(bitmap);// 设置原图 // 第三步,创建WxMediaMessage对象,并包装object对象 WXMediaMessage wxMsg = new WXMediaMessage(); wxMsg.mediaObject = wxObj; // 压缩图像 Bitmap thumBitmap = Bitmap.createScaledBitmap(bitmap, 120, 150, true); bitmap.recycle();// 释放资源 wxMsg.thumbData = bmpToByteArray(thumBitmap, true, 10);// 缩率图大小不能超过32k // 第四步,创建一个请求对象 SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildUniqueTransaction("img"); req.message = wxMsg; // 第六步,设置分享的对象 if (tg.isChecked()) { req.scene = SendMessageToWX.Req.WXSceneSession; } else { req.scene = SendMessageToWX.Req.WXSceneTimeline; } Toast.makeText(this, mIWXAPI.sendReq(req) + "", Toast.LENGTH_LONG).show(); Log.i(tag, "分享成功"); }
6.2,分享本地图片
/** * 分享本地 */ private void shareImageToWXFromLocal() { File parent = Environment.getExternalStorageDirectory(); File file = new File(parent, "shamo.jpg"); if (!file.exists()) { Toast.makeText(this, "文件不存在", Toast.LENGTH_LONG).show(); return; } // 第一步,创建Wx。。。Object对象,并包装bitmap WXImageObject wxObj = new WXImageObject();// 设置原图 wxObj.imagePath = file.getAbsolutePath(); // 第二步,创建WxMediaMessage对象,并包装object对象 WXMediaMessage wxMsg = new WXMediaMessage(); wxMsg.mediaObject = wxObj; Options options = new Options(); options.inSampleSize = 6; // 第三步,获取bitmap对象 Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath(), options); // 压缩图像 Bitmap thumBitmap = Bitmap.createScaledBitmap(bitmap, 120, 150, true); bitmap.recycle();// 释放资源 wxMsg.thumbData = bmpToByteArray(thumBitmap, true, 10);// 缩率图大小不能超过32k // 第四步,创建一个请求对象 SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildUniqueTransaction("img"); req.message = wxMsg; // 第六步,设置分享的对象 if (tg.isChecked()) { req.scene = SendMessageToWX.Req.WXSceneSession; } else { req.scene = SendMessageToWX.Req.WXSceneTimeline; } Toast.makeText(this, mIWXAPI.sendReq(req) + "", Toast.LENGTH_LONG).show(); Log.i(tag, "分享成功"); }
6.3,分享网络图片
/** * 发送图片url */ private void shareImageToWXWidthUrl() { new Thread() { @Override public void run() { String url = "http://g.hiphotos.baidu.com/image/pic/item/960a304e251f95ca2f34115acd177f3e6609521d.jpg"; // 第一步,创建Wx。。。Object对象,并包装bitmap WXImageObject wxObj = new WXImageObject();// 设置原图 wxObj.imageUrl = url; // 第二步,创建WxMediaMessage对象,并包装object对象 WXMediaMessage wxMsg = new WXMediaMessage(); wxMsg.mediaObject = wxObj; Options options = new Options(); options.inSampleSize = 6; // 第三步,获取bitmap对象 Bitmap bitmap = null; try { bitmap = BitmapFactory.decodeStream(new URL(url).openStream()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } // 压缩图像 Bitmap thumBitmap = Bitmap.createScaledBitmap(bitmap, 120, 150, true); bitmap.recycle();// 释放资源 wxMsg.thumbData = bmpToByteArray(thumBitmap, true, 10);// 缩率图大小不能超过32k // 第四步,创建一个请求对象 final SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildUniqueTransaction("img"); req.message = wxMsg; // 第六步,设置分享的对象 if (tg.isChecked()) { req.scene = SendMessageToWX.Req.WXSceneSession; } else { req.scene = SendMessageToWX.Req.WXSceneTimeline; } mHandler.post(new Runnable() { @Override public void run() { Toast.makeText(mContext, mIWXAPI.sendReq(req) + "", Toast.LENGTH_LONG) .show(); } }); Log.i(tag, "分享成功"); } }.start(); }
7,分享音频到好友或朋友圈
/** * 分url音频 */ private void shareAudioToWX() { // 第一步创建封装的obj WXMusicObject musicObj = new WXMusicObject(); musicObj.musicUrl = "http://music.baidu.com/song/999104?pst=sug"; // 创建MediaMessage WXMediaMessage wxMsg = new WXMediaMessage(); wxMsg.mediaObject = musicObj; wxMsg.title = "向天再借五百年"; wxMsg.description = "演唱者:韩磊"; // 创建缩略图 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.music); Bitmap thumBitmap = Bitmap.createScaledBitmap(bitmap, 120, 150, true); bitmap.recycle();// 释放资源 wxMsg.thumbData = bmpToByteArray(thumBitmap, true, 100); // 创建请求对象 SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildUniqueTransaction("audio"); req.message = wxMsg; if (tg.isChecked()) {// 分享的对象 req.scene = SendMessageToWX.Req.WXSceneSession; } else { req.scene = SendMessageToWX.Req.WXSceneTimeline; } // 分享 Toast.makeText(mContext, mIWXAPI.sendReq(req) + "", Toast.LENGTH_LONG).show(); }
8,分享视频到好友或朋友圈
/** * 分享视频 */ private void shareVideoToWx() { //创建Obj WXVideoObject video = new WXVideoObject(); video.videoUrl = "http://v.youku.com/v_show/id_XMTM5NjM0NDgyNA==.html?from=y1.7-2"; // WXMediaMessage wxMsg = new WXMediaMessage(); wxMsg.mediaObject = video; wxMsg.title = "午夜花火"; wxMsg.description = "锦尚天舞"; //创建缩略图 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.video); Bitmap thumBitmap = Bitmap.createScaledBitmap(bitmap, 120, 150, true); bitmap.recycle();// 释放资源 wxMsg.thumbData = bmpToByteArray(thumBitmap, true, 100); //创建请求对象 SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildUniqueTransaction("video"); req.message = wxMsg; if (tg.isChecked()) {// 分享的对象 req.scene = SendMessageToWX.Req.WXSceneSession; } else { req.scene = SendMessageToWX.Req.WXSceneTimeline; } // 分享 Toast.makeText(mContext, mIWXAPI.sendReq(req) + "", Toast.LENGTH_LONG).show(); }
9,分享url 到好友或朋友圈
/** * 分享网页 */ private void sharePageToWX() { // 第一步创建WebPage对象 WXWebpageObject webPage = new WXWebpageObject(); webPage.webpageUrl = "http://www.imooc.com/course/list"; // 创建MediaMessage WXMediaMessage wxMsg = new WXMediaMessage(); wxMsg.mediaObject = webPage; wxMsg.title = "慕课网"; wxMsg.description = "在线IT教学网站"; // 创建缩略图 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.muke); Bitmap thumBitmap = Bitmap.createScaledBitmap(bitmap, 120, 150, true); bitmap.recycle();// 释放资源 wxMsg.thumbData = bmpToByteArray(thumBitmap, true, 100); // 创建请求对象 SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildUniqueTransaction("video"); req.message = wxMsg; if (tg.isChecked()) {// 分享的对象 req.scene = SendMessageToWX.Req.WXSceneSession; } else { req.scene = SendMessageToWX.Req.WXSceneTimeline; } Toast.makeText(mContext, mIWXAPI.sendReq(req) + "", Toast.LENGTH_LONG).show(); }
10,分享表情到好友或朋友圈
/** * 分享表情 */ private void shareFaceToWX(){ File parent = Environment.getExternalStorageDirectory(); File file = new File(parent,"face.gif"); //第一步,创建一个封装表情的对象 WXEmojiObject emoji = new WXEmojiObject(); emoji.emojiPath = file.getAbsolutePath(); // 创建MediaMessage WXMediaMessage wxMsg = new WXMediaMessage(); wxMsg.mediaObject = emoji; wxMsg.title = "表情标题"; wxMsg.description = "表情描述"; // 创建缩略图 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.face); Bitmap thumBitmap = Bitmap.createScaledBitmap(bitmap, 120, 150, true); bitmap.recycle();// 释放资源 wxMsg.thumbData = bmpToByteArray(thumBitmap, true, 100); // 创建请求对象 SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildUniqueTransaction("face"); req.message = wxMsg; if (tg.isChecked()) {// 分享的对象 req.scene = SendMessageToWX.Req.WXSceneSession; } else { req.scene = SendMessageToWX.Req.WXSceneTimeline; } Toast.makeText(mContext, mIWXAPI.sendReq(req) + "", Toast.LENGTH_LONG).show(); }
其他辅助代码
/** * 将Bitmap转化成一个二进制的数组 * * @param bitmap * @return * @throws IOException */ private byte[] bmpToByteArray(Bitmap bitmap, boolean needRecyle, int scale) { byte[] byteArray = null; try { ByteArrayOutputStream bos = new ByteArrayOutputStream(); bitmap.compress(CompressFormat.PNG, scale, bos); byteArray = bos.toByteArray(); if (needRecyle) { bitmap.recycle(); } bos.close(); } catch (Exception e) { e.printStackTrace(); } return byteArray; } /** * 创建唯一标示 * * @return */ private String buildUniqueTransaction(String str) { String uniqueTransaction = String.valueOf(System.currentTimeMillis()) + str; return uniqueTransaction; }
特别注意,在设置缩略图,缩略图有严格的要求:大小不能超过32k,高宽也有要求,另外限制的还有title、description等参数的。
相关文章推荐
- 练手小程序(四)
- 关于shareSDK微信分享
- 仿微信、短信、QQ等消息数目右上角红色小圆球气泡显示(基于Android XML布局文件实现)
- Jfinal极速开发微信系列教程(一)--------------Jfinal_weixin demo的使用分析
- 提权小程序
- 收集微信里的图像处理中常用的图像库
- 微信的名词解释
- php微信开发备忘-接收处理文本消息
- android 沉浸式布局, 仿QQ微信,title和状态栏同一颜色
- 产品工作中保持饥饿感,保持拒绝90%以上的伪需求你就不会错过下一个微信
- Android 微信分享
- 仿UC天气下拉和微信下拉眼睛头部淡入淡出--第三方开源--PullLayout
- 微信开发数据收发原理及消息数据格式
- iOS 集成微信支付【转载】
- 以蓝牙开发的视觉解读微信Airsync协议
- 微信支付本地调试
- Android应用加入微信分享
- 微信JS-SDK说明文档 能调用微信扫一扫 ,那能不能让浏览器支持微信支付呢
- 微信公众号与HTML 5混合模式揭秘5——JSSDK开发技巧1
- 微信公众号与HTML 5混合模式揭秘5——JSSDK开发技巧1