(1)QQShare


(一)创建并配置工程

  1. 新建工程并导入SDK的jar文件
    (1)创建一个工程,并把open-sdk.jar文件和mta_sdk_x.x.x.jar文件拷贝到libs(或lib)目录下,
    (2)将open-sdk.jar加入编译路径中

    1. 配置AndroidManifest
<!--权限-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><!--注册所需组件-->
<activity
android:name="com.tencent.tauth.AuthActivity"
android:noHistory="true"
android:launchMode="singleTask" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="tencent你的AppId" />
</intent-filter>
</activity><!--SDK_V2.0引入了AssistActivity-->
<activity android:name="com.tencent.connect.common.AssistActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden|screenSize"
/>

(二)创建实例并实现回调
1. 创建实例
Tencent是SDK的功能入口,所有的接口调用都得通过Tencent进行调用。因此,调用SDK,首先需要创建一个Tencent实例,其代码如下:

@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Tencent类是SDK的主要实现类,开发者可通过Tencent类访问腾讯开放的OpenAPI。
// 其中APP_ID是分配给第三方应用的appid,类型为String。
mTencent = Tencent.createInstance(APP_ID, this.getApplicationContext());
// 1.4版本:此处需新增参数,传入应用程序的全局context,可通过activity的getApplicationContext方法获取
// 初始化视图
initViews();
}
  1. 实现回调
    所有的SDK接口调用,都会传入一个回调,用以接收SDK返回的调用结果。回调的主要接口有两种:
    2.1 实现回调 IUiListener
    调用SDK已经封装好的接口时,例如:登录、快速支付登录、应用分享、应用邀请等接口,需传入该回调的实例。
    IUiListener的实现示例代码如下:
private class BaseUiListener implements IUiListener {@Override
public void onComplete(JSONObject response) {
mBaseMessageText.setText("onComplete:");
mMessageText.setText(response.toString());
doComplete(response);
}
protected void doComplete(JSONObject values) {
}
@Override
public void onError(UiError e) {
showResult("onError:", "code:" + e.errorCode + ", msg:"
+ e.errorMessage + ", detail:" + e.errorDetail);
}
@Override
public void onCancel() {
showResult("onCancel", "");
}
}

2.2 实现回调 IRequestListener
使用requestAsync、request等通用方法调用sdk未封装的接口时,例如上传图片、查看相册等,需传入该回调的实例。
IRequestListener的实现示例代码如下:

private class BaseApiListener implements IRequestListener {@Override
public void onComplete(final JSONObject response, Object state) {
showResult("IRequestListener.onComplete:", response.toString());
doComplete(response, state);
}
protected void doComplete(JSONObject response, Object state) {
}
@Override
public void onIOException(final IOException e, Object state) {
showResult("IRequestListener.onIOException:", e.getMessage());
}
@Override
public void onMalformedURLException(final MalformedURLException e,
Object state) {
showResult("IRequestListener.onMalformedURLException", e.toString());
}
@Override
public void onJSONException(final JSONException e, Object state) {
showResult("IRequestListener.onJSONException:", e.getMessage());
}
@Override
public void onConnectTimeoutException(ConnectTimeoutException arg0,
Object arg1) {
// TODO Auto-generated method stub
}
@Override
public void onSocketTimeoutException(SocketTimeoutException arg0,
Object arg1) {
// TODO Auto-generated method stub
}
//1.4版本中IRequestListener 新增两个异常
@Override
public void onNetworkUnavailableException(NetworkUnavailableException e, Object state){
// 当前网络不可用时触发此异常
}
@Override
public void onHttpStatusException(HttpStatusException e, Object state) {
// http请求返回码非200时触发此异常
}
public void onUnknowException(Exception e, Object state) {
// 出现未知错误时会触发此异常
}
}

应用在调用SDK提供的接口时,将实现了对应回调接口的实例传入。当SDK的接口调用完成后,具体如登录、应用邀请和应用分享调用完成后,会回调传入的接口实例。
3. 特别注意
应用调用Andriod_SDK接口时,如果要成功接收到回调,需要在调用接口的Activity的onActivityResult方法中增加如下代码:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Tencent.onActivityResultData(requestCode,resultCode,data,listener);
}

其中onActivityResultData接口中的listener为当前调用的Activity所实现的相应回调UIListener。

  1. 调用SDK接口实现分享
    由于QQ分享并不需要提前登录,因此,可以直接调用Tencent.shareToQQ的接口;接口调用很简单,代码如下:
