- 論壇徽章:
- 1
|
weibo.java- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.user_center);
- // 創(chuàng)建微博實例
- mWeiboAuth = new WeiboAuth(this, Constants.APP_KEY,
- Constants.REDIRECT_URL, Constants.SCOPE);
- // 創(chuàng)建微博分享接口實例
- mWeiboShareAPI = WeiboShareSDK.createWeiboAPI(this, Constants.APP_KEY);
-
- // 當(dāng) Activity 被重新初始化時(該 Activity 處于后臺時,可能會由于內(nèi)存不足被殺掉了),
- // 需要調(diào)用 {@link IWeiboShareAPI#handleWeiboResponse} 來接收微博客戶端返回的數(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)境是否正常,如果未安裝微博,彈出對話框詢問用戶下載微博客戶端
- if (mWeiboShareAPI.checkEnvironment(true)) {
-
- // 注冊第三方應(yīng)用 到微博客戶端中,注冊成功后該應(yīng)用將顯示在微博的應(yīng)用列表中。
- // 但該附件欄集成分享權(quán)限需要合作申請,詳情請查看 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)時,需要在 {@link #onActivityResult} 中調(diào)用
- * {@link SsoHandler#authorizeCallBack} 后, 該回調(diào)才會被執(zhí)行。 2. 非 SSO
- * 授權(quán)時,當(dāng)授權(quán)結(jié)束后,該回調(diào)就會被執(zhí)行。 當(dāng)授權(quán)成功后,請保存該 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)用時,需要在此處調(diào)用該函數(shù)
- // 來接收微博客戶端返回的數(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ù)被調(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);
- }
- }
-
- /**
- * 接收微客戶端博請求的數(shù)據(jù)。 當(dāng)微博客戶端喚起當(dāng)前應(yīng)用并進(jìn)行分享時,該方法被調(diào)用。
- *
- * @param baseRequest
- * 微博請求數(shù)據(jù)對象
- * @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ā)送請求消息到微博,喚起微博分享界面。
- * @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ā)送請求消息到微博,喚起微博分享界面。 注意:當(dāng)
- * {@link IWeiboShareAPI#getWeiboAppSupportAPI()} >= 10351 時,支持同時分享多條消息,
- *
- * @param hasText
- * 分享的內(nèi)容是否有文本
- * @param hasImage
- * 分享的內(nèi)容是否有圖片
- * @param hasWebpage
- * 分享的內(nèi)容是否有網(wǎng)頁
- */
- private void sendMultiMessage() {
- // 1. 初始化微博的分享消息
- WeiboMultiMessage weiboMessage = new WeiboMultiMessage();
- weiboMessage.textObject = getTextObj();
- // 用戶可以分享其它媒體資源(網(wǎng)頁、音樂、視頻、聲音中的一種)
- weiboMessage.mediaObject = getWebpageObj();
- // 2. 初始化從第三方到微博的消息請求
- SendMultiMessageToWeiboRequest request = new SendMultiMessageToWeiboRequest();
- // 用transaction唯一標(biāo)識一個請求
- request.transaction = String.valueOf(System.currentTimeMillis());
- request.multiMessage = weiboMessage;
-
- // 3. 發(fā)送請求消息到微博,喚起微博分享界面
- mWeiboShareAPI.sendRequest(request);
-
- // 記錄分享日志
- PublicFun.sendShareAppLog(UserCenter.this,
- getResources().getString(R.string.micro_blog));
- if (dialog != null) {
- dialog.dismiss();
- }
- }
-
- /**
- * 創(chuàng)建文本消息對象。
- * @return 文本消息對象。
- */
- private TextObject getTextObj() {
- TextObject textObject = new TextObject();
- textObject.text = getResources().getString(R.string.share_content);
- return textObject;
- }
-
- /**
- * 創(chuàng)建多媒體(網(wǎng)頁)消息對象。
- * @return 多媒體(網(wǎng)頁)消息對象。
- */
- 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ù)。
- * @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 應(yīng)用程序上下文環(huán)境
- * @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 應(yīng)用程序上下文環(huán)境
- *
- * @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 應(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();
- }
- }
復(fù)制代碼 |
|