调用QQ登录


       在如今的项目开发。调用第三方登录。差点儿是必须的,而调用QQ登录也是不可缺少的,这里把相关代码分享出来,希望能拿去就能够用,降低项目开发的时间。希望对大家实用。

1,去QQ开放平台注冊帐号(http://open.qq.com/)。为应用申请QQ的APP_ID , 并下载相关的jar包,放到project的lib文件夹下。

2,在Manifest.xml里注冊QQ相关的Activity,代码例如以下
  
        <activity
android:name="com.tencent.connect.common.AssistActivity"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<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" />
<data android:scheme="tencent100491239" />
</intent-filter>
</activity>

3,利用QQ提供的相关API去获取相关的OPENID,昵称。图像等资料。这里有一点要注意的是,因为QQserver返回OPENID和昵称等其它资料是分两步进行的,而首先返回的              OPENID速度非常快,返回昵称等其它资料可能会比較慢,所以在返回OPENID的时候,就能够觉得已经调用QQ登录成功,再用异步的方式处理昵称等其它资料信息。

下面是代码部 分。已经过项目測试,可直接用(替换对应的APP_ID就能够了)

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.SocketTimeoutException; import org.apache.http.conn.ConnectTimeoutException;
import org.json.JSONException;
import org.json.JSONObject; import android.app.Activity; import com.smart.util.BroadcastAction;
import com.smart.util.BroadcastUtil;
import com.smart.util.Constant;
import com.smart.util.ILog;
import com.smart.util.PrefUtil;
import com.smart.util.Prefkey;
import com.tencent.open.HttpStatusException;
import com.tencent.open.NetworkUnavailableException;
import com.tencent.tauth.Constants;
import com.tencent.tauth.IRequestListener;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.Tencent;
import com.tencent.tauth.UiError;
import com.utils.lib.ss.common.ToastHelper; /**
* QQ登陆。
* @author E
*/
public class QqLogin { private static QqLogin qqLogin = null; public static QqLogin getInstance(){
if (null == qqLogin) {
qqLogin = new QqLogin();
}
return qqLogin;
} public void login(Activity context , QqLoginListener loginListener){
//Constant.QQ_APP_ID 这里要替换成自己申请的APP_ID
Tencent tencent = Tencent.createInstance(Constant.QQ_APP_ID, context);
if (null == tencent) {
ToastHelper.makeText(context, "error cased !");
return;
}
tencent.login(context, "get_user_info", new BaseUiListener(tencent,loginListener));
} class BaseUiListener implements IUiListener{ Tencent tencent = null;
QqLoginListener qqLoginListener = null; public BaseUiListener(Tencent tencent ,QqLoginListener qqLoginListener) {
super();
this.tencent = tencent;
this.qqLoginListener = qqLoginListener;
} @Override
public void onComplete(JSONObject values) {
try {
String openid = values.getString("openid");
qqLoginListener.onLoginSuccess(openid);
tencent.requestAsync(Constants.GRAPH_SIMPLE_USER_INFO, null, Constants.HTTP_GET,
new BaseApiListener(qqLoginListener) ,null);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onError(UiError arg0) {
qqLoginListener.onLoginFail();
} @Override
public void onCancel() {
qqLoginListener.onCancel();
}
} class BaseApiListener implements IRequestListener{ QqLoginListener qqLoginListener = null; public BaseApiListener(QqLoginListener qqLoginListener) {
super();
this.qqLoginListener = qqLoginListener;
}
@Override
public void onComplete(JSONObject jsonObject, Object object) {
try {
ILog.e(jsonObject.toString());
String nickName = jsonObject.getString("nickname");
String figureurl_qq_1 = jsonObject.getString("figureurl_qq_2");
PrefUtil.instance().setPref(Prefkey.THIRD_NICKNAME, nickName);
PrefUtil.instance().setPref(Prefkey.THIRD_IMAGE, figureurl_qq_1);
//发送广播到主页去更新
BroadcastUtil.sendBroadcast(BroadcastAction.UPLOAD_THIRD_INFO);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onConnectTimeoutException(ConnectTimeoutException arg0,
Object arg1) {
}
@Override
public void onHttpStatusException(HttpStatusException arg0, Object arg1) { }
@Override
public void onIOException(IOException arg0, Object arg1) { }
@Override
public void onJSONException(JSONException arg0, Object arg1) { }
@Override
public void onMalformedURLException(MalformedURLException arg0,
Object arg1) {
}
@Override
public void onNetworkUnavailableException(
NetworkUnavailableException arg0, Object arg1) {
}
@Override
public void onSocketTimeoutException(SocketTimeoutException arg0,
Object arg1) {
}
@Override
public void onUnknowException(Exception arg0, Object arg1) {
}
} /**
* 授权完毕后。运行一下步的回调
*/
public static abstract class QqLoginListener{
public void onLoginSuccess(String openid){};
public void onLoginSuccess(String openid, String nickname){};
public void onLoginFail(){};
public void onCancel(){};
}

好了,到里代码部分已经写完,仅仅须要调用login(Activity context , QqLoginListener loginListener)方法就能够了。


Android 调用QQ登录的更多相关文章

  1. Android仿QQ登录下拉历史列表

    demo中包含了Sqlite数据库增删改查,对存储的账号进行按照最新的时间排序,限制了最多存储5条数据. 效果图: 1.首先创建MyHelper建表: public class MyHelper ex ...

  2. Android之QQ登录界面

    首先过程中碰到的几个问题: 1.对 EditText 进行自定义背景 2.运行时自动 EditText 自动获得焦点 3.在获得焦点时即清空 hint ,而不是输入后清空 4.清空按钮的出现时机(在得 ...

  3. android 57 QQ登录

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q ...

  4. Android实现QQ登录

    https://www.jianshu.com/p/e59bc198e88f

  5. Android 实现QQ第三方登录

    Android 实现QQ第三方登录 在项目中需要实现QQ第三方登录,经过一番努力算是写出来了,现在总结以下,以防以后遗忘,能帮到其他童鞋就更好了. 首先肯定是去下载SDK和DEMO http://wi ...

  6. Android开发实现QQ三方登录 标签: android开发qq三方登录

    本文分为两个部分:一是QQ的授权部分:二是获取用户的基本信息部分 一.授权部分 1.首先,先去腾讯开放平台获取APP ID和APP KEY(未注册腾讯开发者账号的可能需要先注册账号),获取的过程还是还 ...

  7. QQ登录类

    2015-3-31 22:02:09 (同一套代码, pc端不能登录, 但是, 手机和平板都可以正常登录.....) 1. 首先是库文件, 登录->授权->token->openid ...

  8. android实现第三方登录之QQ登录

    首先,当然是在腾讯开放平台(http://open.qq.com/)注册成为开发者,然后获取APP ID 1.下载SDK http://wiki.open.qq.com/wiki/mobile/SDK ...

  9. Android(java)学习笔记209:采用get请求提交数据到服务器(qq登录案例)

    1.GET请求:    组拼url的路径,把提交的数据拼装url的后面,提交给服务器. 缺点:(1)安全性(Android下提交数据组拼隐藏在代码中,不存在安全问题)  (2)长度有限不能超过4K(h ...

随机推荐

  1. Linq技巧1——关联实体查询排序

    假如想查询拖欠按揭超过30天的银行帐号,同时查询出他们的单据,并且需要按照单据日期进行排序,这样可以首先看到最近的单据,方便找出问题. 大多数人都知道EF可以使用Include()热加载关系实体,例如 ...

  2. noip 2010 关押罪犯 二分答案+二分图染色 || 并查集

    题目链接 题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨气值&q ...

  3. Django ConnectionAbortedError WinError 10053 错误

    因为ajax默认是异步提交,可是有时候我们会发现,本来要求请求马上出现,可是异步会导致后面突然再执行,这样就出问题了. (1)添加这样一段代码 $.ajaxSetup({ async : false ...

  4. Linux spi驱动分析(二)----SPI核心(bus、device_driver和device)

    一.spi总线注册 这里所说的SPI核心,就是指/drivers/spi/目录下spi.c文件中提供给其他文件的函数,首先看下spi核心的初始化函数spi_init(void).程序如下: 点击(此处 ...

  5. 打印倒序NxN乘法表

    一.实验要求: 给定任意一个字符N(N>0),然后打印NxN的倒序乘法表. 二.解决问题: #/!bin/bash# #define functionNxN_fun(){ local i=$1 ...

  6. AC日记——[福利]可持久化线段树 cogs 2554

    2554. [福利]可持久化线段树 ★★☆   输入文件:longterm_segtree.in   输出文件:longterm_segtree.out   简单对比时间限制:3 s   内存限制:2 ...

  7. AC日记——爱改名的小融2 codevs 3149

    3149 爱改名的小融 2  时间限制: 2 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description Wikioi上有个人叫小融,他喜 ...

  8. es6 repeat() 原字符串重复

    repeat()返回一个新字符串,表示将原字符串重复n次. var str = "x"; str.repeat(3) // "xxx" var str1 = & ...

  9. ros pub sub ("~")

    base_velocity_smoother.cpp                        remap ("~")    订阅: "cmd_vel"   ...

  10. Jenkins自动化部署入门(一)

    开始使用 Jenkins 这一段时间,技术总监为了减少测试环境每次提交新增接口都要部署项目的时间,搞了一个jenkins持续集成github.docker,这样只要每次push代码都会自动部署,确实节 ...