实例介绍
【实例截图】
【核心代码】
package com.tencent.sample.activitys;
import java.util.ArrayList;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.tencent.connect.UserInfo;
import com.tencent.connect.common.Constants;
import com.tencent.sample.AppConstants;
import com.tencent.sample.R;
import com.tencent.sample.Util;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.UiError;
import com.tencent.tauth.Tencent;
public class MainActivity extends Activity {
private static final String TAG = MainActivity.class.getName();
public static String mAppid;
private Button mNewLoginButton;
private Button mServerSideLoginBtn;
private TextView mUserInfo;
private ImageView mUserLogo;
private UserInfo mInfo;
private EditText mEtAppid = null;
public static Tencent mTencent;
private static Intent mPrizeIntent = null;
private static boolean isServerSideLogin = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "-->onCreate");
// setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//
// 固定竖屏
setContentView(R.layout.activity_main_new);
initViews();
//setBarTitle("demo菜单");
if (TextUtils.isEmpty(mAppid)) {
mAppid = "222222";
mEtAppid = new EditText(this);
mEtAppid.setText(mAppid);
try {
new AlertDialog.Builder(this).setTitle("请输入APP_ID")
.setCancelable(false)
.setIcon(android.R.drawable.ic_dialog_info)
.setView(mEtAppid)
.setPositiveButton("Commit", mAppidCommitListener)
.setNegativeButton("Use Default", mAppidCommitListener)
.show();
} catch (Exception e) {
}
} else {
if (mTencent == null) {
mTencent = Tencent.createInstance(mAppid, this);
}
}
// 获取有奖分享的intent信息
if (null != getIntent()) {
mPrizeIntent = getIntent();
}
}
/**
* 有奖分享处理,未接入有奖分享可以不考虑
*/
private void handlePrizeShare() {
// -----------------------------------
// 下面的注释请勿删除,编译lite版的时候需要删除, 注意//[不要有空格。
//[liteexludestartmeta]
if (null == mPrizeIntent || null == mTencent) {
return;
}
// 有奖分享处理
boolean hasPrize = mTencent.checkPrizeByIntent(this, mPrizeIntent);
if (hasPrize) {
Util.showConfirmCancelDialog(this, "有奖品领取", "请使用QQ登录后,领取奖品!", prizeShareConfirmListener);
}
//[liteexludeendmeta]
}
// -----------------------------------
// 下面的注释请勿删除,编译lite版的时候需要删除, 注意//[不要有空格。
//[liteexludestart_flag_one]
private DialogInterface.OnClickListener prizeShareConfirmListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case DialogInterface.BUTTON_POSITIVE:
boolean isLogin = mTencent.isSessionValid();
if (isLogin) {
// 本地已经有保存openid和accesstoken的情况下,先调用mTencent.setAccesstoken().
// 也可在奖品列表页,主动调用此接口获取未领取的奖品
if (null != mPrizeIntent) {
mTencent.queryUnexchangePrize(MainActivity.this, mPrizeIntent.getExtras(),
prizeQueryUnexchangeListener);
}
} else {
// 未登陆提示用户使用QQ号登陆
onClickLogin();
}
break;
default:
break;
}
}
};
private IUiListener prizeQueryUnexchangeListener = new IUiListener() {
@Override
public void onError(UiError e) {
Util.toastMessage(MainActivity.this, "onError: " e.errorDetail);
Util.dismissDialog();
}
@Override
public void onCancel() {
Util.toastMessage(MainActivity.this, "onCancel: ");
Util.dismissDialog();
}
@Override
public void onComplete(Object response) {
Util.showConfirmCancelDialog(MainActivity.this, "兑换奖品", response.toString(),
new PrizeClickExchangeListener(response.toString()));
// 兑换奖品后,mPrizeIntent 置为空
mPrizeIntent = null;
}
};
private IUiListener prizeExchangeListener = new IUiListener() {
@Override
public void onError(UiError e) {
Util.toastMessage(MainActivity.this, "onError: " e.errorDetail);
Util.dismissDialog();
}
@Override
public void onCancel() {
Util.toastMessage(MainActivity.this, "onCancel: ");
Util.dismissDialog();
}
@Override
public void onComplete(Object response) {
Util.showResultDialog(MainActivity.this, response.toString(), "兑换信息");
}
};
private class PrizeClickExchangeListener implements DialogInterface.OnClickListener {
String response = "";
PrizeClickExchangeListener(String strResponse) {
response = strResponse;
}
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case DialogInterface.BUTTON_POSITIVE:
if (null != mTencent) {
Bundle params = new Bundle();
ArrayList<String> shareIdList = handlePrizeResponse(response);
if (null != shareIdList) {
ArrayList<String> list = new ArrayList<String>();
// 后台测试环境目前只支持一个shareid的兑换,正式环境会支持多个shareid兑换。
list.add(shareIdList.get(0));
params.putStringArrayList("shareid_list", list);
mTencent.exchangePrize(MainActivity.this, params, prizeExchangeListener);
}
}
break;
default:
break;
}
}
};
private ArrayList<String> handlePrizeResponse(String response) {
ArrayList<String> shareIdList = new ArrayList<String>();
if (TextUtils.isEmpty(response)) {
return null;
}
try {
JSONObject obj = new JSONObject(response);
int code = obj.getInt("ret");
int subCode = obj.getInt("subCode");
if (code == 0 && subCode == 0) {
JSONObject data = obj.getJSONObject("data");
JSONArray prizeList = data.getJSONArray("prizeList");
int size = prizeList.length();
JSONObject prize = null;
for (int i = 0; i < size; i ) {
prize = prizeList.getJSONObject(i);
if (null != prize) {
shareIdList.add(prize.getString("shareId"));
}
}
} else {
return null;
}
} catch (Exception e) {
return null;
}
return shareIdList;
}
//[liteexludeend_flag_one]
@Override
protected void onStart() {
Log.d(TAG, "-->onStart");
super.onStart();
}
@Override
protected void onResume() {
Log.d(TAG, "-->onResume");
// 有奖分享处理
handlePrizeShare();
super.onResume();
}
@Override
protected void onPause() {
Log.d(TAG, "-->onPause");
super.onPause();
}
@Override
protected void onStop() {
Log.d(TAG, "-->onStop");
super.onStop();
}
@Override
protected void onDestroy() {
Log.d(TAG, "-->onDestroy");
super.onDestroy();
}
private void initViews() {
mNewLoginButton = (Button) findViewById(R.id.new_login_btn);
mServerSideLoginBtn = (Button) findViewById(R.id.server_side_login_btn);
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.main_container);
OnClickListener listener = new NewClickListener();
for (int i = 0; i < linearLayout.getChildCount(); i ) {
View view = linearLayout.getChildAt(i);
if (view instanceof Button) {
view.setOnClickListener(listener);
}
}
mUserInfo = (TextView) findViewById(R.id.user_nickname);
mUserLogo = (ImageView) findViewById(R.id.user_logo);
updateLoginButton();
}
private void updateLoginButton() {
if (mTencent != null && mTencent.isSessionValid()) {
if (isServerSideLogin) {
mNewLoginButton.setTextColor(Color.BLUE);
mNewLoginButton.setText("登录");
mServerSideLoginBtn.setTextColor(Color.RED);
mServerSideLoginBtn.setText("退出Server-Side账号");
} else {
mNewLoginButton.setTextColor(Color.RED);
mNewLoginButton.setText("退出帐号");
mServerSideLoginBtn.setTextColor(Color.BLUE);
mServerSideLoginBtn.setText("Server-Side登陆");
}
} else {
mNewLoginButton.setTextColor(Color.BLUE);
mNewLoginButton.setText("登录");
mServerSideLoginBtn.setTextColor(Color.BLUE);
mServerSideLoginBtn.setText("Server-Side登陆");
}
}
private void updateUserInfo() {
if (mTencent != null && mTencent.isSessionValid()) {
IUiListener listener = new IUiListener() {
@Override
public void onError(UiError e) {
}
@Override
public void onComplete(final Object response) {
Message msg = new Message();
msg.obj = response;
msg.what = 0;
mHandler.sendMessage(msg);
new Thread(){
@Override
public void run() {
JSONObject json = (JSONObject)response;
if(json.has("figureurl")){
Bitmap bitmap = null;
try {
bitmap = Util.getbitmap(json.getString("figureurl_qq_2"));
} catch (JSONException e) {
}
Message msg = new Message();
msg.obj = bitmap;
msg.what = 1;
mHandler.sendMessage(msg);
}
}
}.start();
}
@Override
public void onCancel() {
}
};
mInfo = new UserInfo(this, mTencent.getQQToken());
mInfo.getUserInfo(listener);
} else {
mUserInfo.setText("");
mUserInfo.setVisibility(android.view.View.GONE);
mUserLogo.setVisibility(android.view.View.GONE);
}
}
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 0) {
JSONObject response = (JSONObject) msg.obj;
if (response.has("nickname")) {
try {
mUserInfo.setVisibility(android.view.View.VISIBLE);
mUserInfo.setText(response.getString("nickname"));
} catch (JSONException e) {
e.printStackTrace();
}
}
}else if(msg.what == 1){
Bitmap bitmap = (Bitmap)msg.obj;
mUserLogo.setImageBitmap(bitmap);
mUserLogo.setVisibility(android.view.View.VISIBLE);
}
}
};
private void onClickLogin() {
if (!mTencent.isSessionValid()) {
mTencent.login(this, "all", loginListener);
isServerSideLogin = false;
Log.d("SDKQQAgentPref", "FirstLaunch_SDK:" SystemClock.elapsedRealtime());
} else {
if (isServerSideLogin) { // Server-Side 模式的登陆, 先退出,再进行SSO登陆
mTencent.logout(this);
mTencent.login(this, "all", loginListener);
isServerSideLogin = false;
Log.d("SDKQQAgentPref", "FirstLaunch_SDK:" SystemClock.elapsedRealtime());
return;
}
mTencent.logout(this);
updateUserInfo();
updateLoginButton();
}
}
private void onClickServerSideLogin() {
if (!mTencent.isSessionValid()) {
mTencent.loginServerSide(this, "all", loginListener);
isServerSideLogin = true;
Log.d("SDKQQAgentPref", "FirstLaunch_SDK:" SystemClock.elapsedRealtime());
} else {
if (!isServerSideLogin) { // SSO模式的登陆,先退出,再进行Server-Side模式登陆
mTencent.logout(this);
mTencent.loginServerSide(this, "all", loginListener);
isServerSideLogin = true;
Log.d("SDKQQAgentPref", "FirstLaunch_SDK:" SystemClock.elapsedRealtime());
return;
}
mTencent.logout(this);
isServerSideLogin = false;
updateUserInfo();
updateLoginButton();
}
}
public static String getAppid() {
if (TextUtils.isEmpty(mAppid)) {
mAppid = "222222";
}
return mAppid;
}
public static boolean ready(Context context) {
if (mTencent == null) {
return false;
}
boolean ready = mTencent.isSessionValid()
&& mTencent.getQQToken().getOpenId() != null;
if (!ready) {
Toast.makeText(context, "login and get openId first, please!",
Toast.LENGTH_SHORT).show();
}
return ready;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(TAG, "-->onActivityResult " requestCode " resultCode=" resultCode);
if (requestCode == Constants.REQUEST_LOGIN ||
requestCode == Constants.REQUEST_APPBAR) {
Tencent.onActivityResultData(requestCode,resultCode,data,loginListener);
}
super.onActivityResult(requestCode, resultCode, data);
}
public static void initOpenidAndToken(JSONObject jsonObject) {
try {
String token = jsonObject.getString(Constants.PARAM_ACCESS_TOKEN);
String expires = jsonObject.getString(Constants.PARAM_EXPIRES_IN);
String openId = jsonObject.getString(Constants.PARAM_OPEN_ID);
if (!TextUtils.isEmpty(token) && !TextUtils.isEmpty(expires)
&& !TextUtils.isEmpty(openId)) {
mTencent.setAccessToken(token, expires);
mTencent.setOpenId(openId);
}
} catch(Exception e) {
}
}
IUiListener loginListener = new BaseUiListener() {
@Override
protected void doComplete(JSONObject values) {
Log.d("SDKQQAgentPref", "AuthorSwitch_SDK:" SystemClock.elapsedRealtime());
initOpenidAndToken(values);
updateUserInfo();
updateLoginButton();
}
};
private class BaseUiListener implements IUiListener {
@Override
public void onComplete(Object response) {
if (null == response) {
Util.showResultDialog(MainActivity.this, "返回为空", "登录失败");
return;
}
JSONObject jsonResponse = (JSONObject) response;
if (null != jsonResponse && jsonResponse.length() == 0) {
Util.showResultDialog(MainActivity.this, "返回为空", "登录失败");
return;
}
Util.showResultDialog(MainActivity.this, response.toString(), "登录成功");
// 有奖分享处理
handlePrizeShare();
doComplete((JSONObject)response);
}
protected void doComplete(JSONObject values) {
}
@Override
public void onError(UiError e) {
Util.toastMessage(MainActivity.this, "onError: " e.errorDetail);
Util.dismissDialog();
}
@Override
public void onCancel() {
Util.toastMessage(MainActivity.this, "onCancel: ");
Util.dismissDialog();
if (isServerSideLogin) {
isServerSideLogin = false;
}
}
}
private DialogInterface.OnClickListener mAppidCommitListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mAppid = AppConstants.APP_ID;
switch (which) {
case DialogInterface.BUTTON_POSITIVE:
// 用输入的appid
String editTextContent = mEtAppid.getText().toString().trim();
if (!TextUtils.isEmpty(editTextContent)) {
mAppid = editTextContent;
}
break;
case DialogInterface.BUTTON_NEGATIVE:
// 默认appid
break;
}
mTencent = Tencent.createInstance(mAppid, MainActivity.this);
// 有奖分享处理
handlePrizeShare();
}
};
private void onClickIsSupportSSOLogin() {
if (mTencent.isSupportSSOLogin(MainActivity.this)) {
Toast.makeText(MainActivity.this, "支持SSO登陆", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "不支持SSO登陆", Toast.LENGTH_SHORT).show();
}
}
class NewClickListener implements OnClickListener {
@Override
public void onClick(View v) {
Context context = v.getContext();
Animation shake = AnimationUtils.loadAnimation(context,
R.anim.shake);
Class<?> cls = null;
boolean isAppbar = false;
switch (v.getId()) {
case R.id.new_login_btn:
onClickLogin();
v.startAnimation(shake);
return;
case R.id.server_side_login_btn:
onClickServerSideLogin();
v.startAnimation(shake);
return;
case R.id.main_sso_btn:
onClickIsSupportSSOLogin();
return;
case R.id.main_getInfo_btn:
cls = AccountInfoActivity.class;
break;
case R.id.main_qqShare_btn:
cls = QQShareActivity.class;
break;
case R.id.main_qzoneShare_btn:
cls = QZoneShareActivity.class;
break;
case R.id.main_social_api_btn:
cls = SocialApiActivity.class;
break;
//-----------------------------------
// 下面的注释请勿删除,编译lite版的时候需要删除, 注意//[不要有空格。
//[liteexludestart]
case R.id.game_add_friend:
cls = GameLogicActivity.class;
break;
case R.id.main_qzonePic_btn:
cls = QzonePicturesActivity.class;
break;
case R.id.main_tqqInfo_btn:
cls = TQQInfoActivity.class;
break;
case R.id.main_wap_btn:
cls = WPAActivity.class;
break;
case R.id.main_others_btn:
cls = OtherApiActivity.class;
break;
case R.id.main_avatar_btn:
cls = AvatarActivity.class;
break;
case R.id.main_appbar_btn:
cls = SocialAppbarActivity.class;
isAppbar = true;
break;
case R.id.main_qqgroup_btn:
cls = QQGroupActivity.class;
break;
//[liteexludeend]
}
v.startAnimation(shake);
if (cls != null) {
Intent intent = new Intent(context, cls);
if (isAppbar) { //APP内应用吧登录需接收登录结果
startActivityForResult(intent, Constants.REQUEST_APPBAR);
} else {
context.startActivity(intent);
}
}
}
}
}
标签: 登录
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论