新浪微博分享多个页面回调不能直接回到调用的Activity问题
2015-11-27 10:44
381 查看
昨天在用新浪微博分享的时候发现当有多个页面调用微博分享时不能直接回到当前Activity,这时会弹出多个设置有接收微博回调Activity让你选择。我的解决办法是新建一个空的Activity,每次要调用微博分享的时候都打开这个Activity,在这个类里完成分享操作,分享结束直接关掉这个Activity。这样多个页面需要分享的时候最终只会调用这一个类,只有它能接受到回调,就不会出现选择回调页面的问题了。下面贴上代码,类代码:
xml直接建个空页面就行,Manifest里类的设置里加上这个,切记只在这个类里加,别的地方都删掉
其它的按官方文档配置就行了。
package thirdparty; import java.io.InputStream; import org.apache.http.Header; import com.loopj.android.http.AsyncHttpResponseHandler; import com.loopj.android.http.RequestParams; import com.sina.weibo.sdk.api.ImageObject; import com.sina.weibo.sdk.api.MusicObject; import com.sina.weibo.sdk.api.TextObject; import com.sina.weibo.sdk.api.VideoObject; import com.sina.weibo.sdk.api.VoiceObject; import com.sina.weibo.sdk.api.WebpageObject; import com.sina.weibo.sdk.api.WeiboMultiMessage; import com.sina.weibo.sdk.api.share.BaseResponse; import com.sina.weibo.sdk.api.share.IWeiboHandler; import com.sina.weibo.sdk.api.share.IWeiboShareAPI; import com.sina.weibo.sdk.api.share.SendMultiMessageToWeiboRequest; import com.sina.weibo.sdk.api.share.WeiboShareSDK; import com.sina.weibo.sdk.auth.AuthInfo; import com.sina.weibo.sdk.auth.Oauth2AccessToken; import com.sina.weibo.sdk.auth.WeiboAuthListener; import com.sina.weibo.sdk.constant.WBConstants; import com.sina.weibo.sdk.exception.WeiboException; import com.sina.weibo.sdk.utils.Utility; import android.app.Activity; import android.content.Intent; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Toast; /** * @类名: WeiboShareActivity * @描述: TODO(新浪微博分享) * @作者: 杨炳志(yang_bingzhi@qq.com) * @日期: 2015-11-26 下午5:27:35 * @修改人: * @修改时间: 2015-11-26 下午5:27:35 * @修改内容: * @版本: V1.0 * @版权:Copyright 2015 北京八爪鱼(互动)科技有限公司. All rights reserved. */ public class WeiboShareActivity extends Activity implements IWeiboHandler.Response{ /** 微博微博分享接口实例 */ private IWeiboShareAPI mWeiboShareAPI = null; private String title="";//标题 private String description="";//描述 private String url="";//分享链接 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_weibo_share); // 创建微博分享接口实例 mWeiboShareAPI = WeiboShareSDK.createWeiboAPI(this, Constants.APP_KEY); // 注册第三方应用到微博客户端中,注册成功后该应用将显示在微博的应用列表中。 // 但该附件栏集成分享权限需要合作申请,详情请查看 Demo 提示 // NOTE:请务必提前注册,即界面初始化的时候或是应用程序初始化时,进行注册 mWeiboShareAPI.registerApp(); // 当 Activity 被重新初始化时(该 Activity 处于后台时,可能会由于内存不足被杀掉了), // 需要调用 {@link IWeiboShareAPI#handleWeiboResponse} 来接收微博客户端返回的数据。 // 执行成功,返回 true,并调用 {@link IWeiboHandler.Response#onResponse}; // 失败返回 false,不调用上述回调 if (savedInstanceState != null) { mWeiboShareAPI.handleWeiboResponse(getIntent(), WeiboShareActivity.this); } sendMultiMessage(title, description,url); } /** * // * @see {@link Activity#onNewIntent} // */ @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); // 从当前应用唤起微博并进行分享后,返回到当前应用时,需要在此处调用该函数 // 来接收微博客户端返回的数据;执行成功,返回 true,并调用 // {@link IWeiboHandler.Response#onResponse};失败返回 false,不调用上述回调 mWeiboShareAPI.handleWeiboResponse(intent, WeiboShareActivity.this); } /** * 接收微客户端博请求的数据。 当微博客户端唤起当前应用并进行分享时,该方法被调用。 * * @param baseRequest * 微博请求数据对象 * @see {@link IWeiboShareAPI#handleWeiboRequest} */ @Override public void onResponse(BaseResponse baseResp) { switch (baseResp.errCode) { case WBConstants.ErrorCode.ERR_OK: Toast.makeText(WeiboShareActivity.this,"分享成功!", Toast.LENGTH_LONG).show(); break; case WBConstants.ErrorCode.ERR_CANCEL: Toast.makeText(WeiboShareActivity.this,"取消分享", Toast.LENGTH_LONG).show(); break; case WBConstants.ErrorCode.ERR_FAIL: Toast.makeText(WeiboShareActivity.this, "错误", 2000).show(); break; } finish(); } /** * 第三方应用发送请求消息到微博,唤起微博分享界面。 * 注意:当 {@link IWeiboShareAPI#getWeiboAppSupportAPI()} >= 10351 时,支持同时分享多条消息, * 同时可以分享文本、图片以及其它媒体资源(网页、音乐、视频、声音中的一种)。 * * @param hasText 分享的内容是否有文本 * @param hasImage 分享的内容是否有图片 * @param hasWebpage 分享的内容是否有网页 * @param hasMusic 分享的内容是否有音乐 * @param hasVideo 分享的内容是否有视频 * @param hasVoice 分享的内容是否有声音 */ private void sendMultiMessage(String ShareTitle, String ShareDescription,String Url) { // 1. 初始化微博的分享消息 WeiboMultiMessage weiboMessage = new WeiboMultiMessage(); weiboMessage.textObject = getTextObj(ShareTitle+ShareDescription+Url); weiboMessage.imageObject = getImageObj(); // 用户可以分享其它媒体资源(网页、音乐、视频、声音中的一种) // weiboMessage.mediaObject = getWebpageObj(ShareTitle,ShareDescription, Url); // 2. 初始化从第三方到微博的消息请求 SendMultiMessageToWeiboRequest request = new SendMultiMessageToWeiboRequest(); // 用transaction唯一标识一个请求 request.transaction = String.valueOf(System.currentTimeMillis()); request.multiMessage = weiboMessage; mWeiboShareAPI.sendRequest(WeiboShareActivity.this, request);//唤起微博客户端回调接口 //这个也是唤起回调接口,可以监听唤起事件,没有微博客户端的时候调用网页登录 // AuthInfo authInfo = new AuthInfo(this, Constants.APP_KEY, Constants.REDIRECT_URL, Constants.SCOPE); // Oauth2AccessToken accessToken = AccessTokenKeeper.readAccessToken(getApplicationContext()); // String token = ""; // if (accessToken != null) { // token = accessToken.getToken(); // } // mWeiboShareAPI.sendRequest(this, request, authInfo, token, new WeiboAuthListener() { // // @Override // public void onWeiboException( WeiboException arg0 ) { // } // // @Override // public void onComplete( Bundle bundle ) { // // TODO Auto-generated method stub // Oauth2AccessToken newToken = Oauth2AccessToken.parseAccessToken(bundle); // AccessTokenKeeper.writeAccessToken(getApplicationContext(), newToken); // Toast.makeText(getApplicationContext(), "onAuthorizeComplete token = " + newToken.getToken(), 0).show(); // } // // @Override // public void onCancel() { // } // }); } /** * 创建文本消息对象。 * * @return 文本消息对象。 */ private TextObject getTextObj(String SharedText) { TextObject textObject = new TextObject(); textObject.text = SharedText; return textObject; } /** * 创建图片消息对象。 * * @return 图片消息对象。 */ private ImageObject getImageObj() { ImageObject imageObject = new ImageObject(); //BitmapDrawable bitmapDrawable = drawable; Resources resources = getResources(); Drawable draw = resources.getDrawable(R.drawable.weibo_share_pic); imageObject.setImageObject(((BitmapDrawable) draw).getBitmap()); return imageObject; } }
xml直接建个空页面就行,Manifest里类的设置里加上这个,切记只在这个类里加,别的地方都删掉
<activity android:name="thirdparty.WeiboShareActivity" android:label="@string/title_activity_weibo_share" > <intent-filter> <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
其它的按官方文档配置就行了。
相关文章推荐
- 学术论文发表/期刊分类
- 第十章——维护索引(5)——查找丢失索引
- RGB转灰度图的几种算法
- 利用Hadoop和Spark处理用户心跳周期数据
- 插入排序
- ComboBox->SetCurSel()函数
- 如何防止网卡名被修改和还原已被修改的网卡名
- 【Codeforces Testing Round 12C】【DP 树状数组优化】Subsequences n个不同数,长度为m的LIS数
- 线上病毒处理
- JS调用android
- android 5.0及以上,seekbar thumb 透明效果出现父布局背景颜色的解决方法
- Wdatepicker日期控件的使用指南
- SVN配置
- 實作解析:微信開發重點摘要 (2) - 用戶唯一識別碼與網頁存取授權碼
- hadoop常用基础命令
- 基于Jquery实现仿百度百科右侧导航代码附源码下载
- android 休眠唤醒机制分析(一)
- liferay学习之二:实例
- [leetcode] 111. Minimum Depth of Binary Tree
- Life Movie