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