一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語(yǔ)言 - JAVA教程 - java實(shí)現(xiàn)的新浪微博分享代碼實(shí)例

java實(shí)現(xiàn)的新浪微博分享代碼實(shí)例

2019-12-13 10:35hebedich JAVA教程

這篇文章主要介紹了java實(shí)現(xiàn)的新浪微博分享代碼實(shí)例,是通過(guò)新浪API獲得授權(quán),然后接受客戶(hù)端請(qǐng)求的數(shù)據(jù),第三方應(yīng)用發(fā)送請(qǐng)求消息到微博,喚起微博分享界面,非常的實(shí)用,有相同需要的小伙伴可以參考下。

weibo.java

 

復(fù)制代碼代碼如下:

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                 super.onCreate(savedInstanceState);
                 setContentView(R.layout.user_center);
                 // 創(chuàng)建微博實(shí)例
                mWeiboAuth = new WeiboAuth(this, Constants.APP_KEY,
                                 Constants.REDIRECT_URL, Constants.SCOPE);
                 // 創(chuàng)建微博分享接口實(shí)例
                mWeiboShareAPI = WeiboShareSDK.createWeiboAPI(this, Constants.APP_KEY);
                 // 當(dāng) Activity 被重新初始化時(shí)(該 Activity 處于后臺(tái)時(shí),可能會(huì)由于內(nèi)存不足被殺掉了),
                // 需要調(diào)用 {@link IWeiboShareAPI#handleWeiboResponse} 來(lái)接收微博客戶(hù)端返回的數(shù)據(jù)。
                // 執(zhí)行成功,返回 true,并調(diào)用 {@link IWeiboHandler.Response#onResponse};
                // 失敗返回 false,不調(diào)用上述回調(diào)
                if (savedInstanceState != null) {
                         mWeiboShareAPI.handleWeiboResponse(getIntent(), this);
                 }
        }
 /**
          * 檢查用戶(hù)是否安裝新浪微博
         */
         public void isNotInstall() {
                 try {
                         // 檢查微博客戶(hù)端環(huán)境是否正常,如果未安裝微博,彈出對(duì)話(huà)框詢(xún)問(wèn)用戶(hù)下載微博客戶(hù)端
                        if (mWeiboShareAPI.checkEnvironment(true)) {
                                 // 注冊(cè)第三方應(yīng)用 到微博客戶(hù)端中,注冊(cè)成功后該應(yīng)用將顯示在微博的應(yīng)用列表中。
                                // 但該附件欄集成分享權(quán)限需要合作申請(qǐng),詳情請(qǐng)查看 Demo 提示
                                mWeiboShareAPI.registerApp();
                                startSinaShare();
                         }
                 } catch (WeiboShareException e) {
                         e.printStackTrace();
                         Toast.makeText(UserCenter.this, e.getMessage(), Toast.LENGTH_LONG)
                                         .show();
                 }
                 if (dialog != null) {
                         dialog.dismiss();
                 }
         }
         /**
          * 微博認(rèn)證授權(quán)回調(diào)類(lèi)。 1. SSO 授權(quán)時(shí),需要在 {@link #onActivityResult} 中調(diào)用
         * {@link SsoHandler#authorizeCallBack} 后, 該回調(diào)才會(huì)被執(zhí)行。 2. 非 SSO
          * 授權(quán)時(shí),當(dāng)授權(quán)結(jié)束后,該回調(diào)就會(huì)被執(zhí)行。 當(dāng)授權(quán)成功后,請(qǐng)保存該 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();
                 }
         }
         /**
          * 新浪微博用戶(hù)授權(quán)
         */
         public void startSinaShare() {
                 mSsoHandler = new SsoHandler(UserCenter.this, mWeiboAuth);
                 // 從 SharedPreferences 中讀取上次已保存好 AccessToken 等信息,
                mAccessToken = AccessTokenKeeper.readAccessToken(this);
                 // 如果Token有效,則直接調(diào)用發(fā)送微博
                if (mAccessToken.isSessionValid()) {
                         sendMessage();
                 } else {
                         mSsoHandler.authorize(new AuthListener());
                 }
         }
         /**
          * @See {@link Activity#onNewIntent}
          */
         @Override
         protected void onNewIntent(Intent intent) {
                 super.onNewIntent(intent);
                 // 從當(dāng)前應(yīng)用喚起微博并進(jìn)行分享后,返回到當(dāng)前應(yīng)用時(shí),需要在此處調(diào)用該函數(shù)
                // 來(lái)接收微博客戶(hù)端返回的數(shù)據(jù);執(zhí)行成功,返回 true,并調(diào)用
                // {@link IWeiboHandler.Response#onResponse};失敗返回 false,不調(diào)用上述回調(diào)
                mWeiboShareAPI.handleWeiboResponse(intent, this);
         }
         /**
          * 當(dāng) SSO 授權(quán) Activity 退出時(shí),該函數(shù)被調(diào)用。
         * 
          * @see {@link Activity#onActivityResult}
          */
         @Override
         protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                 super.onActivityResult(requestCode, resultCode, data);
                 // SSO 授權(quán)回調(diào)
                // 重要:發(fā)起 SSO 登陸的 Activity 必須重寫(xiě) onActivityResult
                 if (mSsoHandler != null) {
                         mSsoHandler.authorizeCallBack(requestCode, resultCode, data);
                 }
         }
         /**
          * 接收微客戶(hù)端博請(qǐng)求的數(shù)據(jù)。 當(dāng)微博客戶(hù)端喚起當(dāng)前應(yīng)用并進(jìn)行分享時(shí),該方法被調(diào)用。
         * 
          * @param baseRequest
          *            微博請(qǐng)求數(shù)據(jù)對(duì)象
         * @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();
                 }
         }
         /**
          * 第三方應(yīng)用發(fā)送請(qǐng)求消息到微博,喚起微博分享界面。
          * @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();
                 }
         }
         /**
          * 第三方應(yīng)用發(fā)送請(qǐng)求消息到微博,喚起微博分享界面。 注意:當(dāng)
         * {@link IWeiboShareAPI#getWeiboAppSupportAPI()} >= 10351 時(shí),支持同時(shí)分享多條消息,
         * 
          * @param hasText
          *            分享的內(nèi)容是否有文本
         * @param hasImage
          *            分享的內(nèi)容是否有圖片
         * @param hasWebpage
          *            分享的內(nèi)容是否有網(wǎng)頁(yè)
         */
         private void sendMultiMessage() {
                 // 1. 初始化微博的分享消息
                WeiboMultiMessage weiboMessage = new WeiboMultiMessage();
                 weiboMessage.textObject = getTextObj();
                 // 用戶(hù)可以分享其它媒體資源(網(wǎng)頁(yè)、音樂(lè)、視頻、聲音中的一種)
                weiboMessage.mediaObject = getWebpageObj();
                 // 2. 初始化從第三方到微博的消息請(qǐng)求
                SendMultiMessageToWeiboRequest request = new SendMultiMessageToWeiboRequest();
                 // 用transaction唯一標(biāo)識(shí)一個(gè)請(qǐng)求
                request.transaction = String.valueOf(System.currentTimeMillis());
                 request.multiMessage = weiboMessage;
                 // 3. 發(fā)送請(qǐng)求消息到微博,喚起微博分享界面
                mWeiboShareAPI.sendRequest(request);
                 // 記錄分享日志
                PublicFun.sendShareAppLog(UserCenter.this,
                                 getResources().getString(R.string.micro_blog));
                 if (dialog != null) {
                         dialog.dismiss();
                 }
         }
         /**
          * 創(chuàng)建文本消息對(duì)象。
          * @return 文本消息對(duì)象。
         */
         private TextObject getTextObj() {
                 TextObject textObject = new TextObject();
                 textObject.text = getResources().getString(R.string.share_content);
                 return textObject;
         }
         /**
          * 創(chuàng)建多媒體(網(wǎng)頁(yè))消息對(duì)象。
          * @return 多媒體(網(wǎng)頁(yè))消息對(duì)象。
         */
         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;
         }
