在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Android平台开发 → android 上实现QQ互联(QQ登陆) 含全部接口sdk(oauth2.0协议)实例源码下载,亲测通过

android 上实现QQ互联(QQ登陆) 含全部接口sdk(oauth2.0协议)实例源码下载,亲测通过

Android平台开发

下载此实例
  • 开发语言:Java
  • 实例大小:0.64M
  • 下载次数:130
  • 浏览次数:7807
  • 发布时间:2013-02-04
  • 实例类别:Android平台开发
  • 发 布 人:星火燎原
  • 文件格式:.zip
  • 所需积分:2
 相关标签: 接口 QQ Android oauth

实例介绍

【实例简介】基于oauth2.0协议,实现了QQ互联目前开放的所有接口,例如创建相册、上传照片、发表说说、同步动态等等 均已实现,并亲测通过。
【实例截图】


【核心代码】

package com.tencent.tauthdemo;


import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.ScrollView;
import android.widget.TextView;

import com.tencent.tauth.TAuthView;
import com.tencent.tauth.TencentOpenAPI;
import com.tencent.tauth.TencentOpenRes;
import com.tencent.tauth.bean.OpenId;
import com.tencent.tauth.http.Callback;
import com.tencent.tauth.http.TDebug;
import com.tencent.tauthdemo.clickListener.AddAlbumClickListener;
import com.tencent.tauthdemo.clickListener.AddShareClickListener;
import com.tencent.tauthdemo.clickListener.AddTopicClickListener;
import com.tencent.tauthdemo.clickListener.GetUserInfoClickListener;
import com.tencent.tauthdemo.clickListener.GetUserProfileClickListener;
import com.tencent.tauthdemo.clickListener.ListAlbumClickListener;
import com.tencent.tauthdemo.clickListener.UploadPicClickListener;

public class TAuthDemoActivity extends Activity {
	
	private static final String TAG="TAuthDemoActivity";
	public static final int REQUEST_PICK_PICTURE = 1001;
	/**
	 * <p>不能包含特殊字符“#”</br>
	 * 不能是浏览器能识别的协议,比如:http://auth.qq.com</br>
	 * 不设置时默认使用: auth://tauth.qq.com/</br></br>
	 * 不区分大小写。在Manifest设置的scheme必须是小写</br>
	 * 在Manifest中设置intent-filter:data android:scheme="auth"</p>
	 * 例如:</br>
	 *	&ltintent-filter>  </br>
	 * 		&ltaction android:name="android.intent.action.VIEW" />  </br>
	 *		&ltcategory android:name="android.intent.category.DEFAULT" />  </br>
	 *		&ltcategory android:name="android.intent.category.BROWSABLE" />  </br>
	 *		&ltdata android:scheme="auth"/>   </br>
	 *	&lt/intent-filter>  </br>
	 *
	 */
	private static final String CALLBACK = "tencentauth://auth.qq.com";
	
	public String mAppid = "222222";//申请时分配的appid
	private String scope = "get_user_info,get_user_profile,add_share,add_topic,list_album,upload_pic,add_album";//授权范围
	private AuthReceiver receiver;
	
