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登录结束     */
原创粉丝点击