java实现的新浪微博分享代码实例

网友投稿 261 2023-08-03


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

             &http://nbsp;           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有所帮助。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java中输出pdf文件代码分享
下一篇:java制作android 日历代码分享
相关文章

 发表评论

暂时没有评论,来抢沙发吧~