调用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. BNU 12846 LCM Extreme 最小公倍数之和(线性欧拉筛选+递推)

    LCM Extreme Time Limit: 3000ms Memory Limit: 131072KB   This problem will be judged on UVALive. Orig ...

  2. 【HDOJ5971】Wrestling Match(二分图,并查集)

    题意:有n个人,m场比赛,x个人为good player,y个人为bad player, 每场比赛两个人分分别为good和bad,问good和bad是否会冲突 1 ≤ N≤ 1000,1 ≤M ≤ 1 ...

  3. select与stdio混合使用的不良后果

    参考以下链接自己补充实验:http://www.cppblog.com/mysileng/archive/2013/01/15/197284.aspx?opt=admin int main(int a ...

  4. GSMArena battery life test

    GSMArena battery life test Battery Endurance Score = [ Battery Capacity / ( call hrs * a + Browsing ...

  5. 一分钟学会Spring Boot多环境配置切换

    一. 问题由来 开发环境.测试环境.生产环境--------我们的软件在不同的环境中,系统参数和配置可能会不一样,比如数据源配置.日志文件配置.以及一些软件运行过程中的基本配置,那每次我们将软件部署到 ...

  6. spring lifeCycle

    Lifecycle接口定义了每个对象的生命周期.如下 public interface Lifecycle { void start(); void stop(); boolean isRunning ...

  7. JVM类加载机制————2

    类加载机制的第一个阶段加载做的工作有: 1.通过一个类的全限定名(包名与类名)来获取定义此类的二进制字节流(Class文件).而获取的方式,可以通过jar包.war包.网络中获取.JSP文件生成等方式 ...

  8. Java调用Python程序

    最近,需要在应用中,需要使用Java程序去调用Python代码,主要有两种实现方式. 一.使用Jython架包 因为调用的Python代码中需要使用Json对象,开始使用jython2.5.2,发现不 ...

  9. DELPHI 10.2 TOKYO搭建LINUX MYSQL开发环境

    DELPHI 10.2 TOKYO搭建LINUX MYSQL开发环境 笔者使用ubuntu64位LINUX 首先必须保证LINUX可以连互联网. 安装MYSQLsudo apt-get update ...

  10. SilverLight:基础控件使用(4)-日期显示和选择类控件

    ylbtech-SilverLight-Basic-Control:基础控件使用(4)-日期显示和选择类控件 Calendar,DatePicker 1.A,返回顶部 Calendar控件(日期控件) ...