很多APP都有分享文章或者图片甚至分享APP给QQ好友的功能,查阅了比较多的资料,也翻看了腾讯开放平台上的API文档,总是会出现各种各样的问题!经过几个小时的排查,也基本算是实现了一些功能!

总之:还是要多阅读官方的开发文档!

一、去官网上下载SDK

下载网址:http://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD

并且注册账号添加一个Android应用,这个就不多说了!账号注册登陆后会获取一个 APPID ,记住这个APPID,后面要用的!

二、配置项目

1、SDK下载好之后,解压,里面有一个 jar 文件夹,拷贝里面的两个jar到项目里面去

2、配置AndroidManifest.xml文件:

添加两个Activity(这两个Activity是SDK里面包含的):

        <activityandroid: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" /><data android:scheme="您的APPID" /></intent-filter></activity><activityandroid:name="com.tencent.connect.common.AssistActivity"android:configChanges="orientation|keyboardHidden|screenSize"android:theme="@android:style/Theme.Translucent.NoTitleBar" />

记得添加权限:

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

三、java代码实现:

1、登录功能的实现:

需要使用的变量:

 private Button qqLogin;private String APP_ID = "1106329105";private Tencent mTencent;  //QQ主操作对象private IUiListener loginListener;  //授权登录监听器private String SCOPE = "all";  //获取信息的范围参数private String TAG = "MainActivity";

初始化QQ主

     //初始化QQ主操作对象mTencent = Tencent.createInstance(APP_ID, MainActivity.this);

实例化loginListener:

                //用户登录的回调loginListener = new IUiListener() {@Overridepublic void onError(UiError arg0) {// TODO Auto-generated method stub}@Overridepublic void onComplete(Object arg0) {if(arg0 == null){return;}else{try {JSONObject jsonObject = (JSONObject) arg0;int ret = jsonObject.getInt("ret");if(ret == 0){Log.i(TAG, "登陆成功,有数据返回:"+jsonObject.toString());Toast.makeText(MainActivity.this, "登陆成功", Toast.LENGTH_SHORT).show();String openID = jsonObject.getString("openid");String accessToken = jsonObject.getString("access_token");String expires = jsonObject.getString("expires_in");mTencent.setOpenId(openID);mTencent.setAccessToken(accessToken, expires);}} catch (JSONException e) {e.printStackTrace();}}}@Overridepublic void onCancel() {// TODO Auto-generated method stub}};

实现回调:

 @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {if(requestCode == Constants.REQUEST_API){if(resultCode == Constants.RESULT_LOGIN){Tencent.handleResultData(data, loginListener);}}super.onActivityResult(requestCode, resultCode, data);}

给登录按钮一个监听:

qqLogin.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {Log.i(TAG, "点击了登录按钮");mTencent.login(MainActivity.this, SCOPE, loginListener);}});

到此实现了登录功能!

实现效果:

2、获取QQ用户信息:

添加两个变量:

private IUiListener userInfoListener; //获取用户信息监听器
private UserInfo userInfo; //qq用户信息

实例化userInfoListener:

     //获取用户信息的回调userInfoListener = new IUiListener() {@Overridepublic void onError(UiError arg0) {// TODO Auto-generated method stubLog.i(TAG, "获取用户信息失败");}@Overridepublic void onComplete(Object arg0) {if(arg0 == null){return;}else{try {JSONObject jsonObject = (JSONObject) arg0;int ret = jsonObject.getInt("ret");String nickName = jsonObject.getString("nickname");String gender = jsonObject.getString("gender");Log.i(TAG, "获取条用户信息成功"+jsonObject.toString());Toast.makeText(MainActivity.this, nickName, Toast.LENGTH_SHORT).show();} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}@Overridepublic void onCancel() {// TODO Auto-generated method stubLog.i(TAG, "取消获取用户信息");}};

给获取信息的按钮添加监听:

     myQQMessage.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {Log.i(TAG, "开始获取用户信息");userInfo = new UserInfo(MainActivity.this, mTencent.getQQToken());userInfo.getUserInfo(userInfoListener);             }});

到此实现了获取QQ用户信息的功能:

实现效果:

3、实现分享消息到QQ:

添加变量:

private IUiListener shareListener;  //分享消息的回调

实例化shareListener:

     //分享消息的回调shareListener = new IUiListener() {@Overridepublic void onComplete(Object o) {//分享成功后回调Toast.makeText(MainActivity.this, "分享成功!", Toast.LENGTH_SHORT).show();}@Overridepublic void onError(UiError uiError) {//分享失败后回调}@Overridepublic void onCancel() {//取消分享后回调}};

