1. 程式人生 > >Android:Umeng(友盟) 微信,QQ,新浪分享 (三)

Android:Umeng(友盟) 微信,QQ,新浪分享 (三)

第一步:

下載並安裝SDK


新增程式碼和資源引用,我們提供了新增資原始檔和jar檔案的兩種方式,可以根據需求選擇
解壓SDK壓縮包,將資料夾中的'main/libs'和'main/res'資料夾複製到你的專案工程根目錄下(如使用'ADT 17'以下使用者需要手動新增'libs'下的jar檔案到工程Path中)

結合上兩篇文章 PushSDKMoudle中新增QQ,微信,新浪分享後的libs結構:

 

注:除jar包外,其餘資料夾均需新增對應分享的so包。沒有則不新增,附圖:


第二步:

AndroidManifest配置:

  <!-- 分享-->
        <activity
            android:name="com.umeng.socialize.editorpage.ShareActivity"
            android:theme="@style/Theme.UMDefault"
            android:excludeFromRecents="true"/>

增加許可權:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.SET_DEBUG_APP" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />


針對不平臺所需要新增的資料
按照自己需要的平臺新增對應的配置,如下圖,其餘請參考官方文件:

微信平臺

<activity
            android:name="com.umeng.soexample.wxapi.WXEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
:打包後的apk檔案簽名必須與微信平臺設定一致

WXEntryActivity需建在wxapi的目錄下,該類繼承自WXCallbackActivity,預留空類即可如圖

  <!-- 微信分享 -->
        <activity
            android:name=".wxapi.WXEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
public class WXEntryActivity extends WXCallbackActivity
{

}



QQ、Qzone

<activity
  android:name="com.tencent.tauth.AuthActivity"
  android:launchMode="singleTask"
  android:noHistory="true" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="tencentAPPID" />
</intent-filter>
</activity>
<activity          
    android:name="com.tencent.connect.common.AssistActivity"
    android:screenOrientation="portrait"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />
           
注:將Android manifest xml裡的 騰訊平臺APPID替換為自己申請的APPID,注意tencent字首不要修改,否則無法正常實現QQ及Qzone登入

新浪微博

<activity
            android:name=".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:windowSoftInputMode="adjustResize"
            android:exported="false" >
        </activity>
        <service 
            android:name="com.sina.weibo.sdk.net.DownloadService"
            android:exported="false">
        </service>

:這裡的DownloadService亮紅不影響程式編譯執行,不需要處理

同微信註冊相同,在你的工程應用包名的相應目錄下新增一個WBShareActivity類,該類繼承自WBShareCallBackActivity,預留空類即可,如圖:

public class WBShareActivity extends WBShareCallBackActivity {
}


在application中初始化,新增程式碼如下:
//微信 appid appsecret
PlatformConfig.setWeixin("wx967daebe835fbeac", "5bb696d9ccd75a38c8a0bfe0675559b3");

//新浪微博 appkey appsecret       
PlatformConfig.setSinaWeibo("3921700954","04b48b094faeb16683c32669824ebdad");

// QQ和Qzone appid appkey   
PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba"); 


第三步:

自定義分享,以及分享不同內容

在application中新增程式碼:

public static final SHARE_MEDIA[] displaylist = {SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE,
            SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE,SHARE_MEDIA.SINA /*,SHARE_MEDIA.DOUBAN*/};

在需要啟用分享的Activity中新增如下程式碼:

 //分享
    private ShareAction shareAction = new ShareAction(WebViewActivity.this)
            .setDisplayList(BaseApplication.displaylist)
            .setShareboardclickCallback(shareBoardlistener);

針對不同平臺使用不同監聽器

使用setShareboardclickCallback() 可以進行分享面板不同按鈕的點選回撥,方便開發者進行特殊處理

private ShareBoardlistener shareBoardlistener = new ShareBoardlistener() {
        @Override
        public void onclick(SnsPlatform snsPlatform, SHARE_MEDIA share_media) {
            switch (share_media) {
                case WEIXIN:
                    new ShareAction(WebViewActivity.this).setPlatform(share_media).setCallback(umShareListener)
                            .setShareContent(contents[1])
                            .share();
                    break;
                case WEIXIN_CIRCLE:
                    new ShareAction(WebViewActivity.this).setPlatform(share_media).setCallback(umShareListener)
                            .setShareContent(contents[1])
                            .share();
                    break;
                case SINA:
                    new ShareAction(WebViewActivity.this).setPlatform(share_media).setCallback(umShareListener)
                            .setShareContent(contents[1])
                            .share();
                    break;
                case QZONE:
                    new ShareAction(WebViewActivity.this).setPlatform(share_media).setCallback(umShareListener)
                            .setShareContent(contents[0])
                            .share();
                    break;
                case QQ:
                    new ShareAction(WebViewActivity.this).setPlatform(share_media).setCallback(umShareListener)
                            .setShareContent(contents[0])
                            .share();
                    break;
                default:
                    new ShareAction(WebViewActivity.this).setPlatform(share_media).setCallback(umShareListener)
                            .setShareContent(contents[1])
                            .share();
                    break;
            }
        }
    };
監聽回撥結果:
 private UMShareListener umShareListener = new UMShareListener() {
        @Override
        public void onResult(SHARE_MEDIA platform) {
            Toast.makeText(WebViewActivity.this, " 分享成功", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onError(SHARE_MEDIA platform, Throwable t) {
            Toast.makeText(WebViewActivity.this, " 分享失敗", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onCancel(SHARE_MEDIA platform) {
            Toast.makeText(WebViewActivity.this, " 分享取消", Toast.LENGTH_SHORT).show();
        }
    };


設定分享內容ShareContent
 private ShareContent[] contents = new ShareContent[3];

    {
        contents[0] = new ShareContent();
        contents[1] = new ShareContent();
        contents[2] = new ShareContent();
    }
contents[0].mTitle = "分享";
contents[0].mText = "內容";
contents[0].mTargetUrl = "連結地址";
contents[0].mMedia = new UMImage(mContext, resource);//圖片資源


最後啟動分享功能:

 shareAction.open();