java实现微博_java实现的新浪微博分享代码实例
weibo.java
@override
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 处于后台时,可能会由于内存不足被杀掉了),
// 需要调用 iweiboshareapi#handleweiboresponse} 来接收微博客户端返回的数据。
// 执行成功,返回 true,并调用 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 授权时,需要在 #onactivityresult} 中调用
* 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 activity#onnewintent}
*/
@override
protected void onnewintent(intent intent) {
super.onnewintent(intent);
// 从当前应用唤起微博并进行分享后,返回到当前应用时,需要在此处调用该函数
// 来接收微博客户端返回的数据;执行成功,返回 true,并调用
// iweibohandler.response#onresponse};失败返回 false,不调用上述回调
mweiboshareapi.handleweiboresponse(intent, this);
}
/**
* 当 sso 授权 activity 退出时,该函数被调用。
*
* @see 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 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 #sendmultimessage} 或者 #sendsinglemessage}
*/
private void sendmessage() {
if (mweiboshareapi.isweiboappsupportapi()) {
sendmultimessage();
} else {
toast.maketext(this, r.string.sina_share_hint, toast.length_short)
.show();
}
}
/**
* 第三方应用发送请求消息到微博,唤起微博分享界面。 注意:当
* 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实现的新浪微博分享代码实例相关推荐
- java 页面查询_JAVA页面浏览量查询api调用代码实例
代码描述:基于JAVA页面浏览量查询api调用代码实例 接口地址:http://www.juhe.cn/docs/api/id/51 1.[代码][Java]代码 import java.io.Buf ...
- java信号量源代码_Java信号量Semaphore原理及代码实例
Semaphore 通常用于限制可以访问某些资源(物理或逻辑的)的线程数目.自从5.0开始,jdk在java.util.concurrent包里提供了Semaphore 的官方实现,因此大家不需要自己 ...
- java map类型转换_Java string类型转换成map代码实例
背景:有时候string类型的数据取出来是个很标准的key.value形式,通过Gson的可以直接转成map 使用方式: Gson gson = new Gson(); Map map = new H ...
- JAVA 油站管理系统_基于JAVA的全国加油站[实时油价]接口调用代码实例
代码描述:基于JAVA的全国加油站[实时油价]接口调用代码实例 接口地址:https://www.juhe.cn/docs/api/id/7 1.[代码][Java]代码 import java.io ...
- 直播api接口java_基于JAVA的电视台直播节目时间表api调用代码实例
代码描述:基于JAVA的电视台直播节目时间表api调用代码实例 接口地址:http://www.juhe.cn/docs/api/id/129 1.[代码][Java]代码 import java.i ...
- java 获取邮编_基于JAVA的根据地名查邮编api调用代码实例
代码描述:基于JAVA的根据地名查邮编api调用代码实例 接口地址:http://www.juhe.cn/docs/api/id/66 1.[代码][Java]代码 import java.io.Bu ...
- 获得周公解梦数据接口java_基于JAVA的免费周公解梦接口调用代码实例
代码描述:基于JAVA的免费周公解梦接口调用代码实例 接口地址:http://www.juhe.cn/docs/api/id/64 1.[代码][Java]代码 import java.io.Buff ...
- Java计算文章多少字_java计算中文字数的代码实例
这篇文章主要介绍了java统计汉字字数的方法,结合实例形式分析了java正则判定.字符串遍历及统计相关操作技巧,需要的朋友可以参考下 本文实例讲述了java统计汉字字数的方法.分享给大家供大家参考,具 ...
- java打开浏览器_Java调用浏览器打开网页完整实例
这篇文章主要介绍了Java调用浏览器打开网页的方法,以完整实例形式分析了java打开网页的相关技巧,需要的朋友可以参考下 本文实例讲述了Java调用浏览器打开网页的方法.分享给大家供大家参考.具体实现 ...
最新文章
- HTML基础笔记-02
- 内联函数与普通函数、成员函数与静态函数的区别(知识整理)
- redis内存行数据库细节
- maven profile实现多环境构建 (单项目多套配置)
- 1622C. Set or Decrease
- 小米自然语言处理工程师招聘条件与自己的对应整理(第二次更新)
- ubuntu11.04下如何发送文件到U盘如何添加发送文件到U盘的右键菜单
- Android Realm(数据库)
- C# 从入门到精通 学习笔记2 第3章 方法和作用域
- android手机 ipad 同屏,iphone和ipad
- 微信社群运营是什么,如何做好社群运营?
- arduino 操纵杆_使用Arduino Leonardo开发板制作操纵杆游戏控制器
- python判断对错题_Python爬虫自动化获取华图和粉笔网站的错题(推荐)
- 注册github一直显示验证码错误的问题
- 更改分辨率时banner图片变形解决方案
- 在java中jkd中文意思_Java JDK是什么意思?有什么作用?
- xampp mysql远程连接_远程访问xampp
- MySQL--死锁的原因及解决方法
- 基于Spring Boot的教学论坛系统中回复功能的实现
- 量化交易策略 趋势跟踪
热门文章
- API监控平台,统一监控系统API
- 新鲜出炉的连连看连接算法Python版
- 快递企业如何完成运单订阅消息的推送
- 论文写作之查找中文对应的英文标题引用格式
- 有关老年计算机培训的报道,深晚报道|教老年人使用智能手机 南澳开展“智能时代,乐享生活”培训活动...
- 报表在linux下部署后中文变成小方块
- Bootstrap CSS Layout (1) - Breakpoint
- SpringBoot banner图样
- nus计算机和iss学院,走进新加坡国立大学系统科学院
- DeFi 入门必备:你需要了解的 DeFi 重要词语