java实现的新浪微博分享代码实例
weibo.java
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.user_center);
//创建微博实例
mWeiboAuth=newWeiboAuth(this,Constants.APP_KEY,
Constants.REDIRECT_URL,Constants.SCOPE);
//创建微博分享接口实例
mWeiboShareAPI=WeiboShareSDK.createWeiboAPI(this,Constants.APP_KEY);
//当Activity被重新初始化时(该Activity处于后台时,可能会由于内存不足被杀掉了),
//需要调用{@linkIWeiboShareAPI#handleWeiboResponse}来接收微博客户端返回的数据。
//执行成功,返回true,并调用{@linkIWeiboHandler.Response#onResponse};
//失败返回false,不调用上述回调
if(savedInstanceState!=null){
mWeiboShareAPI.handleWeiboResponse(getIntent(),this);
}
}
/**
*检查用户是否安装新浪微博
*/
publicvoidisNotInstall(){
try{
//检查微博客户端环境是否正常,如果未安装微博,弹出对话框询问用户下载微博客户端
if(mWeiboShareAPI.checkEnvironment(true)){
//注册第三方应用到微博客户端中,注册成功后该应用将显示在微博的应用列表中。
//但该附件栏集成分享权限需要合作申请,详情请查看Demo提示
mWeiboShareAPI.registerApp();
startSinaShare();
}
}catch(WeiboShareExceptione){
e.printStackTrace();
Toast.makeText(UserCenter.this,e.getMessage(),Toast.LENGTH_LONG)
.show();
}
if(dialog!=null){
dialog.dismiss();
}
}
/**
*微博认证授权回调类。1.SSO授权时,需要在{@link#onActivityResult}中调用
*{@linkSsoHandler#authorizeCallBack}后,该回调才会被执行。2.非SSO
*授权时,当授权结束后,该回调就会被执行。当授权成功后,请保存该access_token、expires_in、uid等信息到
*SharedPreferences中。
*/
classAuthListenerimplementsWeiboAuthListener{
@Override
publicvoidonComplete(Bundlevalues){
//从Bundle中解析Token
mAccessToken=Oauth2AccessToken.parseAccessToken(values);
if(mAccessToken.isSessionValid()){
//保存Token到SharedPreferences
AccessTokenKeeper.writeAccessToken(UserCenter.this,
mAccessToken);
sendMessage();
}
}
@Override
publicvoidonCancel(){
}
@Override
publicvoidonWeiboException(WeiboExceptione){
Toast.makeText(UserCenter.this,
"Authexception:"+e.getMessage(),Toast.LENGTH_LONG)
.show();
}
}
/**
*新浪微博用户授权
*/
publicvoidstartSinaShare(){
mSsoHandler=newSsoHandler(UserCenter.this,mWeiboAuth);
//从SharedPreferences中读取上次已保存好AccessToken等信息,
mAccessToken=AccessTokenKeeper.readAccessToken(this);
//如果Token有效,则直接调用发送微博
if(mAccessToken.isSessionValid()){
sendMessage();
}else{
mSsoHandler.authorize(newAuthListener());
}
}
/**
*@See{@linkActivity#onNewIntent}
*/
@Override
protectedvoidonNewIntent(Intentintent){
super.onNewIntent(intent);
//从当前应用唤起微博并进行分享后,返回到当前应用时,需要在此处调用该函数
//来接收微博客户端返回的数据;执行成功,返回true,并调用
//{@linkIWeiboHandler.Response#onResponse};失败返回false,不调用上述回调
mWeiboShareAPI.handleWeiboResponse(intent,this);
}
/**
*当SSO授权Activity退出时,该函数被调用。
*
*@see{@linkActivity#onActivityResult}
*/
@Override
protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
super.onActivityResult(requestCode,resultCode,data);
//SSO授权回调
//重要:发起SSO登陆的Activity必须重写onActivityResult
if(mSsoHandler!=null){
mSsoHandler.authorizeCallBack(requestCode,resultCode,data);
}
}
/**
*接收微客户端博请求的数据。当微博客户端唤起当前应用并进行分享时,该方法被调用。
*
*@parambaseRequest
* 微博请求数据对象
*@see{@linkIWeiboShareAPI#handleWeiboRequest}
*/
@Override
publicvoidonResponse(BaseResponsebaseResp){
switch(baseResp.errCode){
caseWBConstants.ErrorCode.ERR_OK:
if(PublicFun.shareCondition()){
gainBoBi();
}else{
Toast.makeText(this,R.string.share_success,Toast.LENGTH_LONG)
.show();
}
break;
caseWBConstants.ErrorCode.ERR_CANCEL:
break;
caseWBConstants.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}
*/
privatevoidsendMessage(){
if(mWeiboShareAPI.isWeiboAppSupportAPI()){
sendMultiMessage();
}else{
Toast.makeText(this,R.string.sina_share_hint,Toast.LENGTH_SHORT)
.show();
}
}
/**
*第三方应用发送请求消息到微博,唤起微博分享界面。注意:当
*{@linkIWeiboShareAPI#getWeiboAppSupportAPI()}>=10351时,支持同时分享多条消息,
*
*@paramhasText
* 分享的内容是否有文本
*@paramhasImage
* 分享的内容是否有图片
*@paramhasWebpage
* 分享的内容是否有网页
*/
privatevoidsendMultiMessage(){
//1.初始化微博的分享消息
WeiboMultiMessageweiboMessage=newWeiboMultiMessage();
weiboMessage.textObject=getTextObj();
//用户可以分享其它媒体资源(网页、音乐、视频、声音中的一种)
weiboMessage.mediaObject=getWebpageObj();
//2.初始化从第三方到微博的消息请求
SendMultiMessageToWeiboRequestrequest=newSendMultiMessageToWeiboRequest();
//用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文本消息对象。
*/
privateTextObjectgetTextObj(){
TextObjecttextObject=newTextObject();
textObject.text=getResources().getString(R.string.share_content);
returntextObject;
}
/**
*创建多媒体(网页)消息对象。
*@return多媒体(网页)消息对象。
*/
privateWebpageObjectgetWebpageObj(){
WebpageObjectmediaObject=newWebpageObject();
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);
Bitmapbmp=BitmapFactory.decodeResource(getResources(),
R.drawable.icon);
mediaObject.setThumbImage(bmp);
returnmediaObject;
}
/**
*该类定义了微博授权时所需要的参数。
*@authorSINA
*@SINCE2013-10-07
*/
publicclassAccessTokenKeeper{
privatestaticfinalStringPREFERENCES_NAME="com_weibo_sdk_android";
privatestaticfinalStringKEY_UID ="uid";
privatestaticfinalStringKEY_ACCESS_TOKEN ="access_token";
privatestaticfinalStringKEY_EXPIRES_IN ="expires_in";
/**
*保存Token对象到SharedPreferences。
*
*@paramcontext应用程序上下文环境
*@paramtoken Token对象
*/
publicstaticvoidwriteAccessToken(Contextcontext,Oauth2AccessTokentoken){
if(null==context||null==token){
return;
}
SharedPreferencespref=context.getSharedPreferences(PREFERENCES_NAME,Context.MODE_APPEND);
Editoreditor=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信息。
*
*@paramcontext应用程序上下文环境
*
*@return返回Token对象
*/
publicstaticOauth2AccessTokenreadAccessToken(Contextcontext){
if(null==context){
returnnull;
}
Oauth2AccessTokentoken=newOauth2AccessToken();
SharedPreferencespref=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));
returntoken;
}
/**
*清空SharedPreferences中Token信息。
*
*@paramcontext应用程序上下文环境
*/
publicstaticvoidclear(Contextcontext){
if(null==context){
return;
}
SharedPreferencespref=context.getSharedPreferences(PREFERENCES_NAME,Context.MODE_APPEND);
Editoreditor=pref.edit();
editor.clear();
editor.commit();
}
}
以上所述就是本文的全部内容了,希望对大家熟练掌握java有所帮助。