	public String mAccessToken, mOpenId;
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        ImageView loginBtn = (ImageView) findViewById(R.id.login);
        loginBtn.setImageDrawable(TencentOpenRes.getBigLoginBtn(getAssets()));
        loginBtn.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				mAccessToken = null;
				mOpenId = null;
				((TextView)findViewById(R.id.access_token)).setText("");
				((TextView)findViewById(R.id.openid)).setText("");
				auth(mAppid, "_self");
			}
		});
        ImageView loginBBtn = (ImageView) findViewById(R.id.login_browser);
        loginBBtn.setImageDrawable(TencentOpenRes.getLoginBtn(getAssets()));
        loginBBtn.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				mAccessToken = null;
				mOpenId = null;
				((TextView)findViewById(R.id.access_token)).setText("");
				((TextView)findViewById(R.id.openid)).setText("");
				auth(mAppid, "_blank");
			}
		});
		registerIntentReceivers();
      
		findViewById(R.id.get_user_info).setOnClickListener(new GetUserInfoClickListener(this));
		findViewById(R.id.get_user_profile).setOnClickListener(new GetUserProfileClickListener(this));
		findViewById(R.id.add_share).setOnClickListener(new AddShareClickListener(this));
		findViewById(R.id.add_topic).setOnClickListener(new AddTopicClickListener(this));
		findViewById(R.id.list_album).setOnClickListener(new ListAlbumClickListener(this));
		findViewById(R.id.upload_pic).setOnClickListener(new UploadPicClickListener(this));
		findViewById(R.id.add_album).setOnClickListener(new AddAlbumClickListener(this));
    }
    
    
    /**
	 * 打开登录认证与授权页面
	 * 
	 * @param	String	clientId	申请时分配的appid
	 * @param	String	target		打开登录页面的方式:“_slef”以webview方式打开; "_blank"以内置安装的浏览器方式打开
	 * @author John.Meng<arzen1013@gmail> QQ:3440895
	 * @date 2011-9-5
	 */
    private void auth(String clientId, String target) {
		Intent intent = new Intent(TAuthDemoActivity.this, com.tencent.tauth.TAuthView.class);
		
		intent.putExtra(TAuthView.CLIENT_ID, clientId);
		intent.putExtra(TAuthView.SCOPE, scope);
		intent.putExtra(TAuthView.TARGET, target);
		intent.putExtra(TAuthView.CALLBACK, CALLBACK);
		
		startActivity(intent);
		
	}
    
    @Override
    protected void onDestroy() {
    	super.onDestroy();
    	if (receiver != null) {
        	unregisterIntentReceivers();
		}
    }
    
    
	private void registerIntentReceivers() {
		receiver =  new AuthReceiver();
        IntentFilter filter = new IntentFilter();
        filter.addAction(TAuthView.AUTH_BROADCAST);
		registerReceiver(receiver, filter);
	}
	
	private void unregisterIntentReceivers() {
		unregisterReceiver(receiver);
	}
	
	public void setOpenIdText(String txt) {
		((TextView)findViewById(R.id.openid)).setText(txt);
		mOpenId = txt;
	}
	
	
	/**
	 * 广播的侦听,授权完成后的回调是以广播的形式将结果返回
	 * 
	 * @author John.Meng<arzen1013@gmail> QQ:3440895
	 * @date 2011-9-5
	 */
    public class AuthReceiver extends BroadcastReceiver {
    	
    	private static final String TAG="AuthReceiver";

    	@Override
    	public void onReceive(Context context, Intent intent) {
 			Bundle exts = intent.getExtras();
        	String raw =  exts.getString("raw");
        	String access_token =  exts.getString(TAuthView.ACCESS_TOKEN);
        	String expires_in =  exts.getString(TAuthView.EXPIRES_IN);
        	String error_ret =  exts.getString(TAuthView.ERROR_RET);
        	String error_des =  exts.getString(TAuthView.ERROR_DES);
        	Log.i(TAG, String.format("raw: %s, access_token:%s, expires_in:%s", raw, access_token, expires_in));
        	
        	if (access_token != null) {
        		mAccessToken = access_token;
        		((TextView)findViewById(R.id.access_token)).setText(access_token);
        		new Handler().postDelayed(new Runnable() {//在最新的2.3.6系统中直接showDialog(PROGRESS)无线显示出dialog
					
					@Override
					public void run() {
						showDialog(PROGRESS);
					}
				}, 100);
        		//用access token 来获取open id
				TencentOpenAPI.openid(access_token, new Callback() {
					@Override
					public void onSuccess(final Object obj) {
						runOnUiThread(new Runnable() {
							@Override
							public void run() {
								dismissDialog(PROGRESS);
								setOpenIdText(((OpenId)obj).getOpenId());
							}
						});
					}
					@Override
					public void onFail(int ret, final String msg) {
						runOnUiThread(new Runnable() {
							@Override
							public void run() {
								dismissDialog(PROGRESS);
								TDebug.msg(msg, getApplicationContext());
							}
						});
					}
				});
			}
        	if (error_ret != null) {
        		((TextView)findViewById(R.id.access_token)).setText("获取access token失败"   "\n错误码: "   error_ret   "\n错误信息: "   error_des);
			}
    	}

    }
	public boolean satisfyConditions() {
		return 	mAccessToken != null && 
				mAppid != null && 
				mOpenId != null && 
				!mAccessToken.equals("") && 
				!mAppid.equals("") && 
				!mOpenId.equals("");
	}

	public static final int PROGRESS = 0;
	@Override
	protected Dialog onCreateDialog(int id) {
		Dialog dialog = null;
		switch (id) {
		case PROGRESS:
			dialog = new ProgressDialog(this);
			((ProgressDialog)dialog).setMessage("请求中,请稍等...");
			break;
		}
		
		return dialog;
	}
	
	public void showMessage(String title, String msg) {
		Dialog dialog = new Dialog(TAuthDemoActivity.this);
		ScrollView rootView = new ScrollView(TAuthDemoActivity.this);
		TextView view = new TextView(TAuthDemoActivity.this);
		view.setText(msg);
		rootView.addView(view);
		dialog.setContentView(rootView);
		dialog.setTitle(title);
		dialog.show();
	}
	
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		switch (requestCode) {
		case REQUEST_PICK_PICTURE: {
			if (data != null) {
				Uri bitmapUri = data.getData();
				if (bitmapUri != null) {
					UploadPicClickListener.uploadPic(this, bitmapUri);
				}
			}
			break;
		}
		}
	}
    
}

