Android-QQ登录
来源:互联网 发布:蘑菇网络词是什么意思 编辑:程序博客网 时间:2024/05/17 02:58
1.首先,当然是在腾讯开放平台(http://open.qq.com/)注册成为开发者,然后获取APP ID
2.把open-sdk.jar拷贝到libs(或lib)目录下
(下载地址:http://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD)
3.配置AndroidManifest
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 从QQ登录中copy的代码--> <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="tencent1105546048" /> </intent-filter> </activity><activity android:name="com.tencent.connect.common.AssistActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:theme="@android:style/Theme.Translucent.NoTitleBar" />------------------------------------------------------------------------
4.创建实例
声明
// QQ登录相关private static final String QQAPPID = "1106263164"; private Tencent mTencent; private IUiListener loginListener; private IUiListener userInfoListener; private String scope; private UserInfo userInfo; ImageView img_login_qq;
初始化
// QQ登录相关 mTencent = Tencent.createInstance(QQAPPID, LoginActivity.this); scope = "all"; initLoginListener(); initUserInfoListener(); img_login_qq= (ImageView) findViewById(R.id.img_login_qq); img_login_qq.setOnClickListener(this);
其余见代码
/*qq登录开始 */private void qqLogin() { if (!mTencent.isSessionValid()) { mTencent.login(LoginActivity.this, scope, loginListener); }}private void initLoginListener() { loginListener = new IUiListener() { /** * {"ret":0,"pay_token":"D3D678728DC580FBCDE15722B72E7365", * "pf":"desktop_m_qq-10000144-android-2002-", * "query_authority_cost":448, * "authority_cost":-136792089, * "openid":"015A22DED93BD15E0E6B0DDB3E59DE2D", * "expires_in":7776000, * "pfkey":"6068ea1c4a716d4141bca0ddb3df1bb9", * "msg":"", * "access_token":"A2455F491478233529D0106D2CE6EB45", * "login_cost":499} */ @Override public void onComplete(Object value) { // TODO Auto-generated method stub if(value==null){ Toast.makeText(getApplicationContext(),"返回结果为空",Toast.LENGTH_LONG).show(); return; } System.out.println("有数据返回.."); try { JSONObject jo = (JSONObject) value; if(null!=jo&&jo.length()==0){ Toast.makeText(getApplicationContext(),"返回结果为空",Toast.LENGTH_LONG).show(); } //处理结果 System.out.println(jo.toString()); String msg = jo.getString("msg"); int ret = jo.getInt("ret"); System.out.println("json=" + String.valueOf(jo)); System.out.println("json=" + String.valueOf(jo)); System.out.println("msg="+msg); if (ret == 0) { String openID = jo.getString("openid"); String accessToken = jo.getString("access_token"); String expires = jo.getString("expires_in"); //下面两个方法非常重要,否则会出现client request's parameters are invalid, invalid openid mTencent.setOpenId(openID); mTencent.setAccessToken(accessToken, expires); System.out.println("开始获取用户信息"); if(mTencent.getQQToken() == null){ System.out.println("qqtoken ====================== null"); } userInfo = new UserInfo(LoginActivity.this, mTencent.getQQToken()); userInfo.getUserInfo(userInfoListener); }// if (ret == 0) {// Toast.makeText(MainActivity.this, "登录成功",// Toast.LENGTH_LONG).show();//// String openID = jo.getString("openid");// String accessToken = jo.getString("access_token");// String expires = jo.getString("expires_in");// mTencent.setOpenId(openID);// mTencent.setAccessToken(accessToken, expires);// } } catch (Exception e) { // TODO: handle exception } } @Override public void onError(UiError uiError) { Toast.makeText(getApplicationContext(),"登录错误",Toast.LENGTH_LONG).show(); } @Override public void onCancel() { // TODO Auto-generated method stub Toast.makeText(getApplicationContext(),"登录取消",Toast.LENGTH_LONG).show(); } };} private void initUserInfoListener() { userInfoListener = new IUiListener() { @Override public void onError(UiError arg0) { // TODO Auto-generated method stub System.out.print(arg0.toString()); } @Override public void onCancel() { // TODO Auto-generated method stub System.out.print("cancel"); } /** * {"is_yellow_year_vip":"0","ret":0, * "figureurl_qq_1":"http:\/\/q.qlogo.cn\/qqapp\/1104732758\/015A22DED93BD15E0E6B0DDB3E59DE2D\/40", * "figureurl_qq_2":"http:\/\/q.qlogo.cn\/qqapp\/1104732758\/015A22DED93BD15E0E6B0DDB3E59DE2D\/100", * "nickname":"攀爬←蜗牛","yellow_vip_level":"0","is_lost":0,"msg":"", * "city":"黄冈"," * figureurl_1":"http:\/\/qzapp.qlogo.cn\/qzapp\/1104732758\/015A22DED93BD15E0E6B0DDB3E59DE2D\/50", * "vip":"0","level":"0", * "figureurl_2":"http:\/\/qzapp.qlogo.cn\/qzapp\/1104732758\/015A22DED93BD15E0E6B0DDB3E59DE2D\/100", * "province":"湖北", * "is_yellow_vip":"0","gender":"男", * "figureurl":"http:\/\/qzapp.qlogo.cn\/qzapp\/1104732758\/015A22DED93BD15E0E6B0DDB3E59DE2D\/30"} */ @Override public void onComplete(Object arg0) { // TODO Auto-generated method stub if(arg0 == null){ System.out.println("agr0=1234567null"); return; } try { JSONObject jo = (JSONObject) arg0; int ret = jo.getInt("ret"); System.out.println("json======" + String.valueOf(jo));// String nickName=jo.getString("nickname");// String gender=jo.getString("gender");// System.out.println("nickname"+nickName);// Toast.makeText(MainActivity.this, "你好," + nickName,// Toast.LENGTH_LONG).show(); if(ret == 100030){ //权限不够,需要增量授权 Runnable r = new Runnable() { public void run() { mTencent.reAuth(LoginActivity.this, "all", new IUiListener() { @Override public void onError(UiError arg0) { // TODO Auto-generated method stub } @Override public void onComplete(Object arg0) { // TODO Auto-generated method stub } @Override public void onCancel() { // TODO Auto-generated method stub } }); } }; LoginActivity.this.runOnUiThread(r); }else{ username = jo.getString("nickname");// sex = jo.getString("gender"); if(isUsernameExists()) { } else { new Thread(new Runnable() { @Override public void run() {// connectToRegister(); } }).start(); } Intent intent=new Intent(LoginActivity.this, MainActivity.class); Toast.makeText(LoginActivity.this,username+",欢迎你", Toast.LENGTH_LONG).show(); Intent intent_service=new Intent(LoginActivity.this, SaveUsersService.class); startActivity(intent); finish(); // Toast.makeText(LoginActivity.this, "你好," + username, Toast.LENGTH_LONG).show(); } } catch (Exception e) { // TODO: handle exception } } }; } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { //由于在一些低端机器上,因为内存原因,无法返回到回调onComplete里面,是以onActivityResult的方式返回 if(requestCode==11101&&resultCode==RESULT_OK){ //处理返回的数据/ if(data==null){ Toast.makeText(getApplicationContext(),"返回数据为空",Toast.LENGTH_LONG); }else{ Tencent.handleResultData(data,loginListener); } } super.onActivityResult(requestCode, resultCode, data); } private String getUserId(String username) { String id = null; //打开或创建test.db数据库 SQLiteDatabase db = openOrCreateDatabase("qingning.db", Context.MODE_PRIVATE, null); //打开或创建test.db数据库 // SQLiteDatabase db = openOrCreateDatabase("test.db", Context.MODE_PRIVATE, null); Cursor c = db.rawQuery("select * from users where username=?",new String[]{username}); System.out.println("username"+c.getCount()); c.moveToFirst(); for(int j=0;j<c.getCount();j++) { c.moveToPosition(j); id=c.getString(c.getColumnIndex("id")); System.out.println("id:"+id); } db.close(); return id; } private boolean isUsernameExists(){ //打开或创建test.db数据库 SQLiteDatabase db = openOrCreateDatabase("qingning.db", Context.MODE_PRIVATE, null); Cursor c = db.rawQuery("select * from users where username=?",new String[]{username}); if(c.getCount()==1){ db.close(); return true; } else{ System.out.println("false:cccc"); System.out.println("username"+c.getCount()); } return false; } /* qq登录结束 */
阅读全文
0 0
- android 实现qq登录
- Android QQ登录
- Android 调用QQ登录
- 【Android】集成QQ登录
- android QQ 登录
- Android之QQ登录
- Android集成QQ登录
- Android QQ登录
- Android集成QQ登录
- Android QQ登录
- Android-QQ登录
- Android 集成QQ登录
- Android QQ授权登录
- android仿QQ登录界面
- Android QQ第三方登录
- android,QQ第三方登录
- Android QQ第三方登录
- Android QQ第三方登录
- 安装pycaffe所遇到的问题以及解决
- c++ 由几月几号出本年第多少天,考虑闰年
- Python机器学习应用 | 期末大作业1(程序设计)
- html5实现 搜索历史记录【轻松搞定】
- Leetcode 606. Construct String from Binary Tree
- Android-QQ登录
- Unity5.x学习笔记(3)-文件上传错误:unsupported protocol
- python入门系列13―——集合、双端队列、堆
- UVaLive3942
- mysql限制用户只能访问指定数据库
- 2017年7月4日13:10:38
- es6 Symbol(八)
- pagination bug问题
- VueJs 自定义过滤器使用总结