Android开发实现QQ登陆并获取信息、分享消息到QQ
很多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相关推荐
- android 拨打电话 发送短信 权限,Android开发实现拨打电话与发送信息的方法分析...
本文实例讲述了Android开发实现拨打电话与发送信息的方法.分享给大家供大家参考,具体如下: xml布局: android:layout_width="fill_parent" ...
- android 获取wifi的ip地址吗,Android开发实现在Wifi下获取本地IP地址的方法
本文实例讲述了Android开发实现在Wifi下获取本地IP地址的方法.分享给大家供大家参考,具体如下: 代码核心介绍: WifiManager类提供了对设备Wifi功能的管理,包括Wifi开关的打开 ...
- Android开发(3):个人信息界面设计
Github地址:美食分享平台,欢迎star和fork 注:本文只设计个人信息界面的设计,不包括活动和后台逻辑.活动设计和后台可以参见Android开发(4):个人信息修改个人信息,修改头像设计 效果 ...
- Android开发(4):个人信息修改个人信息,修改头像设计
Github地址:美食分享平台,欢迎star和fork 注:本文只包括活动的设计和头像组件的引用,不包括界面xml的设计,界面设计具体详见Android开发(3):个人信息界面设计 效果图 思路 在上 ...
- QQ登陆,获取QQ用户信息
一.登陆QQ互联,创建网站应用or移动应用 地址:http://connect.qq.com/ 1.获取appid和app key 2.设置网站地址和回调地址,注:回调地址是用户在网页中登陆QQ后,导 ...
- Android开发:基于原生API获取位置信息、卫星信号个数及参与定位的卫星个数
目录 概述 权限申请及开启GPS 调用原生API进行定位 获取设备收到的卫星信号个数 获取用于定位的卫星信号个数 成果图 概述 最近在做室内外无缝定位的相关demo,室外定位中,GNSS定位方法具有精 ...
- Android开发 Intent传递参数,获取数据为null
android开发 Activity通过Intent传递参数,获取失败的原因 启动一个有返回值的activity (MapActivity) Intent intent = new Intent(Up ...
- Android开发中根据图片名称获取在drawable中的ID
在Android开发中图片资源是必不可少的,如ImageView需要图片资源的ID,ImageButton需要资源的ID等等,我们可以用R.drawable.XXX可以获取图片资源的ID,但是,在某些 ...
- android 提示页面设计,Android开发(3):个人信息界面设计
Github地址:美食分享平台,欢迎star和fork 注:本文只设计个人信息界面的设计,不包括活动和后台逻辑.活动设计和后台可以参见Android开发(4):个人信息修改个人信息,修改头像设计 效果 ...
最新文章
- ASP.NET MVC 的安装过程详解
- java中属性加参数_java – 具有类型参数的注释属性
- PHP中三元运算符的用法_php中三元运算符用法_PHP教程
- 今天痛下决心,把开发人员的外网给断了,不断是不好管了,人心散了队伍就不好带...
- [蓝桥杯][历届试题]九宫重排-双向bfs和map标记
- 13.JAVA基础:八进制,十六进制表示
- SharpHsql -- 只适合用于演示数据的数据库引擎
- 升级python(2.7-3.6.2)
- 【推荐实践】Bandit算法在携程推荐系统中的应用与实践
- 女神相册密码忘记了,我只用Python写了20行代码
- JAVA HttpURLConnection 获取网页内容
- 怎么将CAD图纸快速导入转换成常见的黑白JPG格式?
- [V811双核] 最新昂达V811最新2.0固件ROOT方法
- 阿里巴巴2017实习面试
- Total Phase Data Center介绍
- 3D开发-AR技术方案
- nvidia-patch解除nvidia消费级显卡编码并发数量限制操作记录
- 不谋一时不足以谋一域_不谋万世者不足谋一时,不谋全局者不足谋一域是什么意思...
- java计算机毕业设计体育用品购物系统源程序+mysql+系统+lw文档+远程调试
- 【Maven】高级应用:私服(nexus)搭建及使用、自定义项目骨架(archtype)
热门文章
- 后疫情时代,希尔顿花园酒店发展势头迅猛,聚焦核心市场
- 计算机应用基础第一章第二章知识点,全国2013年自考《计算机应用基础》教材大纲第二章...
- 程序员必看!2019 年招聘排名 TOP 10 的技能!
- mysql netcdf_gdal联合编译C++版本proj.4、geos、hdf4、hdf5、netcdf
- 【集合论】等价关系 ( 等价关系概念 | 等价关系示例 | 等价关系与闭包 )
- gmat阅读.html,GMAT阅读“Ecoefficiency”文章深度分析
- 近期 10 大 IT 人文好书盘点
- JSP软件(包括jsp、java、SQL)
- 孝感学院专升本计算机试卷,湖北工程学院自学考试历年真题有参考性吗
- 你的 Mac 用对了吗?推荐一些 Mac 上比较好用的软件(上)