这周末学习了如何将图片,文本,分享到微信好友或者是朋友圈,自己亲手敲了一把。结果一个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].

分享到微信好友或朋友圈相关推荐

  1. 前端Vue分享菜单按钮弹框、微博分享、QQ分享、微信好友、朋友圈

    前端Vue分享菜单按钮弹框.微博分享.QQ分享.微信好友.朋友圈 , 下载完整代码请访问uni-app插件市场址:https://ext.dcloud.net.cn/plugin?id=13085 效 ...

  2. uniapp分享到微信好友和朋友圈

    uniapp分享到微信好友和朋友圈 首先目前的微信小程序只支持页面中右上角三个点触发分享功能,页面按钮只能触发分享至微信好友的功能 <template><view class=&qu ...

  3. 知识竞赛小程序、知识库小程序如何分享到微信好友、朋友圈

    知识竞赛小程序.知识库小程序如何分享到微信好友.朋友圈 一.功能说明 基于微信生态,实现小程序分享,有效利用微信社交关系链,进行传播,提高你小程序的访问,也可促进更多付费. 1.页面分享 1.1 页面 ...

  4. Android应用实现微信分享(微信好友,朋友圈),分享链接,图片,文字

    科技快讯 9月2日晚间,华为终端宣布,将于10月16日在德国慕尼黑发布华为 Mate 10 新机.从放出的海报来看,证实了华为 Mate 10 将搭载自家的麒麟970处理器,并采用时下流行的全面屏设计 ...

  5. 微信公众号分享给微信好友和朋友圈

    前端 引入js <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1 ...

  6. mui webapp分享到微信好友,朋友圈图片显示不出来问题解决

    问题现象: mui webapp分享到微信好友和朋友圈,在android手机上正常,但是在IOS手机上,设置的thumbs和pictures图片显示不出来 代码: msg.thumbs=msg.pic ...

  7. 不同平台使用不同技术实现微信好友、朋友圈分享汇总(H5、taro、uni-app)

    人生路漫漫,坑,是活久了见.程序猿世界里各种奇葩的需求都有,随之而来的各种坑也是层出不穷. 应前IBM同事邀请特来做分享的专题总结.一般人我不告诉他,刷到的朋友们就赚到了,你懂的~~~~~~收藏吧! ...

  8. html分享微信qq等,h5移动端调用微信好友,朋友圈,QQ好友,QQ空间等APP分享功能...

    这个主要在项目中要实现的功能,现在的手机浏览器基本也都含有分享功能,但有的手机浏览器就没有分享微信好友,朋友圈等选项,虽然微信内置X5含有此功能,但不同的手机终端分享选项又不一样,因本人还是比较喜欢老 ...

  9. 如何修改手机端分享网页给微信好友和朋友圈显示的图片和标题

    最初,我以为这个东西很复杂,还微信开发者哪里找了文档来看.准备使用微信JS-SDK里面的方法-.. 但是它仅仅只是这样子的简单. 微信好友和朋友圈都差不多,以分享到微信好友的为例 <!DOCTY ...

最新文章

  1. 在Ubuntu14.04安装F.lux
  2. 也论标准: 统一是啥好事情?
  3. DB设计原则(一)字段名定义避免二义性。
  4. SQL Serever学习7——数据表2
  5. JAVA核心技术卷2:高级特征(原书第8版)
  6. 大公司的老板更专注人,小公司的老板更专注事
  7. ZABBIX 3.2.7 (源码包)安装部署
  8. FPGA实现VGA显示(一)——————屏幕驱动及color_bar显示
  9. 前端JAVASCRIPT模块化开发
  10. nginx限制并发连接数和连接请求数
  11. 智能小车52单片机c语言,基于STC89C52单片机的智能循迹小车设计
  12. python画球面投影_使用opencv-python对图片进行球面投影
  13. Aug.2019_Memory
  14. Git使用教程详解之四 服务器上的Git
  15. Oracle安装手册
  16. Android聊天软件的开发(七)--聊天通信
  17. docker安装Mysql
  18. 固件和微码到底啥区别
  19. 强势杀入汽车B2B电商王者榜的卖好车,具备怎么样的核心竞争力
  20. php经常致命错误怎么办,如何捕获PHP中的致命错误(Fatal Errors)

热门文章

  1. 脑电(EEG)等公开数据集汇总
  2. 数据结构c语言版二叉树的顺序存储表示,数据结构(十一) -- C语言版 -- 树 - 二叉树基本概念...
  3. php人像分割 人像抠图 证件照换底色 在线制作证件照API
  4. 亿佰特串口服务器接入阿里云物模型使用教程
  5. 阅读笔记:Zero-Effort Cross-Domain Gesture Recognition with Wi-Fi
  6. python 基础 | 4.运算符
  7. 分形之koch曲线生成
  8. 了解会员管理软件基本功能,挑选适合的会员管理系统
  9. docker部署smokeping监控网络掉包
  10. C++----字符集详解(一看就懂系列)