1. 程式人生 > >ShareSDKUtils,封裝的分享工具類

ShareSDKUtils,封裝的分享工具類

介紹

ShareSDKUtils是基於ShareSDK提供的API進行封裝的工具類,方便於我們開發時分享的呼叫,支援使用預設的GUI,也支援自定義介面,點選事件中呼叫分享到某一個ShareSDK支援的第三方平臺,使用ShareSDKUtils需要依賴ShareSDK提供的開發包。

使用的方式為:如ShareSDKUtils.getInstance(Context context).useDefaultGUI(需要傳入的那些引數);

Mob相關文件介紹,提供參考

接下來介紹ShareSDKUtils封裝的方法:

/**


* @description: 分享的工具類
*/

public class ShareSDKUtils {

private static Handler mHandler = new Handler();

private static ShareSDKUtils mInstance;

private static Object mLock = new Object();

private static Context mContext;

public static ShareSDKUtils getInstance(Context context){

if (mInstance == null){

synchronized (mLock){

if (mInstance == null){

mInstance = new ShareSDKUtils();

mContext = context;
    }
  }
}
return mInstance;
}

使用預設的GUI分享

App中分享按鈕點選事件中,呼叫此方法可以彈出ShareSDK自帶的預設分享的彈框,包括你選擇的那些第三方平臺,最後一個引數是平臺分享後操作的回撥,有分享成功、分享失敗、取消分享三個操作的回撥,如果不需要監聽分享動作的回撥,可以傳null,預設對應的操作會彈出吐司"分享成功","分享失敗","分享已取消"的提示。

/**
 * 使用預設的分享GUI
 *
 * @param title         標題
 * @param content       內容
 * @param imgUrl        圖片的Url
 * @param siteUrl       網站的Url
 * @param
shareListener 分享的回撥 */
private static void useDefaultGUI(String title, String content, String imgUrl, String siteUrl, PlatformActionListener shareListener) { ShareSDK.initSDK(mContext); OnekeyShare oks = new OnekeyShare(); //關閉sso授權 //oks.disableSSOWhenAuthorize(); // title標題,印象筆記、郵箱、資訊、微信、人人網和QQ空間使用
oks.setTitle(title); // titleUrl是標題的網路連結,僅在人人網和QQ空間使用 oks.setTitleUrl(siteUrl); //分享網路圖片,新浪微博分享網路圖片需要通過稽核後申請高階寫入介面,否則請註釋掉測試新浪微博 oks.setImageUrl(imgUrl); // url僅在微信(包括好友和朋友圈)中使用 oks.setUrl(siteUrl); // site是分享此內容的網站名稱,僅在QQ空間使用 oks.setSite(""); // siteUrl是分享此內容的網站地址,僅在QQ空間使用 oks.setSiteUrl(siteUrl); // text是分享文字,所有平臺都需要這個欄位 oks.setText(content + "\n連結: " + siteUrl); //設定回撥 oks.setCallback(shareListener); // 啟動分享GUI oks.show(mContext); }

自定義GUI的分享

如果不使用ShareSDK自帶的GUI,自定義分享的佈局,則在對應的點選事件中,呼叫分享到某個平臺的方法,下面介紹封裝好的單獨分享到微信、朋友圈、QQ好友、QQ空間、新浪微博的方法。

分享到微信好友或朋友圈

/**
 * 分享到微信好友或朋友圈,圖片可以是ur或者是本地的,預設本地圖片優先
 *
 * @param wechatType    微信好友或朋友圈 Wechat.NAME 微信好友 WechatMoments.NAME 朋友圈
 * @param shareType    分享的型別 Platform.SHARE_WEBPAGE 網頁 Platform.SHARE_IMAGE 圖片
 * @param title         標題
 * @param content       內容
 * @param siteUrl       網站的url
 * @param imgUrl        網路圖片的url
 * @param bm            bitmap
 * @param imgPath       本地圖片的絕對路徑
 * @param shareListener 分享的回撥
 */
private static void shareToWechat(String wechatType, int shareType, String title, String content, String siteUrl, String imgUrl, Bitmap bm, String imgPath, PlatformActionListener shareListener) {
    ShareSDK.initSDK(mContext);

    Wechat.ShareParams shareParams = new Wechat.ShareParams();
    shareParams.setShareType(shareType);
    shareParams.setTitle(title);//設定標題
    shareParams.setText(content);//設定內容
    shareParams.setUrl(siteUrl);//設定網站

    if (!TextUtils.isEmpty(imgUrl)) {
        //如果有網路圖片,則設定圖片的url
        shareParams.setImageUrl(imgUrl);
    }

    if (bm != null) {
        //如果是bitmap型別,則設定bm
        shareParams.setImageData(bm);
    }

    if (!TextUtils.isEmpty(imgPath)) {
        //如果是本地圖片路徑,則設定圖片路徑
        shareParams.setImagePath(imgPath);
    }

    Platform platform = ShareSDK.getPlatform(wechatType);
    platform.share(shareParams);//分享
    if (shareListener != null) {
        platform.setPlatformActionListener(shareListener);//設定回撥
    } else {
        //如果為空,設定預設回調回調
        platform.setPlatformActionListener(defaultShareListner);
    }
}

其中,第一個引數是分享到微信的型別:

  • 如果是分享給微信好友,則是傳 Wechat.NAME;

  • 如果是分享到朋友圈,則是傳 WechatMoments.NAME;

如果分享的是圖片,可以傳入網路圖片的連結、bitmap物件、本地圖片的絕對路徑,三者只需傳入一個,其他兩個設定為null即可,如果三個都設定了,則只會顯示其中一個,按照以下優先順序(從高到底),只把優先順序最高的那個顯示:

  1. bitmap

  2. imgPath

  3. imgUrl

當最後一個引數傳入的分享動作回撥為null時,會使用預設的回撥:

/**
 * 預設的分享回撥
 */
public static PlatformActionListener defaultShareListner = new PlatformActionListener() {
    @Override
    public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {
        mHandler.post(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(mContext, "分享成功", Toast.LENGTH_SHORT).show();
            }
        });
    }

