一. 集成
QQ SDK下载地址:http://wiki.connect.qq.com/sdk%E4%B8%8B%E8%BD%BD#androidsdk
下载完成后,解压。将libs目录下的jar包复制到AS中,记得右键jar包Add As Library.
权限 :
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
在AndroidMainfest.xml中添加
<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="tencent0123456789" /> <!--注意在这里用你的appid替换0123456789 --> </intent-filter> </activity> <activity android:name="com.tencent.connect.common.AssistActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" />jar包已经应用的话这里是不会报错的。
二. 实现
新建AppCnstant.class
public class AppConstant { public static String APP_ID="0123456789"; //你应用的APP_ID }
如果只有一个QQ登录的话就不需要了,多个第三方新建此类便于管理。
MainActivity.class
在点击事件中添加:
//这里的APP_ID请换成你应用申请的APP_ID mAppid = AppConstant.APP_ID; //第一个参数就是上面所说的申请的APPID,第二个是全局的Context上下文,这句话实现了调用QQ登录 mTencent = Tencent.createInstance(mAppid, getApplicationContext()); /**通过这句代码,SDK实现了QQ的登录,这个方法有三个参数,第一个参数是context上下文,第二个参数SCOPO 是一个String类型的字符串,表示一些权限 官方文档中的说明:应用需要获得哪些API的权限,由“,”分隔。例如:SCOPE = “get_user_info,add_t”;所有权限用“all” 第三个参数,是一个事件监听器,IUiListener接口的实例,这里用的是该接口的实现类 */ mTencent.login(MainActivity.this, "all", new BaseUiListener());
private class BaseUiListener implements IUiListener { //这个类需要实现三个方法 onComplete():登录成功需要做的操作写在这里 public void onComplete(Object response) { //登录成功 // TODO Auto-generated method stub Toast.makeText(getApplicationContext(), "登录成功", Toast.LENGTH_SHORT).show(); try { //获得的数据是JSON格式的,获得你想获得的内容 //如果你不知道你能获得什么,看一下下面的LOG Log.i("textShow", "-------------" + response.toString()); String openidString = ((JSONObject) response).getString("openid"); mTencent.setOpenId(openidString); mTencent.setAccessToken(((JSONObject) response).getString("access_token"), ((JSONObject) response).getString("expires_in")); Log.i("textShow", "-------------" + openidString); //access_token= ((JSONObject) response).getString("access_token"); //expires_in = ((JSONObject) response).getString("expires_in"); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } /**到此已经获得OpneID以及其他你想获得的内容了 QQ登录成功了,我们还想获取一些QQ的基本信息,比如昵称,头像什么的,这个时候怎么办? sdk给我们提供了一个类UserInfo,这个类中封装了QQ用户的一些信息,我么可以通过这个类拿到这些信息 如何得到这个UserInfo类呢? [java] view plain copy 获取详细信息的UserInfo ,返回的信息参看下面地址: http://wiki.open.qq.com/wiki/%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7%E4%BF%A1%E6%81%AF#1._Tencent.E7.B1.BB.E7.9A.84request.E6.88.96requestAsync.E6.8E.A5.E5.8F.A3.E7.AE.80.E4.BB.8B */ QQToken qqToken = mTencent.getQQToken(); UserInfo info = new UserInfo(getApplicationContext(), qqToken); // info.getUserInfo(new BaseUIListener(this,"get_simple_userinfo")); info.getUserInfo(new IUiListener() { @Override public void onComplete(Object o) { //用户信息获取到了 try { Log.i("textShow", ((JSONObject) o).getString("nickname")); Log.i("textShow", ((JSONObject) o).getString("gender")); Log.i("textShow", o.toString()); Intent intent1 = new Intent(MainActivity.this, SecondActivity.class); //登录成功跳转界面 startActivity(intent1); finish(); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void onError(UiError uiError) { Log.i("textShow", "onError"); } @Override public void onCancel() { Log.i("textShow", "onCancel"); } }); } @Override public void onError(UiError uiError) { //登录错误 Toast.makeText(getApplicationContext(), "onError", Toast.LENGTH_SHORT).show(); } @Override public void onCancel() { //取消登录 Toast.makeText(getApplicationContext(), "onCancel", Toast.LENGTH_SHORT).show(); } }
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Tencent.onActivityResultData(requestCode, resultCode, data, new BaseUiListener()); if (requestCode == Constants.REQUEST_API) { if (resultCode == Constants.REQUEST_LOGIN) { Tencent.handleResultData(data, new BaseUiListener()); } } }
The end!