java微博分享代码实例
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.user_center);
// 创建微博实例
mWeiboAuth =
new
WeiboAuth(
this
, Constants.APP_KEY,
Constants.REDIRECT_URL, Constants.SCOPE);
// 创建微博分享接口实例
mWeiboShareAPI = WeiboShareSDK.createWeiboAPI(
this
, Constants.APP_KEY);
// 当 Activity 被重新初始化时(该 Activity 处于后台时,可能会由于内存不足被杀掉了),
// 需要调用 {@link IWeiboShareAPI#handleWeiboResponse} 来接收微博客户端返回的数据。
// 执行成功,返回 true,并调用 {@link IWeiboHandler.Response#onResponse};
// 失败返回 false,不调用上述回调
if
(savedInstanceState !=
null
) {
mWeiboShareAPI.handleWeiboResponse(getIntent(),
this
);
}
}
/**
* 检查用户是否安装新浪微博
*/
public
void
isNotInstall() {
try
{
// 检查微博客户端环境是否正常,如果未安装微博,弹出对话框询问用户下载微博客户端
if
(mWeiboShareAPI.checkEnvironment(
true
)) {
// 注册第三方应用 到微博客户端中,注册成功后该应用将显示在微博的应用列表中。
// 但该附件栏集成分享权限需要合作申请,详情请查看 Demo 提示
mWeiboShareAPI.registerApp();
startSinaShare();
}
}
catch
(WeiboShareException e) {
e.printStackTrace();
Toast.makeText(UserCenter.
this
, e.getMessage(), Toast.LENGTH_LONG)
.show();
}
if
(dialog !=
null
) {
dialog.dismiss();
}
}
/**
* 微博认证授权回调类。 1. SSO 授权时,需要在 {@link #onActivityResult} 中调用
* {@link SsoHandler#authorizeCallBack} 后, 该回调才会被执行。 2. 非 SSO
* 授权时,当授权结束后,该回调就会被执行。 当授权成功后,请保存该 access_token、expires_in、uid 等信息到
* SharedPreferences 中。
*/
class
AuthListener
implements
WeiboAuthListener {
@Override
public
void
onComplete(Bundle values) {
// 从 Bundle 中解析 Token
mAccessToken = Oauth2AccessToken.parseAccessToken(values);
if
(mAccessToken.isSessionValid()) {
// 保存 Token 到 SharedPreferences
AccessTokenKeeper.writeAccessToken(UserCenter.
this
,
mAccessToken);
sendMessage();
}
}
@Override
public
void
onCancel() {
}
@Override
public
void
onWeiboException(WeiboException e) {
Toast.makeText(UserCenter.
this
,
"Auth exception : "
+ e.getMessage(), Toast.LENGTH_LONG)
.show();
}
}
/**
* 新浪微博用户授权
*/
public
void
startSinaShare() {
mSsoHandler =
new
SsoHandler(UserCenter.
this
, mWeiboAuth);
// 从 SharedPreferences 中读取上次已保存好 AccessToken 等信息,
mAccessToken = AccessTokenKeeper.readAccessToken(
this
);
// 如果Token有效,则直接调用发送微博
if
(mAccessToken.isSessionValid()) {
sendMessage();
}
else
{
mSsoHandler.authorize(
new
AuthListener());
}
}
/**
* @See {@link Activity#onNewIntent}
*/
@Override
protected
void
onNewIntent(Intent intent) {
super
.onNewIntent(intent);
// 从当前应用唤起微博并进行分享后,返回到当前应用时,需要在此处调用该函数
// 来接收微博客户端返回的数据;执行成功,返回 true,并调用
// {@link IWeiboHandler.Response#onResponse};失败返回 false,不调用上述回调
mWeiboShareAPI.handleWeiboResponse(intent,
this
);
}
/**
* 当 SSO 授权 Activity 退出时,该函数被调用。
*
* @see {@link Activity#onActivityResult}
*/
@Override
protected
void
onActivityResult(
int
requestCode,
int
resultCode, Intent data) {
super
.onActivityResult(requestCode, resultCode, data);
// SSO 授权回调
// 重要:发起 SSO 登陆的 Activity 必须重写 onActivityResult
if
(mSsoHandler !=
null
) {
mSsoHandler.authorizeCallBack(requestCode, resultCode, data);
}
}
/**
* 接收微客户端博请求的数据。 当微博客户端唤起当前应用并进行分享时,该方法被调用。
*
* @param baseRequest
* 微博请求数据对象
* @see {@link IWeiboShareAPI#handleWeiboRequest}
*/
@Override
public
void
onResponse(BaseResponse baseResp) {
switch
(baseResp.errCode) {
case
WBConstants.ErrorCode.ERR_OK:
if
(PublicFun.shareCondition()) {
gainBoBi();
}
else
{
Toast.makeText(
this
, R.string.share_success, Toast.LENGTH_LONG)
.show();
}
break
;
case
WBConstants.ErrorCode.ERR_CANCEL:
break
;
case
WBConstants.ErrorCode.ERR_FAIL:
Toast.makeText(
this
, R.string.errcode_deny, Toast.LENGTH_LONG)
.show();
break
;
}
if
(dialog !=
null
) {
dialog.dismiss();
}
}
/**
* 第三方应用发送请求消息到微博,唤起微博分享界面。
* @see {@link #sendMultiMessage} 或者 {@link #sendSingleMessage}
*/
private
void
sendMessage() {
if
(mWeiboShareAPI.isWeiboAppSupportAPI()) {
sendMultiMessage();
}
else
{
Toast.makeText(
this
, R.string.sina_share_hint, Toast.LENGTH_SHORT)
.show();
}
}
/**
* 第三方应用发送请求消息到微博,唤起微博分享界面。 注意:当
* {@link IWeiboShareAPI#getWeiboAppSupportAPI()} >= 10351 时,支持同时分享多条消息,
*
* @param hasText
* 分享的内容是否有文本
* @param hasImage
* 分享的内容是否有图片
* @param hasWebpage
* 分享的内容是否有网页
*/
private
void
sendMultiMessage() {
// 1. 初始化微博的分享消息
WeiboMultiMessage weiboMessage =
new
WeiboMultiMessage();
weiboMessage.textObject = getTextObj();
// 用户可以分享其它媒体资源(网页、音乐、视频、声音中的一种)
weiboMessage.mediaObject = getWebpageObj();
// 2. 初始化从第三方到微博的消息请求
SendMultiMessageToWeiboRequest request =
new
SendMultiMessageToWeiboRequest();
// 用transaction唯一标识一个请求
request.transaction = String.valueOf(System.currentTimeMillis());
request.multiMessage = weiboMessage;
// 3. 发送请求消息到微博,唤起微博分享界面
mWeiboShareAPI.sendRequest(request);
// 记录分享日志
PublicFun.sendShareAppLog(UserCenter.
this
,
getResources().getString(R.string.micro_blog));
if
(dialog !=
null
) {
dialog.dismiss();
}
}
/**
* 创建文本消息对象。
* @return 文本消息对象。
*/
private
TextObject getTextObj() {
TextObject textObject =
new
TextObject();
textObject.text = getResources().getString(R.string.share_content);
return
textObject;
}
/**
* 创建多媒体(网页)消息对象。
* @return 多媒体(网页)消息对象。
*/
private
WebpageObject getWebpageObj() {
WebpageObject mediaObject =
new
WebpageObject();
mediaObject.actionUrl = getString(R.string.share_url);
mediaObject.identify = Utility.generateGUID();
mediaObject.title = getResources().getString(R.string.share_title);
mediaObject.description = getString(R.string.share_content);
Bitmap bmp = BitmapFactory.decodeResource(getResources(),
R.drawable.icon);
mediaObject.setThumbImage(bmp);
return
mediaObject;
}
/**
* 该类定义了微博授权时所需要的参数。
* @author SINA
* @SINCE 2013-10-07
*/
public
class
AccessTokenKeeper {
private
static
final
String PREFERENCES_NAME =
"com_weibo_sdk_android"
;
private
static
final
String KEY_UID =
"uid"
;
private
static
final
String KEY_ACCESS_TOKEN =
"access_token"
;
private
static
final
String KEY_EXPIRES_IN =
"expires_in"
;
/**
* 保存 Token 对象到 SharedPreferences。
*
* @param context 应用程序上下文环境
* @param token Token 对象
*/
public
static
void
writeAccessToken(Context context, Oauth2AccessToken token) {
if
(
null
== context ||
null
== token) {
return
;
}
SharedPreferences pref = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_APPEND);
Editor editor = pref.edit();
editor.putString(KEY_UID, token.getUid());
editor.putString(KEY_ACCESS_TOKEN, token.getToken());
editor.putLong(KEY_EXPIRES_IN, token.getExpiresTime());
editor.commit();
}
/**
* 从 SharedPreferences 读取 Token 信息。
*
* @param context 应用程序上下文环境
*
* @return 返回 Token 对象
*/
public
static
Oauth2AccessToken readAccessToken(Context context) {
if
(
null
== context) {
return
null
;
}
Oauth2AccessToken token =
new
Oauth2AccessToken();
SharedPreferences pref = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_APPEND);
token.setUid(pref.getString(KEY_UID,
""
));
token.setToken(pref.getString(KEY_ACCESS_TOKEN,
""
));
token.setExpiresTime(pref.getLong(KEY_EXPIRES_IN,
0
));
return
token;
}
/**
* 清空 SharedPreferences 中 Token信息。
*
* @param context 应用程序上下文环境
*/
public
static
void
clear(Context context) {
if
(
null
== context) {
return
;
}
SharedPreferences pref = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_APPEND);
Editor editor = pref.edit();
editor.clear();
editor.commit();
}
}
java微博分享代码实例相关推荐
- java实现微博_java实现的新浪微博分享代码实例
weibo.java @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstan ...
- java 代码压缩javascript_通过Java压缩JavaScript代码实例分享
通过移除空行和注释来压缩 javascript 代码 /** * this file is part of the echo web application framework (hereinafte ...
- java 调用window程序_Windows下Java调用可执行文件代码实例
这篇文章主要介绍了Windows下Java调用可执行文件代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 缘起: 由于没有找到java转换文件 ...
- python爬取微博评论点赞数_Python selenium爬取微博数据代码实例
爬取某人的微博数据,把某人所有时间段的微博数据都爬下来. 具体思路: 创建driver-–get网页--找到并提取信息-–保存csv--翻页--get网页(开始循环)-----没有"下一页& ...
- 基于java斗地主设计报告_基于java实现斗地主代码实例解析
斗地主 规则: 1. 组装54张扑克牌 2. 将54张牌顺序打乱 3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌. 4. 查看三人各自手中的牌(按照牌的大小排序).底牌 手中扑克 ...
- java斗地主代码_基于java实现斗地主代码实例解析
斗地主 规则: 1. 组装54张扑克牌 2. 将54张牌顺序打乱 3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌. 4. 查看三人各自手中的牌(按照牌的大小排序).底牌 手中扑克 ...
- php 发微博实例,基于PHP实现发微博动态代码实例
首先,肯定是注册成为 选择网站应用,填写一些基本信息 填完后在'我的应用'中,会看到刚创建的应用信息,我们只是简单的测试一下,所以其他复杂的注册信息都不用填写,有这些就够了 很重要的一点,回调地址填写 ...
- java 斗地主_基于java实现斗地主代码实例解析
斗地主 规则: 1. 组装54张扑克牌 2. 将54张牌顺序打乱 3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌. 4. 查看三人各自手中的牌(按照牌的大小排序).底牌 手中扑克 ...
- 判断素数的java程序_Java代码实例 判断这个数是否是素数
import java.util.Scanner; /* 7.1:判断数字是否为素数(时间:20分钟) 7.1.1 任务描述 写一个程序,由用户输入一个整数,判断这个数是否是素数(素数:只能被1和本身 ...
- 分享到QQ空间、新浪微博、腾讯微博的代码!(收藏)
1.QQ空间分享说明 http://connect.qq.com/intro/share/ 2. QQ空间分享代码如下:<ahref="javascript:void(0);" ...
最新文章
- 没附上语音包资源的python文字转语音
- OTA常见方案分析(差分升级 全量升级 AB面升级 Recovery系统升级)
- python使用教程pandas-Python之Pandas使用教程
- 【Java 虚拟机原理】线程栈 | 栈帧 | 局部变量表 | 反汇编字节码文件 | Java 虚拟机指令手册 | 程序计数器
- windows mobile开发循序渐进(5)移动应用程序与webservice之间的数据交互
- Jasypt 加密-引言
- java isempty_Optional.isEmpty()即将加入Java吗?
- webservice引用spring的bean
- java的et5_Javascript与java相同的3des加密(使用etdesede/CBC/PKCS5Padding )
- 201521123062《Java程序设计》第10周学习总结
- Java 1.1.3 修改字符串、不可变字符串
- UNICODE_STRING__ZC
- MySQL数据库篇之索引原理与慢查询优化之一
- waterfall 上拉加载 下拉刷新
- 三角形周长最短问题_三角形周长最短的动点问题
- maven的pom出现cannot reconnect错误
- [高数][高昆轮][高等数学上][第一章-函数与极限]07.无穷小的比较
- python循环结构教学设计_Python程序设计 循环结构说课稿
- R语言——(六)、线性回归模型
- redis 的incr 高并发 原子性计数器
热门文章
- Java Swing制作古老的打砖块游戏
- 根域名服务器作用,域名系统的主要功能是什么?域名系统中的本地域名服务器、根域名服务器、顶级域名 - 问答库...
- 提高你修养的100句话
- 计算机管理员禁用teredo怎么解决,计算机管理员已在本地禁用teredo什么意思
- python与数据思维基础笔记第一章_python学习笔记-第1章节 基础知识
- bufferedimage 保存图片_如何提取图片中的文字
- html设置文字在背景图上,css如何实现文字在背景图片之上 css实现文字在背景图片之上代码...
- 用计算机制作演示文稿教案博客,《创作演示文稿》教学设计
- TSMaster1.4.2补丁包发布
- js、html实现断点播放视频,视频资源在localStorage中