QQ登录+分享+空间分享
添加权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- SDK2.1新增获取用户位置信息 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.GET_TASKS"/>
在<application></application>添加下面代码
<activity
android:name="com.tencent.open.yyb.AppbarActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activity android:name="com.tencent.connect.avatar.ImageActivity" />
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="behind"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<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="tencent1106062414" />
<!--应用的AppId要相同-->
</intent-filter>
</activity>
创建一个User类
public class User {
private int ret;
private String msg;
private int is_lost;
private String nickname;
private String gender;
private String province;
private String city;
private String figureurl;
private String figureurl_1;
private String figureurl_2;
private String figureurl_qq_1;
private String figureurl_qq_2;
private String is_yellow_vip;
private String vip;
private String yellow_vip_level;
private String level;
private String is_yellow_year_vip;
public int getRet() {
return ret;
}
public void setRet(int ret) {
this.ret = ret;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public int getIs_lost() {
return is_lost;
}
public void setIs_lost(int is_lost) {
this.is_lost = is_lost;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getFigureurl() {
return figureurl;
}
public void setFigureurl(String figureurl) {
this.figureurl = figureurl;
}
public String getFigureurl_1() {
return figureurl_1;
}
public void setFigureurl_1(String figureurl_1) {
this.figureurl_1 = figureurl_1;
}
public String getFigureurl_2() {
return figureurl_2;
}
public void setFigureurl_2(String figureurl_2) {
this.figureurl_2 = figureurl_2;
}
public String getFigureurl_qq_1() {
return figureurl_qq_1;
}
public void setFigureurl_qq_1(String figureurl_qq_1) {
this.figureurl_qq_1 = figureurl_qq_1;
}
public String getFigureurl_qq_2() {
return figureurl_qq_2;
}
public void setFigureurl_qq_2(String figureurl_qq_2) {
this.figureurl_qq_2 = figureurl_qq_2;
}
public String getIs_yellow_vip() {
return is_yellow_vip;
}
public void setIs_yellow_vip(String is_yellow_vip) {
this.is_yellow_vip = is_yellow_vip;
}
public String getVip() {
return vip;
}
public void setVip(String vip) {
this.vip = vip;
}
public String getYellow_vip_level() {
return yellow_vip_level;
}
public void setYellow_vip_level(String yellow_vip_level) {
this.yellow_vip_level = yellow_vip_level;
}
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level;
}
public String getIs_yellow_year_vip() {
return is_yellow_year_vip;
}
public void setIs_yellow_year_vip(String is_yellow_year_vip) {
this.is_yellow_year_vip = is_yellow_year_vip;
}
}
在main 方法里写:
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.google.gson.Gson;
import com.squareup.picasso.Picasso;
import com.tencent.connect.UserInfo;
import com.tencent.connect.common.Constants;
import com.tencent.connect.share.QQShare;
import com.tencent.connect.share.QzoneShare;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.Tencent;
import com.tencent.tauth.UiError;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
TextView tv_name;
TextView tv_content;
ImageView imageView;
private UserInfo mInfo;
public static Tencent mTencent;
public static String mAppid="1106062414";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView()
{
tv_name= (TextView) findViewById(R.id.name);
tv_content= (TextView) findViewById(R.id.content);
imageView= (ImageView) findViewById(R.id.user_logo);
findViewById(R.id.new_login_btn).setOnClickListener(this);
findViewById(R.id.new_login_close).setOnClickListener(this);
findViewById(R.id.new_login_shareqq).setOnClickListener(this);
findViewById(R.id.new_login_shareqzone).setOnClickListener(this);
if (mTencent == null) {
mTencent = Tencent.createInstance(mAppid, this);
}
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.new_login_btn:
onClickLogin();
break;
case R.id.new_login_close:
mTencent.logout(MainActivity.this);//注销登录
break;
case R.id.new_login_shareqq:
onClickShare();
break;
case R.id.new_login_shareqzone:
shareToQQzone();
break;
}
}
/**
* 继承的到BaseUiListener得到doComplete()的方法信息
*/
IUiListener loginListener = new BaseUiListener() {
@Override
protected void doComplete(JSONObject values) {//得到用户的ID 和签名等信息 用来得到用户信息
Log.i("lkei",values.toString());
initOpenidAndToken(values);
updateUserInfo();
}
};
/***
* QQ平台返回返回数据个体 loginListener的values
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == Constants.REQUEST_LOGIN ||
requestCode == Constants.REQUEST_APPBAR) {
Tencent.onActivityResultData(requestCode,resultCode,data,loginListener);
}
super.onActivityResult(requestCode, resultCode, data);
}
private class BaseUiListener implements IUiListener {
@Override
public void onComplete(Object response) {
if (null == response) {
Toast.makeText(MainActivity.this, "登录失败",Toast.LENGTH_LONG).show();
return;
}
JSONObject jsonResponse = (JSONObject) response;
if (null != jsonResponse && jsonResponse.length() == 0) {
Toast.makeText(MainActivity.this, "登录失败",Toast.LENGTH_LONG).show();
return;
}
Toast.makeText(MainActivity.this, "登录成功",Toast.LENGTH_LONG).show();
doComplete((JSONObject)response);
}
protected void doComplete(JSONObject values) {
}
@Override
public void onError(UiError e) {
//登录错误
}
@Override
public void onCancel() {
// 运行完成
}
}
/**
* 获取登录QQ腾讯平台的权限信息(用于访问QQ用户信息)
* @param jsonObject
*/
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) {
}
}
private void onClickLogin() {
if (!mTencent.isSessionValid()) {
mTencent.login(this, "all", loginListener);
}
}
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;
Log.i("tag", response.toString());
msg.what = 0;
mHandler.sendMessage(msg);
}
@Override
public void onCancel() {
}
};
mInfo = new UserInfo(this, mTencent.getQQToken());
mInfo.getUserInfo(listener);
}
}
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 0) {
JSONObject response = (JSONObject) msg.obj;
if (response.has("nickname")) {
try {
Gson gson=new Gson();
User user=gson.fromJson(response.toString(),User.class);
if (user!=null) {
tv_name.setText("昵称:"+user.getNickname()+" 性别:"+user.getGender()+" 地址:"+user.getProvince()+user.getCity());
tv_content.setText("头像路径:"+user.getFigureurl_qq_2());
Picasso.with(MainActivity.this).load(response.getString("figureurl_qq_2")).into(imageView);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
};
//qq分享
private void onClickShare() {
final Bundle params = new Bundle();
params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE,
QQShare.SHARE_TO_QQ_TYPE_DEFAULT);
params.putString(QQShare.SHARE_TO_QQ_TITLE, "要分享的标题");
params.putString(QQShare.SHARE_TO_QQ_SUMMARY, "要分享的摘要");
params.putString(QQShare.SHARE_TO_QQ_TARGET_URL,
"http://blog.csdn.net/DickyQie/article/list/1");
params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL,
"http://imgcache.qq.com/qzone/space_item/pre/0/66768.gif");
params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "切切歆语");
params.putString(QQShare.SHARE_TO_QQ_EXT_INT, "其他附加功能");
mTencent.shareToQQ(MainActivity.this, params, new BaseUiListener1());
}
//回调接口 (成功和失败的相关操作)
private class BaseUiListener1 implements IUiListener {
@Override
public void onComplete(Object response) {
doComplete(response);
}
protected void doComplete(Object values) {
}
@Override
public void onError(UiError e) {
}
@Override
public void onCancel() {
}
}
@SuppressWarnings("unused")
private void shareToQQzone() {
try {
final Bundle params = new Bundle();
params.putInt(QzoneShare.SHARE_TO_QZONE_KEY_TYPE,
QzoneShare.SHARE_TO_QZONE_TYPE_IMAGE_TEXT);
params.putString(QzoneShare.SHARE_TO_QQ_TITLE, "切切歆语");
params.putString(QzoneShare.SHARE_TO_QQ_SUMMARY, "sss");
params.putString(QzoneShare.SHARE_TO_QQ_TARGET_URL,
"http://blog.csdn.net/DickyQie/article/list/1");
ArrayList<String> imageUrls = new ArrayList<String>();
imageUrls.add("http://media-cdn.tripadvisor.com/media/photo-s/01/3e/05/40/the-sandbar-that-links.jpg");
params.putStringArrayList(QzoneShare.SHARE_TO_QQ_IMAGE_URL, imageUrls);
params.putInt(QzoneShare.SHARE_TO_QQ_EXT_INT,
QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN);
Tencent mTencent = Tencent.createInstance("1106062414",
MainActivity.this);
mTencent.shareToQzone(MainActivity.this, params,
new BaseUiListener1());
} catch (Exception e) {
}
}
}
mian布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.zq.qqsignandshare.MainActivity">
<Button
android:id="@+id/new_login_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="QQ登录"
/>
<Button
android:id="@+id/new_login_close"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="退出登录"
/>
<Button
android:id="@+id/new_login_shareqq"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="QQ分享"
/>
<Button
android:id="@+id/new_login_shareqzone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="QQ空间分享"
/>
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="用户名:"
android:layout_marginTop="5dp"
/>
<ImageView
android:id="@+id/user_logo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"
android:layout_marginTop="15dp"
/>
<TextView
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="用户详细信息:"
android:layout_marginTop="15dp"
/>
</LinearLayout>
最后最重要的有4个jar 可以找我要的!QQ:1250897947
QQ登录+分享+空间分享相关推荐
- java swing qq_使用java swing实现qq登录界面示例分享
用Java Swing做的一个QQ登录界面 import java.awt.Container; import java.awt.Image; import java.awt.event.Action ...
- 友盟QQ好友或者空间分享成功,但回调失败或取消
2019独角兽企业重金招聘Python工程师标准>>> 出现这种情况的原因是代码中配置的QQ的AppID和Manifest中配置的不一致,如图,后面这串数字就是在腾讯开放平台申请的A ...
- java仿qq登录 界面设计,Java Swing仿QQ登录界面效果
本文实例为大家分享了Java Swing仿QQ登录界面展示的具体代码,供大家参考,具体内容如下 闲来无事将早些时候已实现的QQ登录界面再实现了一遍,纯手工打造(意思是没有用NetBeans.MyEcl ...
- java 登录qq空间_Android中集成QQ登陆和QQ空间分享
本文基于QQ open sdk V2.4.1. QQ登录应用有一个地方是需要注意的, QQ申请同一品牌应用(包括网站和app),需要相互依赖申请,因为在QQ互联中,一个应用对应一个app key,如果 ...
- qq接入和分享android,Android社交登录授权、分享SDK,支持微信、微博和QQ
社交登录授权,分享SDK 支持微信.微博.QQ登录授权 微信好友.微信朋友圈.微博.QQ好友.QQ空间分享 Gradlecompile 'com.elbbbird.android:socialsdk: ...
- android QQ分享、QQ空间分享
登录腾讯开放平台注册开发者账号并登录: 登陆后,点击右上角用户头像展开菜单,选择管理中心: 管理中心.png 进入管理中心后,在安卓应用界面点击创建应用按钮,填写对应的应用信息提交审核后完成应用的创建 ...
- 关于Android如何集成QQ登录及分享
首先去友盟进行下载压缩包 然后使用友盟集成工具 将umeng_integratetool_result里的东西拷贝到工程中 新建一个app继承Application,去清单文件里面注册 在oncrea ...
- Android中集成QQ登陆和QQ空间分享
本文基于QQ open sdk V2.4.1. QQ登录应用有一个地方是需要注意的, QQ申请同一品牌应用(包括网站和app),需要相互依赖申请,因为在QQ互联中,一个应用对应一个app key,如果 ...
- Android开发QQ登陆、分享、空间分享及回调处理 不回调问题的处理
首先是看 qq互联里面的文档 按文档操作:qqsdk移动应用接入流程 按照这个流程一步一步来就是了.基本上没的错误的.但还是有些很坑的地方.这里列举一些. 接下来 一.首先是qq登陆. 下载sd ...
最新文章
- Kubernetes 稳定性保障手册 -- 可观测性专题
- error.html mp4,HTML Video error用法及代码示例
- 基于ArcSDE、Oralce空间数据库冷备份与恢复
- pytorch argmax_轻松学Pytorch使用ResNet50实现图像分类
- 1.11 神经网络的权重初始化
- 矩池云通过本地端口转发方式登陆VNC
- ASP.NET和ASP程序防止在IE中进行缓存
- 创建库文件c语言,创建自己的函数库
- 【官方文档】Fluent Bit 安装
- 沉云架路,边缘先锋—中国联通5G边缘先锋团队2020年交付纪实
- 流程:论文发表的流程
- 中文短信PDU包格式生成工具
- 第一次搭建ftp遇见的蹩脚的问题
- 【2018】【论文笔记】最后一米太赫——
- 清北毕业生5年来去向大数据:北大偏爱银行,清华更倾向国网,华为堪称最大黑洞-1
- 【OpenCV图像处理】五、图像的几何变换(下)
- 【学习笔记】Python之 pdf 下载、合并
- iOS:创建Siri 功能
- 如何:获取对 DTE 和 DTE2 对象的引用
- 项目实训 - 智能车系统 - 第七周记录
热门文章
- 利用python爬取租房信息_Python爬虫实战(1)-爬取“房天下”租房信息(超详细)
- 三个bypass案例分享
- 基于IPC$的横向移动
- C#winform 从ftp下载文件(带进度条)、获取文件(夹)的名字
- 零基础Bootstrap入门教程(25)--折叠面板、折叠面板导航
- 非常不错的css滑动门效果网页选项卡代码
- QQ API 接口
- 如果你要读一本真正普及“人工智能”的读物 | 赠书
- linux下 redis如何清空缓存
- 那些著名的软件都是用什么语言编写的?