/**
 * 該類(lèi)定義了微博授權(quán)時(shí)所需要的參數(shù)。
 * @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 對(duì)象到 SharedPreferences。
     * 
      * @param context 應(yīng)用程序上下文環(huán)境
     * @param token   Token 對(duì)象
     */
     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 應(yīng)用程序上下文環(huán)境
     * 
      * @return 返回 Token 對(duì)象
     */
     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 應(yīng)用程序上下文環(huán)境
     */
     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();
     }
 }

 

以上所述就是本文的全部?jī)?nèi)容了,希望對(duì)大家熟練掌握java有所幫助。

延伸 · 閱讀

精彩推薦
  • JAVA教程Java中Date,Calendar,Timestamp的區(qū)別以及相互轉(zhuǎn)換與使用

    Java中Date,Calendar,Timestamp的區(qū)別以及相互轉(zhuǎn)換與使用

    以下是對(duì)Java中Date,Calendar,Timestamp的區(qū)別以及相互轉(zhuǎn)換與使用進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下 ...

    java教程網(wǎng)2512019-10-12
  • JAVA教程java實(shí)現(xiàn)的新浪微博分享代碼實(shí)例

    java實(shí)現(xiàn)的新浪微博分享代碼實(shí)例

    這篇文章主要介紹了java實(shí)現(xiàn)的新浪微博分享代碼實(shí)例,是通過(guò)新浪API獲得授權(quán),然后接受客戶(hù)端請(qǐng)求的數(shù)據(jù),第三方應(yīng)用發(fā)送請(qǐng)求消息到微博,喚起微博分...

    hebedich2392019-12-13
  • JAVA教程Java中常用的6種排序算法詳細(xì)分解

    Java中常用的6種排序算法詳細(xì)分解

    這篇文章主要介紹了Java中常用的6種排序算法詳細(xì)分解,著重說(shuō)明每個(gè)算法的計(jì)算過(guò)程分解,是探究實(shí)現(xiàn)原理級(jí)的文章,對(duì)于深入理解這些算法有很大幫助,需要...

    junjie1182019-11-25
  • JAVA教程java線(xiàn)程并發(fā)semaphore類(lèi)示例

    java線(xiàn)程并發(fā)semaphore類(lèi)示例

    Java 5.0里新加了4個(gè)協(xié)調(diào)線(xiàn)程間進(jìn)程的同步裝置,它們分別是Semaphore, CountDownLatch, CyclicBarrier和Exchanger,本例主要介紹Semaphore,Semaphore是用來(lái)管理一個(gè)資源池的工...

    java教程網(wǎng)4632019-10-31
  • JAVA教程Hadoop1.2中配置偽分布式的實(shí)例

    Hadoop1.2中配置偽分布式的實(shí)例

    這篇文章主要介紹了Hadoop1.2中配置偽分布式的實(shí)例,使用的系統(tǒng)是linux mint 15 64bit,hadoop使用的是1.2.1版本,需要的朋友可以參考下 ...

    Java教程網(wǎng)2202019-11-21
  • JAVA教程java對(duì)象初始化順序驗(yàn)證示例

    java對(duì)象初始化順序驗(yàn)證示例

    以下這段小程序?qū)φ{(diào)用對(duì)象構(gòu)造函數(shù)時(shí),父類(lèi)構(gòu)造函數(shù)、成員變量初始化函數(shù),以及非靜態(tài)初始化塊調(diào)用順序進(jìn)行驗(yàn)證,不考慮靜態(tài)成員及靜態(tài)初始化塊...

    java教程網(wǎng)4472019-11-05
  • JAVA教程java解析xml之sax解析xml示例分享

    java解析xml之sax解析xml示例分享

    SAX基于事件的解析,解析器在一次讀取XML文件中根據(jù)讀取的數(shù)據(jù)產(chǎn)生相應(yīng)的事件,由應(yīng)用程序?qū)崿F(xiàn)相應(yīng)的事件處理邏輯,即它是一種“推”的解析方式;這...

    java技術(shù)網(wǎng)1852019-10-27
  • JAVA教程java獲取當(dāng)前日期和時(shí)間的二種方法分享

    java獲取當(dāng)前日期和時(shí)間的二種方法分享

    這篇文章主要介紹了java獲取當(dāng)前日期和時(shí)間的二種方法,需要的朋友可以參考下 ...

    java教程網(wǎng)2152019-11-16
