admin管理员组文章数量:1646326
很多人看到这篇博客可能会吐槽,官方不是已经写出开发文档,你在写一个不是照抄么?
由于昨天在开发项目中用到三方登录,以前认为很简单 有官方文档应该开启起来很容易,结果大家肯定猜到了,我用了一下午的时间才将三方登陆勉强完成。本人认为官方文档有些地方写的不清不楚(或者是我理解能力有限)。下两篇博客我将写一下微信、新浪微博登陆。
先放置效果图
1、我们应该下载腾讯官方的SDK
下载地址:http://wiki.open.qq/wiki/mobile/SDK下载
下载完之后里面还有Sample例子,基础比较好同学可以尝试观看一下。
2、Android Studio环境配置
首先我们先创建一个Android工程,将下载解压的中的jar文件全部拷贝到libs目录下,不要忘记右键Add as Library,
在AndroidManifest中添加必要的数据
权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
在application节点中添加
<activity
android:name="com.tencent.tauth.AuthActivity"
android:noHistory="true"
android:launchMode="singleTask" >
<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="tencent222222" />
</intent-filter>
</activity>
如果您下载的版本为SDK_V2.0以上的还需要添加
<activity
android:name="com.tencent.connectmon.AssistActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden|screenSize"
/>
其中APPId为用户在腾讯开放平台创建App,系统给你分配的。我使用的是腾讯测试的APPId这个比较简单就不详细说了,不会的留言或者私信。
3、Activity的逻辑编写
如果上面环境配置成功,下面开始实现逻辑,首先展示一下我的布局,比较简单就一个简单的Button
<LinearLayout
xmlns:android="http://schemas.android/apk/res/android"
xmlns:tools="http://schemas.android/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.lx.qqlogin.MainActivity">
<ImageView
android:id="@+id/iv_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@mipmap/ic_launcher"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="login"
android:text="登 录"/>
<TextView
android:id="@+id/tv_result"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
MainActivity中的代码如下;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private Tencent mTencent;
private TextView mTvResult;
private ImageView mIvIcon;
private Context mContext;
private String nicknameString;
private String openidString;
private Bitmap bitmap;
private String APP_ID = "222222";
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 0) {
JSONObject response = (JSONObject) msg.obj;
if (response.has("nickname")) {
try {
nicknameString = response.getString("nickname");
mTvResult.setText("QQ名:" + nicknameString);
} catch (JSONException e) {
e.printStackTrace();
}
}
} else if (msg.what == 1) {
Bitmap bitmap = (Bitmap) msg.obj;
mIvIcon.setImageBitmap(bitmap);
}
}
};
private Button mBtn_login;
private Button mBtn_logout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = this;
initUI();
}
/**
* 初始化UI控件
*/
private void initUI() {
mTvResult = (TextView) findViewById(R.id.tv_result);
mIvIcon = (ImageView) findViewById(R.id.iv_icon);
}
//按钮的点击事件
public void login(View view) {
mTencent = Tencent.createInstance(APP_ID, mContext);
mTencent.login(this, "all", new BaseUiListener());
}
/**
* 当自定义的监听器实现IUiListener接口后,必须要实现接口的三个方法,
* onComplete onCancel onError
* 分别表示第三方登录成功,取消 ,错误。
*/
private class BaseUiListener implements IUiListener {
public void onCancel() {
}
public void onComplete(Object response) {
try {
//获得的数据是JSON格式的,获得你想获得的内容
//如果你不知道你能获得什么,看一下下面的LOG
openidString = ((JSONObject) response).getString("openid");
} catch (JSONException e) {
e.printStackTrace();
}
/**到此已经获得OpneID以及其他你想获得的内容了
QQ登录成功了,我们还想获取一些QQ的基本信息,比如昵称,头像什么的,这个时候怎么办?
sdk给我们提供了一个类UserInfo,这个类中封装了QQ用户的一些信息,我么可以通过这个类拿到这些信息
如何得到这个UserInfo类呢? */
QQToken qqToken = mTencent.getQQToken();
UserInfo info = new UserInfo(mContext, qqToken);
//这样我们就拿到这个类了,之后的操作就跟上面的一样了,同样是解析JSON
info.getUserInfo(new IUiListener() {
public void onComplete(final Object response) {
mHandler.obtainMessage(0, response).sendToTarget();
/**由于图片需要下载所以这里使用了线程,如果是想获得其他文字信息直接在mHandler里进行操作*/
new Thread() {
@Override
public void run() {
JSONObject json = (JSONObject) response;
Log.e(TAG, json.toString());
try {
bitmap = Util.getbitmap(json.getString("figureurl_qq_2"));
} catch (JSONException e) {
e.printStackTrace();
}
mHandler.obtainMessage(1, bitmap).sendToTarget();
}
}.start();
}
@Override
public void onError(UiError uiError) {
}
public void onCancel() {
}
});
}
public void onError(UiError arg0) {
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Tencent.onActivityResultData(requestCode, resultCode, data, new BaseUiListener());
}
}
4、利用Util获取用户QQ的头像,使用的是HttpURLConnection,你们也可以使用Xutils、OkHttp等。Util代码如下:
public class Util {
public static String TAG = "UTIL";
public static Bitmap getbitmap(String imageUri) {
Log.v(TAG, "getbitmap:" + imageUri);
// 显示网络上的图片
Bitmap bitmap = null;
try {
URL myFileUrl = new URL(imageUri);
HttpURLConnection conn = (HttpURLConnection) myFileUrl
.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(is);
is.close();
Log.v(TAG, "image download finished." + imageUri);
} catch (IOException e) {
e.printStackTrace();
Log.v(TAG, "getbitmap bmp fail---");
return null;
}
return bitmap;
}
}
看到这里已经接近尾声。 如果有任何疑问或者本人哪里出现错误,请大家指出,你们的支持是我最大动力,谢谢您的观看。
版权声明:本文标题:Android实现QQ登录(Android Studio开发) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1729446024a1201413.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论