您的位置:首页 > 其它

新浪微博分享多个页面回调不能直接回到调用的Activity问题

2015-11-27 10:44 381 查看
昨天在用新浪微博分享的时候发现当有多个页面调用微博分享时不能直接回到当前Activity,这时会弹出多个设置有接收微博回调Activity让你选择。我的解决办法是新建一个空的Activity,每次要调用微博分享的时候都打开这个Activity,在这个类里完成分享操作,分享结束直接关掉这个Activity。这样多个页面需要分享的时候最终只会调用这一个类,只有它能接受到回调,就不会出现选择回调页面的问题了。下面贴上代码,类代码:
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>


其它的按官方文档配置就行了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: