对于分享这一块我也是研究了很久,本来打算用第3方的来做的。最后还是坚持下来了,决定直接用官方的。

首先给大家推荐一下一个第三方做分享的,现在这个第三方确实很不错,有时候我都想放弃官方的用他的来做。因为当时做官方的很恼火。



Share SDK,它是为iOS、Android、WP8的APP提供社会化功能的一个组件,目前支持如QQ、微信、新浪微博、腾讯微博、开心网、人人网、豆瓣、网易微博、搜狐微博、facebook、twitter、google+等国内外主流社交平台。

好的现在废话不多说了开始做我们的官方DEMO了。

当然,如果你要做分享首先需要的是去各大开放平台注册帐号然后申请。
     QQ开发平台:http://open.qq.com/;

微信开发平台:https://open.weixin.qq.com/

新浪微博开发平台:http://open.weibo.com/

下载最新的SDK。或者直接下载他们的DEMO可以先看一下。
     然后就是在各大平台创建自己的应用。

这里值得注意的是:当你用eclipse的MD5值的时候,记得把MD5值的冒号全部去掉,然后把所有大写字符变成小写字母来做签名。

首先我先说微信的分享,微信现在因为微信版本高了之后他支持的分享内容比较多,我这里就主要介绍2种就是文字和图片。

我们首先在微信开放平台申请自己的应用拿到APPID,然后下载他最新的SDK,放到自己项目的libs文件夹里面。

微信的SDK全名是:libammsdk.jar。mta-sdk-1.6.2.jar

微信准备工作已经做好了,我们现在开始写代码。

布局文件:名字自己随便取,然后在里面添加2个butto控件,并且添加ID。

<LinearLayout xmlns:android="<a target=_blank href="http://schemas.android.com/apk/res/android">http://schemas.android.com/apk/res/android</a>"xmlns:tools="<a target=_blank href="http://schemas.android.com/tools">http://schemas.android.com/tools</a>"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"android:orientation="vertical">   <Button android:id="@+id/wxh"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="微信好友"/><Button android:id="@+id/wxp"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="微信朋友圈"/></LinearLayout>

然后是代码的部分:

package com.zeo.manman;import com.tencent.mm.sdk.modelmsg.SendMessageToWX;
import com.tencent.mm.sdk.modelmsg.WXMediaMessage;
import com.tencent.mm.sdk.modelmsg.WXWebpageObject;
import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.WXAPIFactory;import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;public class MainActivity extends Activity implements OnClickListener{private Button wxh;private Button wxp;//IWXAPI 是第三方(也就是你的)app和微信通信的openapi接口private IWXAPI wxApi; private  static final String WXAPP_ID="wx30aeae8473fe6b69";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);init();//控件的初始化wXfenxiang();//向微信注册}
/*** 初始化控件*/private void init() {wxh = (Button)findViewById(R.id.wxh);wxp = (Button)findViewById(R.id.wxp);wxh.setOnClickListener(this);wxp.setOnClickListener(this);}/*** 注册到微信*/private void  wXfenxiang(){//这里是获取IWXAPI实列wxApi = WXAPIFactory.createWXAPI(this, WXAPP_ID);  //这里就是将应用的APPID注册到微信wxApi.registerApp(WXAPP_ID);  }@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.wxh:weiXinFx(0);//这里要实现的是微信好友的分享break;case R.id.wxp:weiXinFx(1);//这里要实现的是微信朋友圈的分享break;}}/*** 微信分享     * @param flag    flag=0 分享到微信好友 ; flag=1  分享到微信朋友圈  */private void weiXinFx(int flag){  WXWebpageObject webpage = new WXWebpageObject();  webpage.webpageUrl = "www.baidu.com";  WXMediaMessage msg = new WXMediaMessage(webpage);  msg.title = "这里填写标题";  msg.description = "这里填写内容";  //这里替换一张自己工程里的图片资源  Bitmap thumb = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);  msg.setThumbImage(thumb);  SendMessageToWX.Req req = new SendMessageToWX.Req();  req.transaction = String.valueOf(System.currentTimeMillis());  req.message = msg;  
/**需要注意的是,SendMessageToWX.Req的scene成员,如果scene填WXSceneSession,那么消息会发送至微信的会话内.如果scene填WXSceneTimeline(微信4.2以上支持,如果需要检查微信版本支持API的情况, 可调用IWXAPI的getWXApupportAPI方法,0x21020001及以上支持发送朋友圈),那么消息会发送至朋友圈。scene默认值为WXSceneSession。*/
     req.scene = flag==0?SendMessageToWX.Req.WXSceneSession:SendMessageToWX.Req.WXSceneTimeline;  wxApi.sendReq(req);  }  }