主站蜘蛛池模板: 9966国产精品视频 | 四虎导航 | zoomkool最新版 | 日日干夜夜拍 | 狠狠做五月深爱婷婷天天综合 | 日本黄色录像视频 | 男男18视频免费网站 | 男人天堂新 | 亚洲六月丁香婷婷综合 | 久久热在线视频精品1 | 国产欧美日韩图片一区二区 | 精品国产日韩一区三区 | 麻豆网站视频国产在线观看 | 免费在线观看成年人视频 | 亚洲精品午夜视频 | 天天综合色天天综合 | 高h短篇合集 | 小小水蜜桃视频高清在线播放 | 无码国产成人午夜在线观看不卡 | 初尝黑人巨大h文 | 亚洲精品免费视频 | 四虎成人影院 | 午夜影院网站 | 三年片韩国在线观看 | 99小视频 | 惊弦45集免费看 | 色综合久久九月婷婷色综合 | 午夜大片在线观看 | 亚洲伦理影院 | 视频在线网站 | 插入肥臀 | 久久精品成人免费网站 | 欧美同志video 在线观看 | 99精品国产成人一区二区 | 亚洲乱亚洲23p女 | 国产一区二区免费在线 | 农村美女沟厕嘘嘘被偷看 | 513热点网深夜影院影院诶 | 日日干夜夜拍 | 男人日女人的b | 百合漫画咱啪全彩抚慰 |