新浪微博分享 小记!!!(尚未成功)

最近app要集成新浪的微博分享(首先吐槽下开发者注册之难,竟然还要身份证的正反面,我又不是开淘宝店!

还有他那个开发者登录系统反应之慢!好在我通过登录扫码自己的微博成功登陆上了开发者)

他分享的内容:文字+图片+(网页,视频,音频中的一种),当然也可以只要文字

我的app就是一个网页,所以分享的就是一个 文字+网页 即可,有没有图片,看心情

继承前你需要注册新浪微博开发者

注册好之后加入你的app应用,加入app应用需要包名和用微博md5签名工具生成的md5值

然后开始集成

先在AndroidManifest.xml中加入微博分享的action就是 在需要接收消息的 Activity(唤起微博主程序的类)里声 明对应的Action:ACTION_SDK_REQ_ACTIVITY,如下所示

下图是在WBShareActivity这个activity里分享微博

 <activity
            android:name="com.sina.weibo.sdk.demo.WBShareActivity"
            android:configChanges="keyboardHidden|orientation"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser"
            android:configChanges="keyboardHidden|orientation"
            android:exported="false"
            android:windowSoftInputMode="adjustResize" >
        </activity>

 然后先进行注册

    /** 微博分享的接口实例 */
    private IWeiboShareAPI mWeiboShareAPI;

mWeiboShareAPI = WeiboShareSDK.createWeiboAPI(this, Constants.APP_KEY); 
mWeiboShareAPI.registerApp(); // 将应用注册到微博客户

之后创建分享内容

文字 图片 网页

    /**
     * 创建文本消息对象。
     * 
     * @return 文本消息对象。
     */
    private TextObject getTextObj() {
        TextObject textObject = new TextObject();
        textObject.text = getSharedText();
        return textObject;
    }

    /**
     * 创建图片消息对象。
     * 
     * @return 图片消息对象。
     */
    private ImageObject getImageObj() {
        ImageObject imageObject = new ImageObject();
        BitmapDrawable bitmapDrawable = (BitmapDrawable) mImageView.getDrawable();
        //设置缩略图。 注意:最终压缩过的缩略图大小不得超过 32kb。
        Bitmap  bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_logo);
        imageObject.setImageObject(bitmap);
        return imageObject;
    }

    /**
     * 创建多媒体(网页)消息对象。
     * 
     * @return 多媒体(网页)消息对象。
     */
    private WebpageObject getWebpageObj() {
        WebpageObject mediaObject = new WebpageObject();
        mediaObject.identify = Utility.generateGUID();
        mediaObject.title = mShareWebPageView.getTitle();
        mediaObject.description = mShareWebPageView.getShareDesc();
        
        Bitmap  bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_logo);
        // 设置 Bitmap 类型的图片到视频对象里         设置缩略图。 注意:最终压缩过的缩略图大小不得超过 32kb。
        mediaObject.setThumbImage(bitmap);
        mediaObject.actionUrl = mShareWebPageView.getShareUrl();
        mediaObject.defaultText = "Webpage 默认文案";
        return mediaObject;
    }

创建好之后开始通知微博发博器发微博

 /**
     * 第三方应用发送请求消息到微博,唤起微博分享界面。
     * 注意:当 {@link IWeiboShareAPI#getWeiboAppSupportAPI()} >= 10351 时,支持同时分享多条消息,
     * 同时可以分享文本、图片以及其它媒体资源(网页、音乐、视频、声音中的一种)。
     * 
     * @param hasText    分享的内容是否有文本
     * @param hasImage   分享的内容是否有图片
     * @param hasWebpage 分享的内容是否有网页
     * @param hasMusic   分享的内容是否有音乐
     * @param hasVideo   分享的内容是否有视频
     * @param hasVoice   分享的内容是否有声音
     */
    private void sendMultiMessage(boolean hasText, boolean hasImage, boolean hasWebpage,
            boolean hasMusic, boolean hasVideo, boolean hasVoice) {
        
        // 1. 初始化微博的分享消息
        WeiboMultiMessage weiboMessage = new WeiboMultiMessage();
        if (hasText) {
            weiboMessage.textObject = getTextObj();
        }
        
        if (hasImage) {
            weiboMessage.imageObject = getImageObj();
        }
        
        // 用户可以分享其它媒体资源(网页、音乐、视频、声音中的一种)不要的删掉即可
        if (hasWebpage) {
            weiboMessage.mediaObject = getWebpageObj();
        }
        if (hasMusic) {
            weiboMessage.mediaObject = getMusicObj();
        }
        if (hasVideo) {
            weiboMessage.mediaObject = getVideoObj();
        }
        if (hasVoice) {
            weiboMessage.mediaObject = getVoiceObj();
        }
        
        // 2. 初始化从第三方到微博的消息请求
        SendMultiMessageToWeiboRequest request = new  SendMultiMessageToWeiboRequest();
        // 用transaction唯一标识一个请求
        request.transaction = String.valueOf(System.currentTimeMillis());
        request.multiMessage = weiboMessage;
        
        // 3. 发送请求消息到微博,唤起微博分享界面
        mWeiboShareAPI.sendRequest(WBShareActivity.this, request);

}

然后实现OnResponse接口,当微博分享完成后回到本app

/**
     * @see {@link Activity#onNewIntent}
     */    
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        
        // 从当前应用唤起微博并进行分享后,返回到当前应用时,需要在此处调用该函数
        // 来接收微博客户端返回的数据;执行成功,返回 true,并调用
        // {@link IWeiboHandler.Response#onResponse};失败返回 false,不调用上述回调
        mWeiboShareAPI.handleWeiboResponse(intent, this);
    }

    /**
     * 接收微客户端博请求的数据。
     * 当微博客户端唤起当前应用并进行分享时,该方法被调用。
     * 
     * @param baseRequest 微博请求数据对象
     * @see {@link IWeiboShareAPI#handleWeiboRequest}
     */
    @Override
    public void onResponse(BaseResponse baseResp) {
        if(baseResp!= null){
            switch (baseResp.errCode) {
            case WBConstants.ErrorCode.ERR_OK:
                Toast.makeText(this, R.string.weibosdk_demo_toast_share_success, Toast.LENGTH_LONG).show();
                break;
            case WBConstants.ErrorCode.ERR_CANCEL:
                Toast.makeText(this, R.string.weibosdk_demo_toast_share_canceled, Toast.LENGTH_LONG).show();
                break;
            case WBConstants.ErrorCode.ERR_FAIL:
                Toast.makeText(this, 
                        getString(R.string.weibosdk_demo_toast_share_failed) + "Error Message: " + baseResp.errMsg, 
                        Toast.LENGTH_LONG).show();
                break;
            }
        }
    }

(注:代码均来自微博SDK,版本3.1.4,详情请可以去sdk内自行查看,我这里只选择了重要的一些)

  

原文地址:https://www.cnblogs.com/fengfenghuifei/p/5941663.html