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 处于后台时,可能会由于内存不足被杀掉了),
                // 需要调用 {@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有所帮助。

(0)

相关推荐

  • 完整的iOS新浪微博分享功能开发

    本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下 做新浪分享 需先去http://open.weibo.com/apps注册开发者app 很简单! 第1步 第2步 3 设置你的应用的信息 找到自己的appkey 还需要设置自己的kAppRedirectURL测试可以随便写个! 开发部分在下面ios新浪微博分享(2)这部分: 开发需要下载官方的sdkhttp://open.weibo.com/wiki/SDK#iOS_SDK 本人下载的版本 新建一个viewco

  • 基于js实现微信发送好友如何分享到朋友圈、微博

    微信浏览器内置了javascript私有对象WeixinJSBridge,可以实现发送给朋友.分享到朋友圈.分享到微博等功能. <script> var imgUrl = "图片地址"; var lineLink = "当前网址"; var descContent = "描述"; var shareTitle = '标题'; var appid = ''; function shareFriend() { WeixinJSBridge

  • iOS新浪微博、腾讯微博分享功能实例

    一个是新浪微博,腾讯微博的分享按钮,一个是他们的绑定情况(其实就是是否授权).点击微博分享中新浪或腾讯按钮,就进行相应的授权(若没授权),显示微博内容,而后发布微博.设置界面中的绑定,就是相关的应用授权. 呵呵,其实也蛮简单滴. 首先分别从新浪微博开放平台(http://open.weibo.com/).腾讯微博开放平台(http://dev.t.qq.com/)中注册应用,获取到Appkey,AppSecret和AppURL(其中 AppURL是要自己填写的). 然后分别下载相关的SDK. h

  • js实现选中页面文字将其分享到新浪微博

    一.功能简述 正是微博如火如荼的时节,其中各个微博的分享功能是网站推广产品的好东东啊,此时如何方便快捷的使用微博的分享功能就显得比较重要了.我的站点每篇文章的底部有一些分享的链接: 不过我觉得这些分享基本上就是聋子的耳朵--摆设.除非这篇文章惊天地.泣鬼神,痛彻心扉,穿越前世今生.但是,如果有更加方便快捷的分享方式,这种冷淡得让人结冰的场面或许就不会经常出现. 一般翻译软件都有划词翻译功能,例如有道桌面词典的桌面划词翻译功能: 启用后,随便选中那个软件的一段文字,就会出现类似这样子的浮动提示框:

  • Android实现分享功能

    Android应用中能很方便的完成这些功能,很多的应用中都有"分享"功能?如何分享呢?下面给大家说说看. 最近有人问到Android分享功能用那个比较好,使用Android自带的Intent来进行分享还是借助第三方呢,直接上代码: 一.使用Intent直接和第三方应用进行通信: /** * 分享功能 * * @param context * 上下文 * @param activityTitle * Activity的名字 * @param msgTitle * 消息标题 * @para

  • js实现将选中内容分享到新浪或腾讯微博

    微博如火如荼,大家都选择用微博带来社会化流量,顺便推广产品和网站,几乎所有的网站都有分享到代码,但是还有一种更快捷的分享方式,javascript就可以实现将选定内容轻松分享到新浪微博和腾讯微博,效果图如下: 将选中的内容分享到新浪微博,腾讯微博实现js代码如下: <STYLE> .img_sina_share { DISPLAY: none; CURSOR: pointer; POSITION: absolute } .img_qq_share { DISPLAY: none; CURSOR

  • 基于jquery的当鼠标滚轮到最底端继续加载新数据思路分享(多用于微博、空间、论坛 )

    复制代码 代码如下: <div id="Scroll" style="background-color: Green; width: 2000px; height:2000px;"> 请写很多数据-- </div> <div id="lookMore">more...</div> <script src="jquery-1.7b1.js" type="text/j

  • python发腾讯微博代码分享

    复制代码 代码如下: import urllib.parse,os.path,time,sys,re,urllib.requestfrom http.client import HTTPSConnectionfrom PyQt5.QtCore import *from PyQt5.QtGui import *from PyQt5.QtWidgets import *from PyQt5.QtWebKitWidgets import *from PyQt5.QtNetwork import * #

  • Jquery实现弹出层分享微博插件具备动画效果

    此Jquery插件是一款非常实用的特效,是很多网站不可缺少的推广神兵利器,传统的一般都用百度.加网的分享插件,但样式外观都不怎么好看,用户体验效果差一点,此作品不但有分享功能,还具备了动画效果,提高了用户体验.由于用了CSS3,为了可以看到插件的最佳效果,建议大家使用谷歌.火狐等浏览器... 作品包括以下功能: 1.弹出层 2.遮罩层 3.动画效果 4.CSS3 效果如下: 源码下载 代码片段(1) 复制代码 代码如下: $(document).ready(function(e) { var s

  • Python 获取新浪微博的最新公共微博实例分享

    API: statuses/public_timeline  返回最新的200条公共微博,返回结果非完全实时 CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-7-3 @author: guaguastd @name: statuses_public_timeline.py ''' def public_timeline(weibo_api, count): #public_timeline = weibo_a

随机推荐