这里要说明的是,我们看官方文档可以看到微信分享有2种方式 sendReq 和 sendResp。他们的不同就是:

sendReq是第三方app主动发送消息给微信,发送完成之后会切回到第三方app界面。

sendResp是微信向第三方app请求数据,第三方app回应数据之后会切回到微信界面。

最后需要做的是:然后建立官方声明的回调类

在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类,该类继承自Activity。

然后添加权限和配置该类

<uses-permission android:name="android.permission.INTERNET"/>

<!-- 微信回调需要的配置 -->

<activity
            android:name=".wxapi.WXEntryActivity"
            android:exported="true"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />

微信到这里就结束了。当然如果你觉得发送的图片不是你想要的你可以用网上的图片或者是相机拍摄的又或者是你本地的相册。总之这些的话,你自己要加方法来实现。

接下来我们做QQ的分享 。也是分为2个 一个是QQ好友 一个是QQ空间。

我们在上面这个项目里面添加。首先下载资源包

分别是:open_sdk_r5043.jar

首先还是在布局文件里面添加2个BUTTON(注意这里不是新建,仅仅是添加2个新的button);

然后写代码:

在原有的基础上添加代码,并且在配置文件添加  <!-- QQ分享 -->
        <activity
            android:name="com.tencent.tauth.AuthActivity"
            android:launchMode="singleTask"
            android:noHistory="true" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

<!-- 这里的tencent1104739679 不要忘记把数字换成自己申请的APPID -->

<data android:scheme="tencent1104739679" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.tencent.connect.common.AssistActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />

需要添加的代码有:

在onCreate里面 添加qQfenxiang();方法名

然后写出此方法:

