Android实现微博分享及其注意事项
在前面我写了两篇关于QQ和微信的分享(http://blog.csdn.net/dawanganban/article/details/42015249)(http://blog.csdn.net/dawanganban/article/details/40478317)这一篇我们来看以怎样实现微博分享功能。
微博的參考文档在开放平台上转悠了半天,没有找到,终于才惊奇的发如今SDK的Demo中。还是我的老思路,遇到这样的第三方接入的最快最好的入手点就是入门文档和官方Demo,打开Demo我们就会看到相关文档和源代码,因为前面的APPID的申请和QQ、微信差点儿相同,所以我在这里就不反复了,能够參考一下上面的两篇文章。接下来我就将我封装好的源代码粘出来例如以下:
public class SinaShareManager{
/**
* 文字
*/
public static final int SINA_SHARE_WAY_TEXT = 1;
/**
* 图片
*/
public static final int SINA_SHARE_WAY_PIC = 2;
/**
* 链接
*/
public static final int SINA_SHARE_WAY_WEBPAGE = 3; private static String sinaAppKey;
public static final String SCOPE =
"email,direct_messages_read,direct_messages_write,"
+ "friendships_groups_read,friendships_groups_write,statuses_to_me_read,"
+ "follow_app_official_microblog," + "invitation_write";
/** 微博分享的接口实例 */
private IWeiboShareAPI sinaAPI; public void registSina(Context context){
//获取appkey
if(sinaAppKey == null){
sinaAppKey = SinaShareUtil.getSinaAppKey(context);
}
//初始化微博分享代码
if(sinaAppKey != null){
initSinaShare(context);
}
} /**
* 新浪微博分享方法
* @param shareContent 分享的内容
*/
public void shareBySina(ShareContent shareContent, Context context){
if(sinaAPI == null) return;
switch (shareContent.getShareWay()) {
case SINA_SHARE_WAY_TEXT:
shareText(shareContent);
break;
case SINA_SHARE_WAY_PIC:
sharePicture(shareContent, context);
break;
case SINA_SHARE_WAY_WEBPAGE:
shareWebPage(shareContent, context);
break;
}
} /*
* 分享文字
*/
private void shareText(ShareContent shareContent){
//初始化微博的分享消息
WeiboMessage weiboMessage = new WeiboMessage();
weiboMessage.mediaObject = getTextObj(shareContent.getContent());
//初始化从第三方到微博的消息请求
SendMessageToWeiboRequest request = new SendMessageToWeiboRequest();
request.transaction = buildTransaction("sinatext");
request.message = weiboMessage;
//发送请求信息到微博,唤起微博分享界面
sinaAPI.sendRequest(request);
} /*
* 分享图片
*/
private void sharePicture(ShareContent shareContent, Context context){
WeiboMessage weiboMessage = new WeiboMessage();
weiboMessage.mediaObject = getImageObj(shareContent.getPicResource(), context);
//初始化从第三方到微博的消息请求
SendMessageToWeiboRequest request = new SendMessageToWeiboRequest();
request.transaction = buildTransaction("sinatext");
request.message = weiboMessage;
//发送请求信息到微博,唤起微博分享界面
sinaAPI.sendRequest(request);
} private void shareWebPage(ShareContent shareContent, Context context){
WeiboMessage weiboMessage = new WeiboMessage();
weiboMessage.mediaObject = getWebpageObj(shareContent, context);
//初始化从第三方到微博的消息请求
SendMessageToWeiboRequest request = new SendMessageToWeiboRequest();
request.transaction = buildTransaction("sinatext");
request.message = weiboMessage;
//发送请求信息到微博,唤起微博分享界面
sinaAPI.sendRequest(request);
} /**
* 欢迎关注-阳光小强-http://blog.csdn.net/dawanganban
* @author lixiaoqiang
*
*/
private abstract class ShareContent{
protected abstract int getShareWay();
protected abstract String getContent();
protected abstract String getTitle();
protected abstract String getURL();
protected abstract int getPicResource();
} /**
* 设置分享文字的内容
* @author Administrator
*
*/
public class ShareContentText extends ShareContent{
private String content; /**
* 构造分享文字类
* @param text 分享的文字内容
*/
public ShareContentText(String content){
this.content = content;
} @Override
protected String getContent() { return content;
} @Override
protected String getTitle() {
return null;
} @Override
protected String getURL() {
return null;
} @Override
protected int getPicResource() {
return -1;
} @Override
protected int getShareWay() {
return SINA_SHARE_WAY_TEXT;
} } /**
* 设置分享图片的内容
* @author Administrator
*
*/
public class ShareContentPic extends ShareContent{
private int picResource;
public ShareContentPic(int picResource){
this.picResource = picResource;
} @Override
protected String getContent() {
return null;
} @Override
protected String getTitle() {
return null;
} @Override
protected String getURL() {
return null;
} @Override
protected int getPicResource() {
return picResource;
} @Override
protected int getShareWay() {
return SINA_SHARE_WAY_PIC;
}
} /**
* 设置分享链接的内容
* @author Administrator
*
*/
public class ShareContentWebpage extends ShareContent{
private String title;
private String content;
private String url;
private int picResource;
public ShareContentWebpage(String title, String content,
String url, int picResource){
this.title = title;
this.content = content;
this.url = url;
this.picResource = picResource;
} @Override
protected String getContent() {
return content;
} @Override
protected String getTitle() {
return title;
} @Override
protected String getURL() {
return url;
} @Override
protected int getPicResource() {
return picResource;
} @Override
protected int getShareWay() {
return SINA_SHARE_WAY_WEBPAGE;
} } /**
* 创建文本消息对象。 *
* @return 文本消息对象。
*/
private TextObject getTextObj(String text) {
TextObject textObject = new TextObject();
textObject.text = text;
return textObject;
} private ImageObject getImageObj(int picResource, Context context){
ImageObject imageObject = new ImageObject();
Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), picResource);
imageObject.setImageObject(bmp);
return imageObject;
} private WebpageObject getWebpageObj(ShareContent shareContent, Context context){
WebpageObject mediaObject = new WebpageObject();
mediaObject.identify = Utility.generateGUID();
mediaObject.title = shareContent.getTitle();
mediaObject.description = shareContent.getContent(); // 设置 Bitmap 类型的图片到视频对象里
Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), shareContent.getPicResource());
mediaObject.setThumbImage(bmp);
mediaObject.actionUrl = shareContent.getURL();
mediaObject.defaultText = shareContent.getContent();
return mediaObject;
} private void initSinaShare(Context context){
// 创建微博 SDK 接口实例
sinaAPI = WeiboShareSDK.createWeiboAPI(context, sinaAppKey);
//检查版本号支持情况
checkSinaVersin(context);
sinaAPI.registerApp();
} private void checkSinaVersin(final Context context) {
// 获取微博client相关信息,如是否安装、支持 SDK 的版本号
boolean isInstalledWeibo = sinaAPI.isWeiboAppInstalled();
//int supportApiLevel = sinaAPI.getWeiboAppSupportAPI(); // 假设未安装微博client,设置下载微博相应的回调
if (!isInstalledWeibo) {
sinaAPI.registerWeiboDownloadListener(new IWeiboDownloadListener() {
@Override
public void onCancel() {
Toast.makeText(context,
"取消下载",
Toast.LENGTH_SHORT).show();
}
});
}
} private String buildTransaction(final String type) {
return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
}
}
如有疑问能够提出或者加入博客旁边的QQ群进行交流。希望这三篇文章对大家有所帮助。
Android实现微博分享及其注意事项的更多相关文章
- Android实现微信分享及注意事项
一.获取帮助文档并下载相关资料 首先打开微信开放平台:https://open.weixin.qq.com/ 如果没有注册,请先注册并上传开发者资料等待审核. 资源中心----移动应用开发----分享 ...
- android shareSDK 微博分享案例
android shareSDK 微博分享案例 ShareSDK APP_KEY 219b1121fc68 腾讯微博 key 801517904 secret bfba83ae253c8f38dabe ...
- Android实现QQ分享及注意事项
一.获取APPID和帮助文档 在前面我介绍了关于Android中微信分享的文章< Android实现微信分享及注意事项>这一篇文章来看看关于QQ分享. 可以参看新手引导和接入说明:http ...
- android 入门-微博分享
[2015-03-11 13:40:32 - WeiboSDK] Unable to resolve target 'android-8' 修改project.properties target=a ...
- Android Studio 独立引入(非友盟)微博分享和回调时问题
最近同事在做一个小项目时,由于产品的要求,Wap页面的分享规定不能使用友盟的社会化组件.他则不得不手动一个一个渠道的引入分享,好在渠道不多就三个,但是第一微博分享引入的时候问题就出现了. 问题一:li ...
- Android 调用系统分享文字、图片、文件,可直达微信、朋友圈、QQ、QQ空间、微博
原文:Android 调用系统分享文字.图片.文件,可直达微信.朋友圈.QQ.QQ空间.微博 兼容SDK 18以上的系统,直接调用系统分享功能,分享文本.图片.文件到第三方APP,如:微信.QQ.微博 ...
- 微信微博分享注意事项(sharesdk)
0.(重要)如果接入多渠道可以考虑微博微信appid appkey等信息放到服务端,方便临时修改又可避免很多渠道时替换ShareSDK.xml文件出错. 但是cocos2dx-2.x版本使用代码配置a ...
- ShareSDK集成微信、QQ、微博分享
1.前言 为什么要使用第三方的作为集成分享的工具呢?而不去用官方的呢?有什么区别么? 一个字"快",如果你使用官方的得一个个集成他们的SDK,相信这是一个痛苦的过程. 2.准备需要 ...
- ShareSDK for Android 只有新浪微博分享
本文代码例子:http://pan.baidu.com/share/link?shareid=3710053477&uk=3189484501 ShareSDK 官方的例子非常好,但代码太多看 ...
随机推荐
- Listview多种布局的使用
ListView中有两个可以用来让ListView可以在视图中显示多种布局的方法,分别是getItemType和getViewTypeCount 其中 getItemViewType返回的是有参数po ...
- 解决opencv在pycharm中无代码自动提示的bug
2018-03-0422:19:39 首先,估计这不是bug 可能是我自己误操作导致的,但是让我搞了好久才搞定,实在是苦恼 如图已实现功能,百度里有很多朋友出现了,这个无代码提示的问题 大概是这样的, ...
- 关于 VS 调用存储过程加载很慢和SQL 执行很快的那些事
执行同样的存储过程,调用同样的参数 在VS 中调用存储过程和传参后,到数据加载需要20秒或更多, 在SQL直接调用则不到一秒,同一个存储过程为什么有这么大的区别呢? 原因:存储过程计划失效的原因 产生 ...
- dede手机端首页点击文章内容、列表,却跳到pc端
手机访问到手机端首页,点击列表.内容.图片等都跳到pc端,是什么原因? 查看m模板里面的index.html文件生成的代码是绝对路径(数字随机)13.html 而不是view.php?aid=13 解 ...
- Socket编程的简单实现
关于socket编程的简单实现,主要分成客户端.服务端两个部分.实现如下: 1.服务端代码如下,注意:server端要优先于client端启动 2.client端代码,以及启动后客户端和服务端之间的简 ...
- UI/UE/ID/UED/UCD的区别(转)
对于刚刚接触用户体验交互设计的同学来说,很多云里雾里的英文缩写,分不清各个概念代表着什么含义,今天给大家做一个简单地介绍. 简述: UI (User Interface):用户界面 UE或UX (Us ...
- 【Linux】centos7 添加脚本到/etc/rc.local文件里,实现开机自启
Linux 设置开机自启动,添加命令到/etc/rc.d/rc.local,本文以设置tomcat自启动为例: 一:添加自启动命令 export JAVA_HOME=/usr/java/jdk1.8. ...
- 当From窗体中数据变化时,使用代码获取数据库中的数据然后加入combobox中并且从数据库中取得最后的结果
private void FormLug_Load(object sender, EventArgs e) { FieldListLug.Clear();//字段清除 DI = double.Pars ...
- SpringMVC-Mybatis整合和注解开发
SpringMVC-Mybatis整合和注解开发SpringMVC-Mybatis整合整合的思路在mybatis和spring整合的基础上 添加springmvc.spring要管理springmvc ...
- Linux的net.ipv4.tcp_timestamps参数
Q1 今天发生了一个奇怪的现象,在家里始终打开公司的网站打开不了,我就齐了怪了,然后我就各种测试,从ping到dig域名,然后再curl,都是没有问题的,但是就是打不开,最好没有办法只能抓包了,从抓包 ...