    @Override
    public void onError(Platform platform, int i, Throwable throwable) {
        mHandler.post(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(mContext, "分享失敗", Toast.LENGTH_SHORT).show();
            }
        });
    }

    @Override
    public void onCancel(Platform platform, int i) {
        mHandler.post(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(mContext, "分享已取消", Toast.LENGTH_SHORT).show();
            }
        });
    }
};

這裡和使用預設的GUI方法不同,如果為platform.setPlatformActionListener()傳入的回撥為null,會報空指標異常,所以這裡建立一個預設的回撥,也是彈出對應的吐司提示而已。

分享到QQ,QQ空間

 /**
 * 分享到QQ,QQ空間
 *
 * @param title         標題
 * @param content       內容
 * @param siteUrl       網站的url
 * @param imgUrl        網路圖片的url
 * @param bm            bitmap
 * @param imgPath       本地圖片的絕對路徑
 * @param shareListener 分享的回撥
 */
private static void shareToQQ(String title, String content, String siteUrl, String imgUrl, Bitmap bm, String imgPath, PlatformActionListener shareListener) {
    ShareSDK.initSDK(mContext);
    QQ.ShareParams shareParams = new QQ.ShareParams();
    shareParams.setShareType(Platform.SHARE_WEBPAGE);
    shareParams.setTitle(title);//標題
    shareParams.setText(content);//內容
    shareParams.setTitleUrl(siteUrl);//網址

    if (!TextUtils.isEmpty(imgUrl)) {
        //如果有網路圖片,則設定圖片的url
        shareParams.setImageUrl(imgUrl);
    }

    if (bm != null) {
        //如果是bitmap型別,則設定bm
        shareParams.setImageData(bm);
    }

    if (!TextUtils.isEmpty(imgPath)) {
        //如果是本地圖片路徑,則設定圖片路徑
        shareParams.setImagePath(imgPath);
    }

    Platform platform = ShareSDK.getPlatform(QQ.NAME);
    platform.share(shareParams);//分享
    if (shareListener != null) {
        platform.setPlatformActionListener(shareListener);//設定回撥
    } else {
        //如果為空,設定預設回調回調
        platform.setPlatformActionListener(defaultShareListner);
    }
}

分享到新浪微博

 /**
 * 分享到新浪微博
 *
 * @param content       內容
 * @param siteUrl       網站的url
 * @param imgUrl        網路圖片的url
 * @param bm            bitmap
 * @param imgPath       本地圖片的絕對路徑
 * @param shareListener 分享的回撥
 */
private static void shareToSina(String content, String siteUrl, String imgUrl, Bitmap bm, String imgPath, PlatformActionListener shareListener) {
    ShareSDK.initSDK(mContext);
    SinaWeibo.ShareParams shareParams = new SinaWeibo.ShareParams();
    shareParams.setContentType(Platform.SHARE_WEBPAGE);
    shareParams.setText(content + "\n" + siteUrl);//設定內容
    if (!TextUtils.isEmpty(imgUrl)) {
        //如果有網路圖片,則設定圖片的url
        shareParams.setImageUrl(imgUrl);
    }

    if (bm != null) {
        //如果是bitmap型別,則設定bm
        shareParams.setImageData(bm);
    }

    if (!TextUtils.isEmpty(imgPath)) {
        //如果是本地圖片路徑,則設定圖片路徑
        shareParams.setImagePath(imgPath);
    }

    Platform platform = ShareSDK.getPlatform(SinaWeibo.NAME);
    platform.share(shareParams);//分享
    if (shareListener != null) {
        platform.setPlatformActionListener(shareListener);//設定回撥
    } else {
        //如果為空,設定預設回調回調
        platform.setPlatformActionListener(defaultShareListner);
    }
}