给分享消息的按钮添加监听:

     shareMessage.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {Log.i(TAG, "分享消息");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://baidu.com");params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL,"http://avatar.csdn.net/C/3/D/1_u013451048.jpg");params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "CSDN");mTencent.shareToQQ(MainActivity.this, params, shareListener);}});

到此实现了QQ分享功能!

效果:

四、可以看一下整体的代码:

MainActivity.java:

package com.example.demo3;import org.json.JSONException;
import org.json.JSONObject;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;import com.tencent.connect.UserInfo;
import com.tencent.connect.common.Constants;
import com.tencent.connect.share.QQShare;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.Tencent;
import com.tencent.tauth.UiError;public class MainActivity extends Activity {private Button qqLogin;private Button myQQMessage;private Button shareMessage;private String APP_ID = "1106329105";private Tencent mTencent;  //QQ主操作对象private IUiListener loginListener;  //授权登录监听器private IUiListener userInfoListener; //获取用户信息监听器private IUiListener shareListener;  //分享消息的回调private String SCOPE = "all";  //获取信息的范围参数private UserInfo userInfo; //qq用户信息private String TAG = "MainActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);initData();setupViews();}@Overrideprotected void onDestroy() {if(mTencent != null){//注销登录mTencent.logout(MainActivity.this);}super.onDestroy();}private void setupViews() {qqLogin = (Button) findViewById(R.id.qqLogin);myQQMessage = (Button) findViewById(R.id.myQQMessage);shareMessage = (Button) findViewById(R.id.shareMessage);qqLogin.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {Log.i(TAG, "点击了登录按钮");mTencent.login(MainActivity.this, SCOPE, loginListener);}});myQQMessage.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {Log.i(TAG, "开始获取用户信息");userInfo = new UserInfo(MainActivity.this, mTencent.getQQToken());userInfo.getUserInfo(userInfoListener);             }});shareMessage.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {Log.i(TAG, "分享消息");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://baidu.com");params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL,"http://avatar.csdn.net/C/3/D/1_u013451048.jpg");params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "CSDN");mTencent.shareToQQ(MainActivity.this, params, shareListener);}});}private void initData() {//初始化QQ主操作对象mTencent = Tencent.createInstance(APP_ID, MainActivity.this);//用户登录的回调loginListener = new IUiListener() {@Overridepublic void onError(UiError arg0) {// TODO Auto-generated method stub}@Overridepublic void onComplete(Object arg0) {if(arg0 == null){return;}else{try {JSONObject jsonObject = (JSONObject) arg0;int ret = jsonObject.getInt("ret");if(ret == 0){Log.i(TAG, "登陆成功,有数据返回:"+jsonObject.toString());Toast.makeText(MainActivity.this, "登陆成功", Toast.LENGTH_SHORT).show();String openID = jsonObject.getString("openid");String accessToken = jsonObject.getString("access_token");String expires = jsonObject.getString("expires_in");mTencent.setOpenId(openID);mTencent.setAccessToken(accessToken, expires);}} catch (JSONException e) {e.printStackTrace();}}}@Overridepublic void onCancel() {// TODO Auto-generated method stub}};//获取用户信息的回调userInfoListener = new IUiListener() {@Overridepublic void onError(UiError arg0) {// TODO Auto-generated method stubLog.i(TAG, "获取用户信息失败");}@Overridepublic void onComplete(Object arg0) {if(arg0 == null){return;}else{try {JSONObject jsonObject = (JSONObject) arg0;int ret = jsonObject.getInt("ret");String nickName = jsonObject.getString("nickname");String gender = jsonObject.getString("gender");Log.i(TAG, "获取条用户信息成功"+jsonObject.toString());Toast.makeText(MainActivity.this, nickName, Toast.LENGTH_SHORT).show();} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}@Overridepublic void onCancel() {// TODO Auto-generated method stubLog.i(TAG, "取消获取用户信息");}};//分享消息的回调shareListener = new IUiListener() {@Overridepublic void onComplete(Object o) {//分享成功后回调Toast.makeText(MainActivity.this, "分享成功!", Toast.LENGTH_SHORT).show();}@Overridepublic void onError(UiError uiError) {//分享失败后回调}@Overridepublic void onCancel() {//取消分享后回调}};}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {if(requestCode == Constants.REQUEST_API){if(resultCode == Constants.RESULT_LOGIN){Tencent.handleResultData(data, loginListener);}}super.onActivityResult(requestCode, resultCode, data);}
}

main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><Button android:id="@+id/qqLogin"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="使用QQ登录"/><Buttonandroid:id="@+id/myQQMessage" android:layout_width="match_parent"android:layout_height="wrap_content"android:text="获取用户信息"/><Buttonandroid:id="@+id/shareMessage" android:layout_width="match_parent"android:layout_height="wrap_content"android:text="分享消息"/>
</LinearLayout>

源码:http://download.csdn.net/download/fancheng614/9971815

Android开发实现QQ登陆并获取信息、分享消息到QQ相关推荐

  1. android 拨打电话 发送短信 权限,Android开发实现拨打电话与发送信息的方法分析...

    本文实例讲述了Android开发实现拨打电话与发送信息的方法.分享给大家供大家参考,具体如下: xml布局: android:layout_width="fill_parent" ...

  2. android 获取wifi的ip地址吗,Android开发实现在Wifi下获取本地IP地址的方法

    本文实例讲述了Android开发实现在Wifi下获取本地IP地址的方法.分享给大家供大家参考,具体如下: 代码核心介绍: WifiManager类提供了对设备Wifi功能的管理,包括Wifi开关的打开 ...

  3. Android开发(3):个人信息界面设计

    Github地址:美食分享平台,欢迎star和fork 注:本文只设计个人信息界面的设计,不包括活动和后台逻辑.活动设计和后台可以参见Android开发(4):个人信息修改个人信息,修改头像设计 效果 ...

  4. Android开发(4):个人信息修改个人信息,修改头像设计

    Github地址:美食分享平台,欢迎star和fork 注:本文只包括活动的设计和头像组件的引用,不包括界面xml的设计,界面设计具体详见Android开发(3):个人信息界面设计 效果图 思路 在上 ...

  5. QQ登陆,获取QQ用户信息

    一.登陆QQ互联,创建网站应用or移动应用 地址:http://connect.qq.com/ 1.获取appid和app key 2.设置网站地址和回调地址,注:回调地址是用户在网页中登陆QQ后,导 ...

  6. Android开发:基于原生API获取位置信息、卫星信号个数及参与定位的卫星个数

    目录 概述 权限申请及开启GPS 调用原生API进行定位 获取设备收到的卫星信号个数 获取用于定位的卫星信号个数 成果图 概述 最近在做室内外无缝定位的相关demo,室外定位中,GNSS定位方法具有精 ...

  7. Android开发 Intent传递参数,获取数据为null

    android开发 Activity通过Intent传递参数,获取失败的原因 启动一个有返回值的activity (MapActivity) Intent intent = new Intent(Up ...

  8. Android开发中根据图片名称获取在drawable中的ID

    在Android开发中图片资源是必不可少的,如ImageView需要图片资源的ID,ImageButton需要资源的ID等等,我们可以用R.drawable.XXX可以获取图片资源的ID,但是,在某些 ...

  9. android 提示页面设计,Android开发(3):个人信息界面设计

    Github地址:美食分享平台,欢迎star和fork 注:本文只设计个人信息界面的设计,不包括活动和后台逻辑.活动设计和后台可以参见Android开发(4):个人信息修改个人信息,修改头像设计 效果 ...

最新文章

  1. ASP.NET MVC 的安装过程详解
  2. java中属性加参数_java – 具有类型参数的注释属性
  3. PHP中三元运算符的用法_php中三元运算符用法_PHP教程
  4. 今天痛下决心,把开发人员的外网给断了,不断是不好管了,人心散了队伍就不好带...
  5. [蓝桥杯][历届试题]九宫重排-双向bfs和map标记
  6. 13.JAVA基础:八进制,十六进制表示
  7. SharpHsql -- 只适合用于演示数据的数据库引擎
  8. 升级python(2.7-3.6.2)
  9. 【推荐实践】Bandit算法在携程推荐系统中的应用与实践
  10. 女神相册密码忘记了,我只用Python写了20行代码
  11. JAVA HttpURLConnection 获取网页内容
  12. 怎么将CAD图纸快速导入转换成常见的黑白JPG格式?
  13. [V811双核] 最新昂达V811最新2.0固件ROOT方法
  14. 阿里巴巴2017实习面试
  15. Total Phase Data Center介绍
  16. 3D开发-AR技术方案
  17. nvidia-patch解除nvidia消费级显卡编码并发数量限制操作记录
  18. 不谋一时不足以谋一域_不谋万世者不足谋一时,不谋全局者不足谋一域是什么意思...
  19. java计算机毕业设计体育用品购物系统源程序+mysql+系统+lw文档+远程调试
  20. 【Maven】高级应用:私服(nexus)搭建及使用、自定义项目骨架(archtype)

热门文章

  1. 后疫情时代,希尔顿花园酒店发展势头迅猛,聚焦核心市场
  2. 计算机应用基础第一章第二章知识点,全国2013年自考《计算机应用基础》教材大纲第二章...
  3. 程序员必看!2019 年招聘排名 TOP 10 的技能!
  4. mysql netcdf_gdal联合编译C++版本proj.4、geos、hdf4、hdf5、netcdf
  5. 【集合论】等价关系 ( 等价关系概念 | 等价关系示例 | 等价关系与闭包 )
  6. gmat阅读.html,GMAT阅读“Ecoefficiency”文章深度分析
  7. 近期 10 大 IT 人文好书盘点
  8. JSP软件(包括jsp、java、SQL)
  9. 孝感学院专升本计算机试卷,湖北工程学院自学考试历年真题有参考性吗
  10. 你的 Mac 用对了吗?推荐一些 Mac 上比较好用的软件(上)