标签: 接口 QQ Android oauth

实例下载地址

android 上实现QQ互联(QQ登陆) 含全部接口sdk(oauth2.0协议)实例源码下载,亲测通过

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

第 1 楼 flying_free 发表于: 2014-06-14 10:56 34
没有积分好烦

支持(0) 盖楼(回复)

第 2 楼 2979256530 发表于: 2014-06-26 14:32 31
感谢分享

支持(0) 盖楼(回复)

第 3 楼 xiao_he 发表于: 2014-06-30 16:03 07
我来说两句...好东西 谢谢分享

支持(0) 盖楼(回复)

第 4 楼 z4909801 发表于: 2014-07-14 18:32 28
我来说两句...非常感谢求下载

支持(0) 盖楼(回复)

第 5 楼 kakacct 发表于: 2014-07-29 15:18 00
我来说两句...我来说两句...非常感谢求下载

支持(0) 盖楼(回复)

第 6 楼 maizhe 发表于: 2014-07-31 13:46 00
都是怎么来的积分啊?

支持(0) 盖楼(回复)

第 7 楼 啃键盘 发表于: 2014-08-06 11:13 57
楼主厉害,基本是没有使用sdk,全部是用的协议

支持(0) 盖楼(回复)

第 8 楼 五钱 发表于: 2014-09-19 21:04 16
我来说两句...好不错误的例子

支持(0) 盖楼(回复)

第 9 楼 mh_920930 发表于: 2015-06-02 12:01 32
很好,谢谢楼主分享

支持(0) 盖楼(回复)

第 10 楼 dangxuanyang 发表于: 2016-03-09 16:06 18
用eclipse打开出错,,中文都是乱码,不能编译

支持(0) 盖楼(回复)

第 11 楼 crazycode 发表于: 2016-03-09 16:52 28
用eclipse打开出错,,中文都是乱码,不能编译

dangxuanyang 2016-03-09 16:06 18

如果在eclipse打开源码 看到的是乱码,那么表示你的 eclipse工具编码与项目编码不一致,改下eclipse的默认编码即可,具体如何修改 eclipse编码 可以百度下

支持(0) 盖楼(回复)

第 12 楼 971504857 发表于: 2016-03-12 10:35 05
违法法师法师

支持(0) 盖楼(回复)

第 13 楼 971504857 发表于: 2016-03-12 10:35 08
违法法师法师

支持(0) 盖楼(回复)

发表评论

(您的评论需要经过审核才能显示)

查看所有13条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警