分享到微信好友或朋友圈
这周末学习了如何将图片,文本,分享到微信好友或者是朋友圈,自己亲手敲了一把。结果一个bug让我很不爽。待会来谈谈bug是什么。
好了,写代码之前必须做这几件事情。在微信开发者网站上注册账号,填写app名称,包名,应用签名。第三个应用签名本以为自己随便写一个,其实不然,需要下载签名生成工具,然后安装到手机上(此为我的愚蠢Bug,后来看微信官网才解决了),还需要下载Android开发工具包,里面有个jar包需要导入到Android Studio中。注意,申请ok后会展示:
下面演示下Demo:
先来展示下布局效果吧:
再来看一下工程目录:
话说,展示效果也他妈太大了吧。
代码如下:
public class MainActivity extends Activity {private IWXAPI api;private CheckBox mCheckBox;private static final String App_ID = "wxbb5a317744264a34";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);api = WXAPIFactory.createWXAPI(this, App_ID);//注册IDapi.registerApp(App_ID);mCheckBox = (CheckBox) findViewById(R.id.checkBox);}//启动微信客户端public void btn_open_weixin(View view) {//唯一标识符,采用text+当前时间{//开启微信api.openWXApp();}
//生成唯一标识符public String onlySign(final String text) {//当前时间+字符串return (text == null ? String.valueOf(System.currentTimeMillis()) : String.valueOf(text + System.currentTimeMillis()));}public void btn_send(View view) {//分享文本到好友或者朋友圈,如果checkbox未选中,则发送给好友,否则,发送到朋友圈。//创建EditTextfinal EditText mEditText = new EditText(this);mEditText.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,RelativeLayout.LayoutParams.WRAP_CONTENT));mEditText.setText("默认的分享的文本");AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setIcon(R.mipmap.ic_launcher);builder.setTitle("分享");builder.setMessage("请输入要分享的文本");builder.setView(mEditText);builder.setPositiveButton("分享", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {//获取要分享的内容String text = mEditText.getText().toString();if (text == null || text.length() == 0) {return;}//第一步:创建WXTextObject对象,用于封装textWXTextObject object = new WXTextObject();object.text = text;//第二步:拿到WXMediaMessage对象,用于客户端向微信发送数据WXMediaMessage msg = new WXMediaMessage();msg.mediaObject = object;msg.description = text;//第三步:拿到SendMessageToWX.Req对象,用于请求微信客户端SendMessageToWX.Req req = new SendMessageToWX.Req();req.message = msg;//生成唯一标识符req.transaction = onlySign("text");//建立场景,到底是发送给朋友还是朋友圈req.scene = mCheckBox.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;//这次真的发送了Toast.makeText(MainActivity.this, String.valueOf(api.sendReq(req)), Toast.LENGTH_LONG).show();}});builder.setNegativeButton("取消", null);AlertDialog alertDialog = builder.create();alertDialog.show();}//将Bitmap装换成Byte数组,用来压缩图片private byte[] BmpToByteArray(final Bitmap bitmap, final boolean isRecycle) {ByteArrayOutputStream outputStream = new ByteArrayOutputStream();bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream);if (isRecycle) {bitmap.recycle();}byte[] result = outputStream.toByteArray();try {outputStream.close();} catch (IOException e) {e.printStackTrace();}return result;}//发送二进制图片public void btn_send_binary_image(View view) {Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.robot);WXImageObject object = new WXImageObject(bitmap);WXMediaMessage message = new WXMediaMessage();message.mediaObject = object;Bitmap thumbBmp = Bitmap.createScaledBitmap(bitmap, 80, 80, true);bitmap.recycle();message.thumbData = BmpToByteArray(thumbBmp, true);SendMessageToWX.Req req = new SendMessageToWX.Req();req.message = message;req.scene = mCheckBox.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;req.transaction = onlySign("BinaryImage");Toast.makeText(MainActivity.this, String.valueOf(api.sendReq(req)), Toast.LENGTH_LONG).show();}public void btn_send_local_Image(View view) {String path = "/sdcard/1461370355308.jpeg";File file = new File(path);if (!file.exists()) {Toast.makeText(this, "图片不存在", Toast.LENGTH_LONG).show();return;}WXImageObject object = new WXImageObject();object.setImagePath(path);WXMediaMessage message = new WXMediaMessage();message.mediaObject = object;Bitmap bitmap = BitmapFactory.decodeFile(path);Bitmap thumbBmp = Bitmap.createScaledBitmap(bitmap, 80, 80, true);bitmap.recycle();message.thumbData = BmpToByteArray(thumbBmp, true);SendMessageToWX.Req req = new SendMessageToWX.Req();req.message = message;req.scene = mCheckBox.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;req.transaction = onlySign("LocalImage");Toast.makeText(MainActivity.this, String.valueOf(api.sendReq(req)), Toast.LENGTH_LONG).show();}public void btn_send_Internet_image(View view) {Thread thread = new Thread(new Runnable() {@Overridepublic void run() {try {String uri = "http://img1.imgtn.bdimg.com/it/u=2468413383,2378712674&fm=21&gp=0.jpg";WXImageObject object = new WXImageObject();// object.imageUrl = uri;object.setImagePath(uri);WXMediaMessage message = new WXMediaMessage();message.mediaObject =object;Bitmap bitmap =BitmapFactory.decodeStream(new URL(uri).openStream());Bitmap thumbBmp = Bitmap.createScaledBitmap(bitmap,80,80,true);bitmap.recycle();message.thumbData = BmpToByteArray(thumbBmp,true);SendMessageToWX.Req req = new SendMessageToWX.Req();req.message = message;req.scene = mCheckBox.isChecked()?SendMessageToWX.Req.WXSceneTimeline:SendMessageToWX.Req.WXSceneSession;req.transaction = onlySign("URLImage");Toast.makeText(MainActivity.this,String.valueOf(api.sendReq(req)),Toast.LENGTH_LONG).show();}catch (Exception e){e.printStackTrace();}}});
thread.start();}public void btn_send_audio(View view){WXMusicObject object =new WXMusicObject();object.musicUrl = "http://music.baidu.com/song/290008";WXMediaMessage msg = new WXMediaMessage();msg.title="我只在乎你";msg.description="演唱者:邓丽君";msg.mediaObject = object;Bitmap thumbBit = BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher);msg.thumbData = BmpToByteArray(thumbBit,true);SendMessageToWX.Req req = new SendMessageToWX.Req();req.message = msg;req.scene = mCheckBox.isChecked()?SendMessageToWX.Req.WXSceneTimeline:SendMessageToWX.Req.WXSceneSession;req.transaction = onlySign("URLAudio");Toast.makeText(MainActivity.this,String.valueOf(api.sendReq(req)),Toast.LENGTH_LONG).show();}public void btn_send_video(View view){WXVideoObject object = new WXVideoObject();object.videoUrl="http://open.163.com/movie/2016/4/C/K/MBJEDVIOI_MBJEE9UCK.html";WXMediaMessage msg = new WXMediaMessage();msg.title="一切只需十分钟的专注";msg.description="TED";msg.mediaObject = object;Bitmap thumbBit = BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher);msg.thumbData = BmpToByteArray(thumbBit,true);SendMessageToWX.Req req = new SendMessageToWX.Req();req.message = msg;req.scene = mCheckBox.isChecked()?SendMessageToWX.Req.WXSceneTimeline:SendMessageToWX.Req.WXSceneSession;req.transaction = onlySign("URLvideo");Toast.makeText(MainActivity.this,String.valueOf(api.sendReq(req)),Toast.LENGTH_LONG).show();}public void btn_share_weburi(View view){WXWebpageObject object = new WXWebpageObject();object.webpageUrl ="http://open.163.com/ted/";WXMediaMessage msg = new WXMediaMessage();msg.title="网易公开课";msg.description="TED";msg.mediaObject = object;Bitmap thumbBit = BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher);msg.thumbData = BmpToByteArray(thumbBit,true);SendMessageToWX.Req req = new SendMessageToWX.Req();req.message = msg;req.scene = mCheckBox.isChecked()?SendMessageToWX.Req.WXSceneTimeline:SendMessageToWX.Req.WXSceneSession;req.transaction = onlySign("WEBuri");Toast.makeText(MainActivity.this,String.valueOf(api.sendReq(req)),Toast.LENGTH_LONG).show();}
}
这里代码比较多,但都是差不多的,就创建对象时几个sdk不太一样罢了。这里其实可以将相同代码封装在方法中。更有维护性与可阅读性。
最后,展示下一部分效果吧
对于初学者来说或许会有一点问题,比如api.sendReq(req)明明返回true,可是没有调起微信朋友圈,或者分享图片时同样掉不起来,那么这时需要查清楚包名,APPID,应用签名是否一致,缩略图大小不能超过32k。如果再有问题欢迎留言或者推荐看这套视频(李宁微信分享)[http://www.imooc.com/learn/455].
分享到微信好友或朋友圈相关推荐
- 前端Vue分享菜单按钮弹框、微博分享、QQ分享、微信好友、朋友圈
前端Vue分享菜单按钮弹框.微博分享.QQ分享.微信好友.朋友圈 , 下载完整代码请访问uni-app插件市场址:https://ext.dcloud.net.cn/plugin?id=13085 效 ...
- uniapp分享到微信好友和朋友圈
uniapp分享到微信好友和朋友圈 首先目前的微信小程序只支持页面中右上角三个点触发分享功能,页面按钮只能触发分享至微信好友的功能 <template><view class=&qu ...
- 知识竞赛小程序、知识库小程序如何分享到微信好友、朋友圈
知识竞赛小程序.知识库小程序如何分享到微信好友.朋友圈 一.功能说明 基于微信生态,实现小程序分享,有效利用微信社交关系链,进行传播,提高你小程序的访问,也可促进更多付费. 1.页面分享 1.1 页面 ...
- Android应用实现微信分享(微信好友,朋友圈),分享链接,图片,文字
科技快讯 9月2日晚间,华为终端宣布,将于10月16日在德国慕尼黑发布华为 Mate 10 新机.从放出的海报来看,证实了华为 Mate 10 将搭载自家的麒麟970处理器,并采用时下流行的全面屏设计 ...
- 微信公众号分享给微信好友和朋友圈
前端 引入js <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1 ...
- mui webapp分享到微信好友,朋友圈图片显示不出来问题解决
问题现象: mui webapp分享到微信好友和朋友圈,在android手机上正常,但是在IOS手机上,设置的thumbs和pictures图片显示不出来 代码: msg.thumbs=msg.pic ...
- 不同平台使用不同技术实现微信好友、朋友圈分享汇总(H5、taro、uni-app)
人生路漫漫,坑,是活久了见.程序猿世界里各种奇葩的需求都有,随之而来的各种坑也是层出不穷. 应前IBM同事邀请特来做分享的专题总结.一般人我不告诉他,刷到的朋友们就赚到了,你懂的~~~~~~收藏吧! ...
- html分享微信qq等,h5移动端调用微信好友,朋友圈,QQ好友,QQ空间等APP分享功能...
这个主要在项目中要实现的功能,现在的手机浏览器基本也都含有分享功能,但有的手机浏览器就没有分享微信好友,朋友圈等选项,虽然微信内置X5含有此功能,但不同的手机终端分享选项又不一样,因本人还是比较喜欢老 ...
- 如何修改手机端分享网页给微信好友和朋友圈显示的图片和标题
最初,我以为这个东西很复杂,还微信开发者哪里找了文档来看.准备使用微信JS-SDK里面的方法-.. 但是它仅仅只是这样子的简单. 微信好友和朋友圈都差不多,以分享到微信好友的为例 <!DOCTY ...
最新文章
- 在Ubuntu14.04安装F.lux
- 也论标准: 统一是啥好事情?
- DB设计原则(一)字段名定义避免二义性。
- SQL Serever学习7——数据表2
- JAVA核心技术卷2:高级特征(原书第8版)
- 大公司的老板更专注人,小公司的老板更专注事
- ZABBIX 3.2.7 (源码包)安装部署
- FPGA实现VGA显示(一)——————屏幕驱动及color_bar显示
- 前端JAVASCRIPT模块化开发
- nginx限制并发连接数和连接请求数
- 智能小车52单片机c语言,基于STC89C52单片机的智能循迹小车设计
- python画球面投影_使用opencv-python对图片进行球面投影
- Aug.2019_Memory
- Git使用教程详解之四 服务器上的Git
- Oracle安装手册
- Android聊天软件的开发(七)--聊天通信
- docker安装Mysql
- 固件和微码到底啥区别
- 强势杀入汽车B2B电商王者榜的卖好车,具备怎么样的核心竞争力
- php经常致命错误怎么办,如何捕获PHP中的致命错误(Fatal Errors)
热门文章
- 脑电(EEG)等公开数据集汇总
- 数据结构c语言版二叉树的顺序存储表示,数据结构(十一) -- C语言版 -- 树 - 二叉树基本概念...
- php人像分割 人像抠图 证件照换底色 在线制作证件照API
- 亿佰特串口服务器接入阿里云物模型使用教程
- 阅读笔记:Zero-Effort Cross-Domain Gesture Recognition with Wi-Fi
- python 基础 | 4.运算符
- 分形之koch曲线生成
- 了解会员管理软件基本功能,挑选适合的会员管理系统
- docker部署smokeping监控网络掉包
- C++----字符集详解(一看就懂系列)