java實(shí)現(xiàn)的新浪微博分享代碼實(shí)例
更新時(shí)間:2015年03月19日 15:18:41 投稿:hebedich
這篇文章主要介紹了java實(shí)現(xiàn)的新浪微博分享代碼實(shí)例,是通過(guò)新浪API獲得授權(quán),然后接受客戶端請(qǐng)求的數(shù)據(jù),第三方應(yīng)用發(fā)送請(qǐng)求消息到微博,喚起微博分享界面,非常的實(shí)用,有相同需要的小伙伴可以參考下。
weibo.java
復(fù)制代碼 代碼如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.user_center);
// 創(chuàng)建微博實(shí)例
mWeiboAuth = new WeiboAuth(this, Constants.APP_KEY,
Constants.REDIRECT_URL, Constants.SCOPE);
// 創(chuàng)建微博分享接口實(shí)例
mWeiboShareAPI = WeiboShareSDK.createWeiboAPI(this, Constants.APP_KEY);
// 當(dāng) Activity 被重新初始化時(shí)(該 Activity 處于后臺(tái)時(shí),可能會(huì)由于內(nèi)存不足被殺掉了),
// 需要調(diào)用 {@link IWeiboShareAPI#handleWeiboResponse} 來(lái)接收微博客戶端返回的數(shù)據(jù)。
// 執(zhí)行成功,返回 true,并調(diào)用 {@link IWeiboHandler.Response#onResponse};
// 失敗返回 false,不調(diào)用上述回調(diào)
if (savedInstanceState != null) {
mWeiboShareAPI.handleWeiboResponse(getIntent(), this);
}
}
/**
* 檢查用戶是否安裝新浪微博
*/
public void isNotInstall() {
try {
// 檢查微博客戶端環(huán)境是否正常,如果未安裝微博,彈出對(duì)話框詢問(wèn)用戶下載微博客戶端
if (mWeiboShareAPI.checkEnvironment(true)) {
// 注冊(cè)第三方應(yīng)用 到微博客戶端中,注冊(cè)成功后該應(yīng)用將顯示在微博的應(yīng)用列表中。
// 但該附件欄集成分享權(quán)限需要合作申請(qǐng),詳情請(qǐng)查看 Demo 提示
mWeiboShareAPI.registerApp();
startSinaShare();
}
} catch (WeiboShareException e) {
e.printStackTrace();
Toast.makeText(UserCenter.this, e.getMessage(), Toast.LENGTH_LONG)
.show();
}
if (dialog != null) {
dialog.dismiss();
}
}
/**
* 微博認(rèn)證授權(quán)回調(diào)類。 1. SSO 授權(quán)時(shí),需要在 {@link #onActivityResult} 中調(diào)用
* {@link SsoHandler#authorizeCallBack} 后, 該回調(diào)才會(huì)被執(zhí)行。 2. 非 SSO
* 授權(quán)時(shí),當(dāng)授權(quán)結(jié)束后,該回調(diào)就會(huì)被執(zhí)行。 當(dāng)授權(quán)成功后,請(qǐng)保存該 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();
}
}
/**
* 新浪微博用戶授權(quán)
*/
public void startSinaShare() {
mSsoHandler = new SsoHandler(UserCenter.this, mWeiboAuth);
// 從 SharedPreferences 中讀取上次已保存好 AccessToken 等信息,
mAccessToken = AccessTokenKeeper.readAccessToken(this);
// 如果Token有效,則直接調(diào)用發(fā)送微博
if (mAccessToken.isSessionValid()) {
sendMessage();
} else {
mSsoHandler.authorize(new AuthListener());
}
}
/**
* @See {@link Activity#onNewIntent}
*/
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// 從當(dāng)前應(yīng)用喚起微博并進(jìn)行分享后,返回到當(dāng)前應(yīng)用時(shí),需要在此處調(diào)用該函數(shù)
// 來(lái)接收微博客戶端返回的數(shù)據(jù);執(zhí)行成功,返回 true,并調(diào)用
// {@link IWeiboHandler.Response#onResponse};失敗返回 false,不調(diào)用上述回調(diào)
mWeiboShareAPI.handleWeiboResponse(intent, this);
}
/**
* 當(dāng) SSO 授權(quán) Activity 退出時(shí),該函數(shù)被調(diào)用。
*
* @see {@link Activity#onActivityResult}
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// SSO 授權(quán)回調(diào)
// 重要:發(fā)起 SSO 登陸的 Activity 必須重寫 onActivityResult
if (mSsoHandler != null) {
mSsoHandler.authorizeCallBack(requestCode, resultCode, data);
}
}
/**
* 接收微客戶端博請(qǐng)求的數(shù)據(jù)。 當(dāng)微博客戶端喚起當(dāng)前應(yīng)用并進(jìn)行分享時(shí),該方法被調(diào)用。
*
* @param baseRequest
* 微博請(qǐng)求數(shù)據(jù)對(duì)象
* @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();
}
}
/**
* 第三方應(yīng)用發(fā)送請(qǐng)求消息到微博,喚起微博分享界面。
* @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();
}
}
/**
* 第三方應(yīng)用發(fā)送請(qǐng)求消息到微博,喚起微博分享界面。 注意:當(dāng)
* {@link IWeiboShareAPI#getWeiboAppSupportAPI()} >= 10351 時(shí),支持同時(shí)分享多條消息,
*
* @param hasText
* 分享的內(nèi)容是否有文本
* @param hasImage
* 分享的內(nèi)容是否有圖片
* @param hasWebpage
* 分享的內(nèi)容是否有網(wǎng)頁(yè)
*/
private void sendMultiMessage() {
// 1. 初始化微博的分享消息
WeiboMultiMessage weiboMessage = new WeiboMultiMessage();
weiboMessage.textObject = getTextObj();
// 用戶可以分享其它媒體資源(網(wǎng)頁(yè)、音樂(lè)、視頻、聲音中的一種)
weiboMessage.mediaObject = getWebpageObj();
// 2. 初始化從第三方到微博的消息請(qǐng)求
SendMultiMessageToWeiboRequest request = new SendMultiMessageToWeiboRequest();
// 用transaction唯一標(biāo)識(shí)一個(gè)請(qǐng)求
request.transaction = String.valueOf(System.currentTimeMillis());
request.multiMessage = weiboMessage;
// 3. 發(fā)送請(qǐng)求消息到微博,喚起微博分享界面
mWeiboShareAPI.sendRequest(request);
// 記錄分享日志
PublicFun.sendShareAppLog(UserCenter.this,
getResources().getString(R.string.micro_blog));
if (dialog != null) {
dialog.dismiss();
}
}
/**
* 創(chuàng)建文本消息對(duì)象。
* @return 文本消息對(duì)象。
*/
private TextObject getTextObj() {
TextObject textObject = new TextObject();
textObject.text = getResources().getString(R.string.share_content);
return textObject;
}
/**
* 創(chuàng)建多媒體(網(wǎng)頁(yè))消息對(duì)象。
* @return 多媒體(網(wǎng)頁(yè))消息對(duì)象。
*/
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;
}
/**
* 該類定義了微博授權(quán)時(shí)所需要的參數(shù)。
* @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 對(duì)象到 SharedPreferences。
*
* @param context 應(yīng)用程序上下文環(huán)境
* @param token Token 對(duì)象
*/
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 應(yīng)用程序上下文環(huán)境
*
* @return 返回 Token 對(duì)象
*/
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 應(yīng)用程序上下文環(huán)境
*/
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();
}
}
以上所述就是本文的全部?jī)?nèi)容了,希望對(duì)大家熟練掌握java有所幫助。
您可能感興趣的文章:
- iOS新浪微博、騰訊微博分享功能實(shí)例
- js實(shí)現(xiàn)將選中內(nèi)容分享到新浪或騰訊微博
- 基于js實(shí)現(xiàn)微信發(fā)送好友如何分享到朋友圈、微博
- js實(shí)現(xiàn)選中頁(yè)面文字將其分享到新浪微博
- Python 獲取新浪微博的最新公共微博實(shí)例分享
- python發(fā)騰訊微博代碼分享
- Jquery實(shí)現(xiàn)彈出層分享微博插件具備動(dòng)畫效果
- 基于jquery的當(dāng)鼠標(biāo)滾輪到最底端繼續(xù)加載新數(shù)據(jù)思路分享(多用于微博、空間、論壇 )
- Android實(shí)現(xiàn)分享功能
- 完整的iOS新浪微博分享功能開(kāi)發(fā)
相關(guān)文章
JavaWEB項(xiàng)目之如何配置動(dòng)態(tài)數(shù)據(jù)源
這篇文章主要介紹了JavaWEB項(xiàng)目之如何配置動(dòng)態(tài)數(shù)據(jù)源問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06springmvc+shiro自定義過(guò)濾器的實(shí)現(xiàn)代碼
這篇文章主要介紹了springmvc+shiro自定義過(guò)濾器的實(shí)現(xiàn)方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-10-10SpringBoot @FixMethodOrder 如何調(diào)整單元測(cè)試順序
這篇文章主要介紹了SpringBoot @FixMethodOrder 調(diào)整單元測(cè)試順序方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09Java自定義注解實(shí)現(xiàn)Redis自動(dòng)緩存的方法
本篇文章主要介紹了Java自定義注解實(shí)現(xiàn)Redis自動(dòng)緩存的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04