调用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. JavaWeb学习总结(十三)——使用Session防止表单重复提交(转)

    在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...

  2. 应用gulp工具构建个自动算rem布局的小例子

    因为最近可能需要做移动端rem布局,因为rem布局需要将px转化成rem,如果次都需要拿计算器算就太low了,所以就想到用less和gulp. 因为也是初学gulp,站点的文件结构还没想到太好,也只是 ...

  3. php接口开发时,数据解析失败问题,字符转义,编码问题

    php接口开发时,数据解析失败问题,字符转义,编码问题 情景: A平台--->向接口请求数据---->接口向B平台请求数据---->B平台返回数据给接口---->接口返回数据给 ...

  4. hdu3338 / 方格横纵和问题终极版,最大流斩

    此题被誉为神奇最大流,诱惑我去做了下,感觉也是通常的思路. 题意:1.用1-9去填,满足所给的行/列和要求(和那个什么游戏差不多...) 求一种合法方案,输出.如:   一看,直接就建图了,每个点在白 ...

  5. Visual Studio Code 使用教程

    visual studio code以下简称vsc.vsc这个编辑器也火了一会了,最近在跟风学一波typescript,网络上很多人说vsc是最适合ts的编辑器,而且这个编辑器本身也很好用,所以学一下 ...

  6. 为什么我们要用Python

    最近有一个朋友问我:为什么我要用Python,这是一个好问题,今天有空,把这个问题简单整理了一下,回来朋友的问题.该整理主要来源于网络和其他资料,如果有侵权还请告知.         Python的好 ...

  7. MySQL中数据类型(char(n)、varchar(n)、nchar(n)、nvarchar(n)的区别)(转)

    一.第一种 char(n)和varchar(n)的区别: 在这里我们可以清楚的看到他们表面的区别就是前面是否有var,在这里解释一下var是什么意思,var代表“可变的”的意思 下面看个例子: )// ...

  8. MySQL中limit与max同时使用时查询为空的情况

    一般情况下使用limit进行分页时通常是第一页就用max和min这些函数去求值,这样的情况是正常的,但是如果limit去到了第二页的时候发现这样用是不行的,原因未知! 修改的方式如下,适合大部分: , ...

  9. 用Redis存储Tomcat集群的Session(转载)

    本文转自http://blog.csdn.net/chszs/article/details/42610365 感谢作者 前段时间,我花了不少时间来寻求一种方法,把新开发的代码推送到到生产系统中部署, ...

  10. cocos2d-x step by step(2) 鼠标事件,键盘事件,等等事件

    各种小控件加载进去了,那么问题来了,这些东西如何接受事件呢? good job,let us find the answer 首先我们去看文档,官方尼玛有好多文档,而且大,全,详细,感觉还是不错的 h ...