public void share(View view)
{
Bundle bundle = new Bundle();
//这条分享消息被好友点击后的跳转URL。
bundle.putString(Constants.PARAM_TARGET_URL, "http://connect.qq.com/");
//分享的标题。注:PARAM_TITLE、PARAM_IMAGE_URL、PARAM_    SUMMARY不能全为空,最少必须有一个是有值的。
bundle.putString(Constants.PARAM_TITLE, "我在测试");
//分享的图片URL
bundle.putString(Constants.PARAM_IMAGE_URL,
"http://img3.cache.netease.com/photo/0005/2013-03-07/8PBKS8G400BV0005.jpg");
//分享的消息摘要,最长50个字
bundle.putString(Constants.PARAM_SUMMARY, "测试");
//手Q客户端顶部,替换“返回”按钮文字,如果为空,用返回代替
bundle.putString(Constants.PARAM_APPNAME, "??我在测试");
//标识该消息的来源应用,值为应用名称+AppId。
bundle.putString(Constants.PARAM_APP_SOURCE, "星期几" + AppId);mTencent.shareToQQ(this, bundle , listener);
}

特别注意:一定要添加以下代码,才可以从回调listener中获取到消息。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (null != mTencent)
mTencent.onActivityResult(requestCode, resultCode, data);
}

(2)获取用户信息


  1. Tencent类的request或requestAsync接口简介

在SDK中,有一些功能接口,如登录,分享消息到QQ等,SDK对其调用单独封装成了独立的接口;但是,SDK中的另外一些接口,如获取用户信息、获取用户相册列表、发送分享(addshare)、发表说说、上传图片、创建相册等,则被统一封装在Tencent类的request或requestAsync方法中,通过传入不同的参数实现不同的接口调用。request和requestAsync这两个接口的功能相同。

获取用户信息有两种方式:同步方式和异步方式
request(String graphPath, Bundle params, String httpMethod)
发送同步调用请求访问腾讯提供的OpenAPI。
requestAsync(String graphPath, Bundle params, String httpMethod, IRequestListener listener, Object state)

  1. 获取用户信息
    2.1 异步方式调用
public void getUserInfo()
{
mTencent.requestAsync(Constants.GRAPH_SIMPLE_USER_INFO, null,
Constants.HTTP_GET, new BaseApiListener("get_simple_userinfo", false),
null);
}

2.2 同步方式调用
注意:由于同步调用直接访问网络,是延时性操作,需要放入线程中执行。

public void getUserInfoInThread()
{
new Thread(){
@Override
public void run() {
JSONObject json = mTencent.request(Constants.GRAPH_SIMPLE_USER_INFO, null, Constants.HTTP_GET);System.out.println(json);
}
}.start();
}
  1. 用户信息详情
{
"is_yellow_year_vip": "0",
"ret": 0,
"figureurl_qq_1":
"http://q.qlogo.cn/qqapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/40",
"figureurl_qq_2":
"http://q.qlogo.cn/qqapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/100",
"nickname": "小罗",
"yellow_vip_level": "0",
"msg": "",
"figureurl_1":
"http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/50",
"vip": "0",
"level": "0",
"figureurl_2":
"http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/100",
"is_yellow_vip": "0",
"gender": "男",
"figureurl":
"http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/30"
}

(2)更换QQ头像


1. 简单调用
更换QQ头像, 使用的是Tencent类的setAvatar方法;调用以下代码就可以实现;其中,listener是一个IUiListener实例。

private void doSetAvatar(String imagePath) {
Bundle params = new Bundle();
params.putString(Constants.PARAM_AVATAR_URI, imagePath);
mTencent.setAvatar(this, params, listener);
}

2. 从相机或相册中获取照片设置为QQ头像
在实际使用中,用户一般希望从相册中获得照片,或者调用相机进行拍照,再将其设置为QQ头像。因此,下面将讲解从相册中获取图片设置为头像的例子。
2.1 调用系统的Intent获取图片
我们可以发Intent,从手机内存中读取图片,也可以直接调用照相机进行拍照。
下面是从手机内存读取图片:

private void onClickSetAvatar() {
if (ready()) {
Intent intent = new Intent();
// 开启Pictures画面Type设定为image
intent.setType("image/*");
// 使用Intent.ACTION_GET_CONTENT这个Action
intent.setAction(Intent.ACTION_GET_CONTENT);
// 取得相片后返回本画面
startActivityForResult(intent, REQUEST_SET_AVATAR);
// 在 onActivityResult 中调用 doSetAvatar
}

2.2 在onActivityResult里获取图片,并设置头像

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (mTencent == null){
return;
}
if (!mTencent.onActivityResult(requestCode, resultCode, data)) {
if (data != null) {
if (requestCode == REQUEST_SET_AVATAR) {
doSetAvatar(data.getData());
}
}
}
}
private void doSetAvatar(Uri uri) {
Bundle params = new Bundle();
params.putString(Constants.PARAM_AVATAR_URI, uri.toString());
// 这个return_activity是可选的
// params.putString(Constants.PARAM_AVATAR_RETURN_ACTIVITY,
// "com.tencent.sample.ReturnActivity");// mTencent.setAvatar(this, params, new BaseUiListener());
mTencent.setAvatar(this, params, new BaseUiListener(), R.anim.zoomin, R.anim.zoomout);
}

