java完成的新浪微博分享代碼實例。本站提示廣大學習愛好者:(java完成的新浪微博分享代碼實例)文章只能為提供參考,不一定能成為您想要的結果。以下是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
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有所贊助。