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即可,如果三個都設定了,則只會顯示其中一個,按照以下優先順序(從高到底),只把優先順序最高的那個顯示:
-
bitmap
-
imgPath
-
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);
}
}