Android QQ第三方登录
来源:互联网 发布:java documentation 编辑:程序博客网 时间:2024/05/07 08:45
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="test.gzy.qqtest"> //1、加上下面这两个权限 <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> <activity android:name=".QQLoginActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <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="222222" />//222222是qq官方测试APPID </intent-filter> </activity> <activity android:name="com.tencent.connect.common.AssistActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> </application></manifest>
接下来是布局文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal" android:orientation="vertical"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="login" android:text="登录" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="getUserInfo" android:text="获取用户信息" /> <TextView android:id="@+id/username" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="asd" /> <ImageView android:id="@+id/img" android:layout_width="50dp" android:layout_height="50dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal"> <TextView android:id="@+id/province" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="13" /> <TextView android:id="@+id/city" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="12" /> </LinearLayout></LinearLayout>
最后贴上代码~
package test.gzy.qqtest;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.design.widget.Snackbar;import android.util.Log;import android.view.KeyEvent;import android.view.View;import android.widget.ImageView;import android.widget.TextView;import com.squareup.picasso.Picasso;import com.tencent.connect.UserInfo;import com.tencent.connect.auth.QQAuth;import com.tencent.connect.common.Constants;import com.tencent.tauth.IUiListener;import com.tencent.tauth.Tencent;import com.tencent.tauth.UiError;import org.json.JSONException;import org.json.JSONObject;public class QQLoginActivity extends Activity { String TAG = "aaa"; String APP_ID = "1104406273"; long Time = 0; TextView tV_username; TextView tV_province; TextView tV_city; ImageView img; Snackbar snackbar; Tencent mTencent; QQAuth mQqAuth; UserInfo mUserInfo; Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case 0: tV_username.setText(msg.getData().getString("userName")); tV_province.setText(msg.getData().getString("province")); tV_city.setText(msg.getData().getString("city")); Picasso.with(QQLoginActivity.this).load(msg.getData().getString("imgUrl")).into(img); break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); mTencent = Tencent.createInstance(APP_ID, this); } /** * 初始化控件 */ private void initView() { tV_username = (TextView) findViewById(R.id.username); tV_province = (TextView) findViewById(R.id.province); tV_city = (TextView) findViewById(R.id.city); img = (ImageView) findViewById(R.id.img); } /** * 登录 * * @param view */ public void login(View view) { mTencent.login(this, APP_ID, new IUiListener() { @Override public void onComplete(Object object) { Log.i(TAG, "onComplete login " + object.toString()); } @Override public void onError(UiError uiError) { } @Override public void onCancel() { } }); } /** * 获取用户信息(button点击事件) * * @param view */ public void getUserInfo(View view) { mUserInfo = new UserInfo(this, mTencent.getQQToken()); mUserInfo.getUserInfo(new IUiListener() { @Override public void onComplete(Object object) { Log.i(TAG, "onComplete getUserInfo " + object.toString()); try { String userName = ((JSONObject) object).getString("nickname"); String imgUrl = ((JSONObject) object).getString("figureurl_qq_2"); String province = ((JSONObject) object).getString("province"); String city = ((JSONObject) object).getString("city"); Message mMessage = new Message(); Bundle bundle = new Bundle(); bundle.putString("userName", userName); bundle.putString("imgUrl", imgUrl); bundle.putString("province", province); bundle.putString("city", city); mMessage.setData(bundle); mMessage.what = 0; mHandler.sendMessage(mMessage); } catch (JSONException e) { e.printStackTrace(); } } @Override public void onError(UiError uiError) { } @Override public void onCancel() { } }); } /** * 登录成功后的回调 * 要把相应的token、expires、openId设置到mTencent * * @param requestCode * @param resultCode * @param data */ protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == Constants.REQUEST_LOGIN) { if (resultCode == Constants.ACTIVITY_OK) { Log.i("onActivityResult", data.getStringExtra("key_action")); //如果少了这句,监听器的没效果。onComplete不会执行 Tencent.handleResultData(data, new IUiListener() { @Override public void onComplete(Object object) { Log.i(TAG, "onComplete onActivityResult " + object.toString()); try { JSONObject jsonObject = new JSONObject(object.toString()); String token = jsonObject.getString(Constants.PARAM_ACCESS_TOKEN); String expires = jsonObject.getString((Constants.PARAM_EXPIRES_IN)); String openId = jsonObject.getString(Constants.PARAM_OPEN_ID); Log.i(TAG, "onComplete onActivityResult " + token); Log.i(TAG, "onComplete onActivityResult " + expires); Log.i(TAG, "onComplete onActivityResult " + openId); //设置token mTencent.setAccessToken(token, expires); //设置openid mTencent.setOpenId(openId); } catch (JSONException e) { e.printStackTrace(); } } @Override public void onError(UiError uiError) { } @Override public void onCancel() { } }); } } super.onActivityResult(requestCode, resultCode, data); } public void showMsg(String msg) { snackbar = Snackbar.make(img, msg, Snackbar.LENGTH_SHORT); snackbar.getView().setAlpha(0.5f); snackbar.show(); } /** * 按两次退出 * * @param keyCode * @param event * @return */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if (System.currentTimeMillis() - Time > 2000) { showMsg("再按一次退出程序"); Time = System.currentTimeMillis(); } else { finish(); } } return true; }}
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登录第三方应用
- 怎样在几何画板里打根号符号
- 5.17pkusc模拟赛3
- ViewPager+scrollview的水平滚动
- 产品经理必修课之互联网产品设计流程
- 公司前端开发架构改造
- Android QQ第三方登录
- DNS原理及其解析过程
- MyEclipse 2014设置自动提示
- CMFCMENUBUTTON
- ecshop开发中首次登陆增加会员积分
- C++11新特性— auto 和 decltype 区别和联系
- 启动时内存溢出问题
- iOS 当前应用所占内存和设备可用内存
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.0 版本新增序列管理