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);
if
(savedInstanceState !=
null
)
{
mWeiboShareAPI.handleWeiboResponse(getIntent(),
this
);
}
}
/**
*
检查用户是否安装新浪微博
*/
public
void
isNotInstall() {
try
{
if
(mWeiboShareAPI.checkEnvironment(
true
))
{
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) {
mAccessToken
= Oauth2AccessToken.parseAccessToken(values);
if
(mAccessToken.isSessionValid()) {
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);
mAccessToken
= AccessTokenKeeper.readAccessToken(
this
);
if
(mAccessToken.isSessionValid()) {
sendMessage();
}
else
{
mSsoHandler.authorize(
new
AuthListener());
}
}
/**
*
@See {@link Activity#onNewIntent}
*/
@Override
protected
void
onNewIntent(Intent intent) {
super
.onNewIntent(intent);
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);
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() {
WeiboMultiMessage
weiboMessage =
new
WeiboMultiMessage();
weiboMessage.textObject
= getTextObj();
weiboMessage.mediaObject
= getWebpageObj();
SendMultiMessageToWeiboRequest
request =
new
SendMultiMessageToWeiboRequest();
request.transaction
= String.valueOf(System.currentTimeMillis());
request.multiMessage
= weiboMessage;
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();
}
}