/*** QQTencet的实例*/private void qQfenxiang() {// Tencent类是SDK的主要实现类,开发者可通过Tencent类访问腾讯开放的OpenAPI。// 其中APP_ID是分配给第三方应用的appid,类型为String。mTencent = Tencent.createInstance("1104739679", this.getApplicationContext());// 1.4版本:此处需新增参数,传入应用程序的全局context,可通过activity的getApplicationContext方法获取}

然后在onClick(View v)里面的switch里面增加2个判断:

 case R.id.qqh:qqhy();//这里要实现的是微信朋友圈的分享break;case R.id.qqp:qqkj();//这里要实现的是微信朋友圈的分享break;

然后写出相应的2个方法:

/*** QQ空间*/private void qqkj() {//Tencent mTencent = Tencent.createInstance("1103995560", getActivity().getApplicationContext());// 1.4版本:此处需新增参数,传入应用程序的全局context,可通过activity的getApplicationContext方法获取// 初始化视图Bundle params = new Bundle();ArrayList<String> list = new ArrayList<String>();list.add("http://img.funshion.com/pictures/427/932/427932.jpg");params.putInt(QzoneShare.SHARE_TO_QZONE_KEY_TYPE,QzoneShare.SHARE_TO_QZONE_TYPE_IMAGE_TEXT);params.putString(QzoneShare.SHARE_TO_QQ_TITLE, "船渡科技");//必填params.putString(QzoneShare.SHARE_TO_QQ_SUMMARY, "船渡科技,纵横天下");//选填params.putString(QzoneShare.SHARE_TO_QQ_TARGET_URL, "http://www.baidu.com");//必填params.putStringArrayList(QzoneShare.SHARE_TO_QQ_IMAGE_URL, list);mTencent.shareToQzone(this, params, new BaseUiListener());}/*** QQ好友*/private void qqhy() {// Tencent类是SDK的主要实现类,开发者可通过Tencent类访问腾讯开放的OpenAPI。// 其中APP_ID是分配给第三方应用的appid,类型为String。//Tencent mTencent = Tencent.createInstance("1104739679", this.getApplicationContext());// 1.4版本:此处需新增参数,传入应用程序的全局context,可通过activity的getApplicationContext方法获取// 初始化视图Bundle params = new Bundle();params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_DEFAULT);params.putString(QQShare.SHARE_TO_QQ_TITLE, "船渡科技");params.putString(QQShare.SHARE_TO_QQ_SUMMARY,  "船渡科技,纵横天下");params.putString(QQShare.SHARE_TO_QQ_TARGET_URL,  "http://www.baidu.com");params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL,"http://img.funshion.com/pictures/427/932/427932.jpg");mTencent.shareToQQ(this, params, new BaseUiListener());}

然后写一个QQ的回调类:

/*** 实现此类是作用于QQ 的回调* @author Zeo**/public class BaseUiListener implements IUiListener{@Overridepublic void onCancel() {// TODO Auto-generated method stub}@Overridepublic void onComplete(Object arg0) {// TODO Auto-generated method stub}@Overridepublic void onError(UiError arg0) {// TODO Auto-generated method stub}}

最后重写一个:

 @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {// TODO Auto-generated method stubmTencent.onActivityResult(requestCode, resultCode, data);}

就此QQ的分享也做好了,记住你在写自己的应用时候,别忘记换掉APP_ID

最后一个分享就是新浪微博的分享。这一个是最闹心的分享。

首先是在布局文件增加button控件 并且在代码中设置监听。

然后我们要下载对应的SDK     weiboSDKCore_3.1.2.jar

让我们的MainActivity implements  IWeiboHandler.Response

你的微博在那个类里面写 你就用相应的类实现此接口

然后是注意事项配置文件的:

这里修改的是你的第一个启动类,也就是MainActivity的 intent-filter  里面改成如下

 <applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name="com.zeo.manman.MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /><action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" /></intent-filter></activity><!-- 必须注册在微博授权,分享微博时候用到 --><activity android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser" android:configChanges="keyboardHidden|orientation"android:windowSoftInputMode="adjustResize"android:exported="false" ></activity>

代码:

 @Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);init();qQfenxiang();wXfenxiang();wBfenxiang(savedInstanceState);//微博的分享}
/*** 这里是新浪微博的分享* @param savedInstanceState*/private void wBfenxiang(Bundle savedInstanceState){// 创建微博分享接口实例mWeiboShareAPI = WeiboShareSDK.createWeiboAPI(this, "412779672");// 获取微博客户端相关信息,如是否安装、支持 SDK 的版本boolean isInstalledWeibo = mWeiboShareAPI.isWeiboAppInstalled();int supportApiLevel = mWeiboShareAPI.getWeiboAppSupportAPI(); // 注册第三方应用到微博客户端中,注册成功后该应用将显示在微博的应用列表中。// 但该附件栏集成分享权限需要合作申请,详情请查看 Demo 提示// NOTE:请务必提前注册,即界面初始化的时候或是应用程序初始化时,进行注册mWeiboShareAPI.registerApp();// 当 Activity 被重新初始化时(该 Activity 处于后台时,可能会由于内存不足被杀掉了),// 需要调用 {@link IWeiboShareAPI#handleWeiboResponse} 来接收微博客户端返回的数据。// 执行成功,返回 true,并调用 {@link IWeiboHandler.Response#onResponse};// 失败返回 false,不调用上述回调if (savedInstanceState != null) {mWeiboShareAPI.handleWeiboResponse(getIntent(), this);}}

如果以后是你们自己的项目 记得把你们自己申请的APPID  拿来替换上面的 “412779672”

和需要添加的方法:

/*** 微博的分享* 第三方应用发送请求消息到微博,唤起微博分享界面。* @see {@link #sendMultiMessage} 或者 {@link #sendSingleMessage}*/private void wbfx() {if (mWeiboShareAPI.isWeiboAppSupportAPI()) {int supportApi = mWeiboShareAPI.getWeiboAppSupportAPI();if (supportApi >= 10351 /*ApiUtils.BUILD_INT_VER_2_2*/) {sendMultiMessage();} else {sendSingleMessage();}} else {Toast.makeText(this, R.string.weibosdk_demo_not_support_api_hint, Toast.LENGTH_SHORT).show();}}/*** 实现IWeiboHandler.Response接口要重写的方法* */@Overridepublic void onResponse(BaseResponse baseResp) {switch (baseResp.errCode) {case WBConstants.ErrorCode.ERR_OK:Toast.makeText(this, R.string.weibosdk_demo_toast_share_success, Toast.LENGTH_LONG).show();break;case WBConstants.ErrorCode.ERR_CANCEL:Toast.makeText(this, R.string.weibosdk_demo_toast_share_canceled, Toast.LENGTH_LONG).show();break;case WBConstants.ErrorCode.ERR_FAIL:Toast.makeText(this, getString(R.string.weibosdk_demo_toast_share_failed) + "Error Message: " + baseResp.errMsg, Toast.LENGTH_LONG).show();break;}}/*** @see {@link Activity#onNewIntent}*/    @Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);// 从当前应用唤起微博并进行分享后,返回到当前应用时,需要在此处调用该函数// 来接收微博客户端返回的数据;执行成功,返回 true,并调用// {@link IWeiboHandler.Response#onResponse};失败返回 false,不调用上述回调mWeiboShareAPI.handleWeiboResponse(intent, this);}/*** 第三方应用发送请求消息到微博,唤起微博分享界面。* 注意:当 {@link IWeiboShareAPI#getWeiboAppSupportAPI()} >= 10351 时,支持同时分享多条消息,* 同时可以分享文本、图片以及其它媒体资源(网页、音乐、视频、声音中的一种)。* */private void sendMultiMessage() {// 1. 初始化微博的分享消息WeiboMultiMessage weiboMessage = new WeiboMultiMessage();weiboMessage.textObject = getTextObj();//指向的是文字weiboMessage.imageObject = getImageObj();//指向的是图片// 2. 初始化从第三方到微博的消息请求SendMultiMessageToWeiboRequest request = new SendMultiMessageToWeiboRequest();// 用transaction唯一标识一个请求request.transaction = String.valueOf(System.currentTimeMillis());request.multiMessage = weiboMessage;// 3. 发送请求消息到微博,唤起微博分享界面mWeiboShareAPI.sendRequest(MainActivity.this, request);}/*** 第三方应用发送请求消息到微博,唤起微博分享界面。*/private void sendSingleMessage() {// 1. 初始化微博的分享消息WeiboMessage weiboMessage = new WeiboMessage();weiboMessage.mediaObject = getTextObj();weiboMessage.mediaObject = getImageObj();// 2. 初始化从第三方到微博的消息请求SendMessageToWeiboRequest request = new SendMessageToWeiboRequest();// 用transaction唯一标识一个请求request.transaction = String.valueOf(System.currentTimeMillis());request.message = weiboMessage;// 3. 发送请求消息到微博,唤起微博分享界面mWeiboShareAPI.sendRequest(MainActivity.this, request);}/*** 获取分享的文本模板。* * @return 分享的文本模板*/private String getSharedText() {String format = null;String text = format;String demoUrl = getString(R.string.weibosdk_demo_app_url);format = getString(R.string.weibosdk_demo_share_webpage_template);text = String.format(format, getString(R.string.weibosdk_demo_share_webpage_demo), demoUrl);return text;}/*** 创建文本消息对象。* * @return 文本消息对象。*/private TextObject getTextObj() {TextObject textObject = new TextObject();textObject.text = getSharedText();return textObject;}/*** 创建图片消息对象。* * @return 图片消息对象。*/private ImageObject getImageObj() {ImageObject imageObject = new ImageObject();//BitmapDrawable bitmapDrawable = (BitmapDrawable) mImageView.getDrawable();//        设置缩略图。 注意:最终压缩过的缩略图大小不得超过 32kb。Bitmap  bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);imageObject.setImageObject(bitmap);return imageObject;}

最后一步: 就是在你的项目里面添加文件

到此处5个分享就已经完毕了。

因为在微博上的分享,我现在的思路是这样的如果你们有更好,更简单的思路可以大家一起探讨一下。第一次发帖子希望多多帮助。

这个DEMO新浪微博的APPID 还没申请好。申请好了就上传DEMO






QQ、QQ空间、微信好友、微信朋友圈、新浪微博的分享。相关推荐

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

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

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

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

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

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

  4. android sharesdk qq分享到朋友圈,Android实战——ShareSDk的使用,实现一键分享微信好友、朋友圈、QQ...

    ShareSDk的使用,实现一键分享微信好友.朋友圈.QQ 事先说明: ShareSDK默认QQ可以分享,微信分享则需要在微信的开放平台上认证并申请应用填入对应信息即可 微信认证和申请应用涉及到打包和 ...

  5. Android实战——ShareSDk的使用,实现一键分享微信好友、朋友圈、QQ

    ShareSDk的使用,实现一键分享微信好友.朋友圈.QQ 事先说明: ShareSDK默认QQ可以分享,微信分享则需要在微信的开放平台上认证并申请应用填入对应信息即可 微信认证和申请应用涉及到打包和 ...

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

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

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

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

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

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

  9. 白杨SEO:再谈私域流量,微信好友及朋友圈超过5000限定的机遇与挑战!

    前言: 这是白杨SEO公众号第 245 篇.为什么想到写这个,因为我发现很多朋友学会引流后,并不会让它更好的转化.私域流量,仅仅也只是当作私域流量. 私域流量是什么? 百科解释为:私域流量是指从公域( ...

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

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

最新文章

  1. leetcode--括号生成--python
  2. 算法与数据结构--数组和链表的区别
  3. 配置 html-webpack-plugin 生成预览页面||配置自动打包相关的参数
  4. 吴恩达 coursera AI 专项五第一课(下)总结+作业答案
  5. JZOJ 5987. 【WC2019模拟2019.1.4】仙人掌毒题
  6. centos 7 网络设置与图像化界面下载
  7. NOI Linux2.0使用系列视频集
  8. python中冒号报错_python中一些常见的错误_后端开发
  9. scp上传服务器加特殊端口
  10. SAP License:CO常见问题
  11. MYSQL禁用与启用事件
  12. 【ISL-2】什么是统计学习
  13. POJ2104 K-th Number [整体二分]
  14. 阿里旺旺在线图标,在线状态生成
  15. 【Windows】之电脑之间共享文件(亲测可行)
  16. 大数据分析取得的成果有哪些
  17. 超市密码箱c语言程序,超市存包系统C语言.doc
  18. android wifi dns设置在哪,WiFi高级设置DNS在哪
  19. Mac版本的PS2017、2018、2019、2020 合集
  20. Elasticsearch 7.10 之 Indexing pressure

热门文章

  1. unity初学 Mstudio教程
  2. 【尊享版】如何从零到一掌控习惯?
  3. UniApp使用Painter画图
  4. 我在CSDN发表原创文章,被别人拿去发了一篇北大核心,论文难道就是东拼西凑?
  5. KEIL 中的RO、RW和ZI DATA所代表的意思
  6. 如何解决:对路径的訪问被拒绝这个问题.
  7. Mathtype7在Word2016中闪退
  8. 原生js实现的金山打字小游戏
  9. opengl读取24位BMP文件为纹理并处理黑色背景为透明
  10. linux开放目录注意