Android 之 QQ分享相关推荐

  1. Android 第三方QQ分享功能实现

    QQ分享功能记录和一些获取APP签名使用工具,微信分享功能现在需要公司开发者账号了,这里就不写了. 文章目录 一.QQ互联官网 1.获取应用APPID 2.下载官方SDK 二.代码部分 1.manif ...

  2. android开发qq分享图片,android qq分享图片_android qq分享sdk_android qq分享

    AndroidQQ空间分享博客分类:Android分享先上图:QZoneShareActivity.java:Java代码packagecom.cz.hello.activity;importjava ...

  3. android 接入qq分享能力报错: java.lang.ClassNotFoundException: com.tencent.stat.StatConfig

    解决办法 在接入QQ分享的时候, 包含了open_sdk_rxxx_lite.jar, 下载地址. 在初始化的时候报了一个异常,: java.lang.ClassNotFoundException: ...

  4. Android实现QQ分享功能

    第一步: 打开连接下载配置文件到自己项目的libs中 http://wiki.open.qq.com/wiki/mobile/SDK下载 解压Android_SDK_V2.6 ,把open-sdk.j ...

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

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

  6. android微信qq分享,android 一键分享 QQ 微信

    网上有很多介绍说有第三方集成工具,如sharesdk,这个操作太麻烦了. 如下介绍的是调用系统自带的,我这里是XML文件,对应的文件类型参见:// http://blog.csdn.net/wangy ...

  7. android如何实现qq登陆和qq分享,2021超详细mob平台图解教程?

    android如何使用mob平台实现QQ登录以及分享功能 1.在mob平台配置ShareSDK环境 1.如何在mob平台创建应用 2.获取你的`App Key`和`App Secret`(建议用自己的 ...

  8. 使用友盟快速集成QQ分享与QQ授权登录

    友盟官方文档 我采用的是手动集成友盟的官方文档.下载SDK进行集成. 解压缩,选择自己需要的文件进行加入到Android Studio中. 由于这里我只需要QQ,那就把QQ文件夹中的所有文件拷贝一份到 ...

  9. AndroidStudio实现第三方QQ分享,空间分享

    分享在每个App应用中是很常见的,今天就来实现一下接入QQ提供的第三方分享. 1.使用QQ分享时记得先到我们的腾讯开放平台注册账号然后获取开发者资格地址:http://open.qq.com/ 创建应 ...

最新文章

  1. MFC编程入门之十三(对话框:属性页对话框及相关类的介绍)
  2. 【Spring Cloud中文社区】正式启动
  3. jstack 脚本 自动日志_深入理解jstack日志
  4. 软件定义存储的特征及如何工作
  5. 简述osi参考模型各层主要功能_OSI参考模型各层主要功能
  6. Delphi实现带有格式的Excel导出功能
  7. AutoViz:用一行代码自动可视化任何大小的任何数据集
  8. conda:Could not find a version that satisfies the requirement XXX
  9. GNS3思科模拟器详细安装教程附下载链接
  10. UML建模工具最近更新(-2022年4月)共12款:Papyrus、StarUML、Software Ideas Modeler
  11. Win10 Snip sketch无法保存截图
  12. uni-app云打包 No enum constant com.pandora.pack.core.PackagePlatform.ANDROID_CLC
  13. Maven Resources Plugin的Filtering功能的Bug
  14. speedoffice使用方法-Word怎么在方框里面打对勾
  15. 使用 Excel 中的函数准确计算周岁年龄
  16. 知识图谱嵌入|KG-BERT代码 ConvE ConvR
  17. linux下HTK安装说明
  18. Using React, Typescript, and Webpack with Visual Studio 2015
  19. springboot毕设项目电影影评管理系统wej6a(java+VUE+Mybatis+Maven+Mysql)
  20. Oracle 插入insert语句

热门文章

  1. 2022-2028全球与中国修正笔市场现状及未来发展趋势
  2. 计算机机房安全应急演练,顺利开展机房应急演练
  3. Java实现埃拉托色尼筛选法
  4. 用选区+调整边缘抠图
  5. Android全局悬浮窗Dialog
  6. [python] math与turtle库之蝴蝶曲线
  7. 电容笔和触控笔有哪些区别?超高性价比电容笔排行
  8. 啤酒瓶啤酒盖换啤酒_像啤酒中的免费一样导致心脏出血(甚至更多)
  9. Revit里轴网隐藏尺寸标注跟着消失?快速轴网距离标注
  10. 教你如何选择高“性价比”的笔记本电脑