Android中使用ShareSDK集成分享功能的實例代碼
引言
現(xiàn)在APP開發(fā)集成分享功能已經(jīng)是非常普遍的需求了。其他集成分享技術(shù)我沒有使用過,今天我就來介紹下使用ShareSDK來進行分享功能開發(fā)的一些基本步驟和注意點,幫助朋友們避免一些坑。好了,下面切入正題正式開始介紹。
1、ShareSDK開發(fā)包及配置
這個不用多說,去他們官網(wǎng)看找SDK開發(fā)包和集成文檔即可。
Android版本地址:http://www.mob.com/downloadDetail/ShareSDK/android。
注意:記得要注冊ShareSDK賬號獲取AppKey哦。這些集成文檔里面應(yīng)該都有,仔細看即可。
2、去各大應(yīng)用平臺注冊獲取AppKey和AppSecret
這個步驟要看你們團隊想分享到哪些平臺了,一般都是微博和微信。所以一般都去新浪微博和微信開發(fā)平臺注冊。
新浪開發(fā)平臺:http://open.weibo.com/
騰訊開放平臺:https://open.weixin.qq.com/
3、一鍵分享功能的集成
使用ShareSDK進行分享,如果你不需要進行定制開發(fā)的話,就可以使用ShareSDK里面自帶的一鍵分享模塊。使用之前別忘記把ShareSDK中的jar包和ShareSDK.xml放到指定位置哦(配置文檔里面都有,慢慢看即可)。
在application節(jié)點下注冊下面的Activity如圖所示:

注意:將紅框部分的數(shù)字改成在騰訊開放平臺申請到的AppId即可。
如果項目集成了微信,還需要添加以下WXEntryActivity,不然的話,mob后臺無法做微信的分享統(tǒng)計:(在工程的包下新建wxapi目錄再放置WXEntryActivity)
<!-- 微信分享配置 --> <activity android:name=".wxapi.WXEntryActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
WXEntryActivity.java代碼如下:
/*
* 官網(wǎng)地站:http://www.mob.com
* 技術(shù)支持QQ: 4006852216
* 官方微信:ShareSDK (如果發(fā)布新版本的話,我們將會第一時間通過微信將版本更新內(nèi)容推送給您。如果使用過程中有任何問題,也可以通過微信與我們?nèi)〉寐?lián)系,我們將會在24小時內(nèi)給予回復(fù))
*
* Copyright (c) 2013年 mob.com. All rights reserved.
*/
package com.example.haoyunhl.controller.wxapi;
import android.content.Intent;
import android.widget.Toast;
import cn.sharesdk.wechat.utils.WXAppExtendObject;
import cn.sharesdk.wechat.utils.WXMediaMessage;
import cn.sharesdk.wechat.utils.WechatHandlerActivity;
/** 微信客戶端回調(diào)activity示例 */
public class WXEntryActivity extends WechatHandlerActivity {
/**
* 處理微信發(fā)出的向第三方應(yīng)用請求app message
* <p>
* 在微信客戶端中的聊天頁面有“添加工具”,可以將本應(yīng)用的圖標添加到其中
* 此后點擊圖標,下面的代碼會被執(zhí)行。Demo僅僅只是打開自己而已,但你可
* 做點其他的事情,包括根本不打開任何頁面
*/
public void onGetMessageFromWXReq(WXMediaMessage msg) {
if (msg != null) {
Intent iLaunchMyself = getPackageManager().getLaunchIntentForPackage(getPackageName());
startActivity(iLaunchMyself);
}
}
/**
* 處理微信向第三方應(yīng)用發(fā)起的消息
* <p>
* 此處用來接收從微信發(fā)送過來的消息,比方說本demo在wechatpage里面分享
* 應(yīng)用時可以不分享應(yīng)用文件,而分享一段應(yīng)用的自定義信息。接受方的微信
* 客戶端會通過這個方法,將這個信息發(fā)送回接收方手機上的本demo中,當作
* 回調(diào)。
* <p>
* 本Demo只是將信息展示出來,但你可做點其他的事情,而不僅僅只是Toast
*/
public void onShowMessageFromWXReq(WXMediaMessage msg) {
if (msg != null && msg.mediaObject != null
&& (msg.mediaObject instanceof WXAppExtendObject)) {
WXAppExtendObject obj = (WXAppExtendObject) msg.mediaObject;
Toast.makeText(this, obj.extInfo, Toast.LENGTH_SHORT).show();
}
}
}
下面你就可以調(diào)用一鍵分享功能進行簡單的分享了,記住在調(diào)用之前一點要先調(diào)用ShareSDK.initSDK(this)這個方法。
說明:一鍵分享雖然簡單,但是如果想要對一鍵分享界面進行修改時比較麻煩的,聽說現(xiàn)在版本修改界面好像方便很多了?(不清楚,兄弟你可以去集成文檔瞧瞧)。下面我就來介紹自定義的分享界面。
4、自定義分享界面的開發(fā)
先看效果圖:

下面就來詳細介紹這個分享界面的開發(fā)
界面樣式的布局相信大家應(yīng)該都很熟悉了,我這里就不貼樣式布局的代碼了。我在開發(fā)中將分享功能集成到了一個組件中(ShareDialog)。詳細代碼如下:
package com.mobile.develop.framework.dialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface.*;
import android.view.Display;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.example.haoyunhl.controller.R;
public class ShareDialog {
private Dialog mDialog;
//取消分享
private TextView txtCancle;
private OnClickListener mOnCancleListener;
//微信分享
private LinearLayout mWeChatShare;
private OnClickListener mOnWeChatShareListener;
//微信朋友圈分享
private LinearLayout mWeChatFriendShare;
private OnClickListener mOnWeChatFriendShareListener;
//QQ分享
private LinearLayout mQQShare;
private OnClickListener mOnQQShareListener;
private Context mContext;
private Display display;
public ShareDialog(Context context){
mContext=context;
//獲取屏幕對象
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
display = windowManager.getDefaultDisplay();
}
//設(shè)置微信分享
public ShareDialog setOnWeChatShare(OnClickListener weChatShareListener){
mOnWeChatShareListener=weChatShareListener;
return this;
}
//設(shè)置分享朋友圈
public ShareDialog setOnWeChatFriendShare(OnClickListener weChatFriendShareListener){
mOnWeChatFriendShareListener=weChatFriendShareListener;
return this;
}
//QQ分享
public ShareDialog setOnQQShare(OnClickListener qqShareListener){
mOnQQShareListener=qqShareListener;
return this;
}
public ShareDialog setOnCancleListener(OnClickListener cancleListener){
mOnCancleListener=cancleListener;
return this;
}
public void show(){
mDialog.show();
}
public void dismiss(){
mDialog.dismiss();
}
/**
* 創(chuàng)建BaseDialog實例
* @return
*/
public ShareDialog builder(){
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.share_dialg_style, null);
//設(shè)置彈出框橫向鋪滿整個屏幕
view.setMinimumWidth(display.getWidth());
mDialog = new Dialog(mContext, R.style.ActionSheetDialogStyle);
//設(shè)置dialog彈出后會點擊屏幕,dialog不消失;點擊物理返回鍵dialog消失
mDialog.setCanceledOnTouchOutside(true);
Window dialogWindow = mDialog.getWindow();
dialogWindow.setGravity(Gravity.CENTER | Gravity.BOTTOM);
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
lp.x = 0;
lp.y = 0;
dialogWindow.setAttributes(lp);
//設(shè)置點擊隱藏
txtCancle=(TextView)view.findViewById(R.id.txtCancle);
txtCancle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mOnCancleListener != null) {
mOnCancleListener.onClick(mDialog, Dialog.BUTTON_NEGATIVE);
}
dismiss();
}
});
//微信分享
mWeChatShare=(LinearLayout)view.findViewById(R.id.mWeChatShare);
mWeChatShare.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mOnWeChatShareListener != null) {
mOnWeChatShareListener.onClick(mDialog, Dialog.BUTTON_POSITIVE);
}
dismiss();
}
});
//朋友圈分享
mWeChatFriendShare=(LinearLayout)view.findViewById(R.id.mWeChatFriendShare);
mWeChatFriendShare.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mOnWeChatFriendShareListener!=null) {
mOnWeChatFriendShareListener.onClick(mDialog, Dialog.BUTTON_POSITIVE);
}
dismiss();
}
});
//QQ分享
mQQShare=(LinearLayout)view.findViewById(R.id.mQQShare);
mQQShare.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mOnQQShareListener!=null){
mOnQQShareListener.onClick(mDialog,Dialog.BUTTON_POSITIVE);
}
}
});
mDialog.setContentView(view);
return this;
}
}
我們自定義分享時只需要重寫SharePlatform.java即可。在這個文件中通過不同的分支,來執(zhí)行不同的分享邏輯。代碼如下:
package com.example.haoyunhl.utils;
import android.app.Activity;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.widget.Toast;
import java.util.HashMap;
import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.PlatformActionListener;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.tencent.qq.QQ;
import cn.sharesdk.wechat.friends.Wechat;
import cn.sharesdk.wechat.moments.WechatMoments;
public class SharePlatform extends Activity implements PlatformActionListener {
private Context context;
public SharePlatform(Context context){
this.context=context;
ShareSDK.initSDK(this.context);
}
/**
* 分享回調(diào)
*/
@Override
public void onCancel(Platform arg0, int arg1) {
//回調(diào)的地方是子線程,進行UI操作要用handle處理
handler.sendEmptyMessage(4);
}
@Override
public void onComplete(Platform arg0, int arg1, HashMap<String, Object> arg2) {
//回調(diào)的地方是子線程,進行UI操作要用handle處理
if (arg0.getName().equals(Wechat.NAME)) {
handler.sendEmptyMessage(1);
} else if (arg0.getName().equals(WechatMoments.NAME)) {
handler.sendEmptyMessage(2);
} else if (arg0.getName().equals(QQ.NAME)) {
handler.sendEmptyMessage(3);
}
}
@Override
public void onError(Platform arg0, int arg1, Throwable arg2) {
//回調(diào)的地方是子線程,進行UI操作要用handle處理
arg2.printStackTrace();
Message msg = new Message();
msg.what = 5;
msg.obj = arg2.getMessage();
handler.sendMessage(msg);
}
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
Toast.makeText(context, "微信分享成功", Toast.LENGTH_LONG).show();
break;
case 2:
Toast.makeText(context, "朋友圈分享成功", Toast.LENGTH_LONG).show();
break;
case 3:
Toast.makeText(context, "QQ分享成功", Toast.LENGTH_LONG).show();
break;
case 4:
Toast.makeText(context, "取消分享", Toast.LENGTH_LONG).show();
break;
case 5:
Toast.makeText(context, "分享失敗", Toast.LENGTH_LONG).show();
break;
default:
break;
}
}
};
/**
* 進行分享
*
* @param shareType
* @param shareTitle
* @param shareText
* @param shareImageUrl
* @param shareUrl
*/
public void share(String shareType, String shareTitle, String shareText, String shareImageUrl, String shareUrl) {
Platform.ShareParams sharePlatform = new Platform.ShareParams();
Platform platform;
/**
* 如果是微信朋友圈分享
*/
if(shareType.equalsIgnoreCase(ShareConfig.WeChatMomentsShare)){
sharePlatform.setShareType(Platform.SHARE_WEBPAGE);
setSharePlatform(sharePlatform,shareTitle, shareText, shareImageUrl);
if(shareUrl!=null && !shareUrl.equalsIgnoreCase("")) {
sharePlatform.setUrl(shareUrl);
}
platform = ShareSDK.getPlatform(WechatMoments.NAME);
platform.setPlatformActionListener(this);
platform.share(sharePlatform);
}
/**
* 如果是微信分享
*/
else if(shareType.equalsIgnoreCase(ShareConfig.WeChatShare)){
sharePlatform.setShareType(Platform.SHARE_WEBPAGE);
setSharePlatform(sharePlatform, shareTitle, shareText, shareImageUrl);
if(shareUrl!=null && !shareUrl.equalsIgnoreCase("")) {
sharePlatform.setUrl(shareUrl);
}
platform = ShareSDK.getPlatform(Wechat.NAME);
platform.setPlatformActionListener(this);
platform.share(sharePlatform);
}
/**
* 如果是QQ分享
*/
else {
setSharePlatform(sharePlatform, shareTitle, shareText, shareImageUrl);
if(shareUrl!=null && !shareUrl.equalsIgnoreCase("")) {
sharePlatform.setTitleUrl(shareUrl);
}
platform = ShareSDK.getPlatform(QQ.NAME);
platform.setPlatformActionListener(this);
platform.share(sharePlatform);
}
}
private void setSharePlatform(Platform.ShareParams sharePlatform,String shareTitle, String shareText, String shareImageUrl){
sharePlatform.setTitle(shareTitle);
if(shareText!=null && !shareText.equalsIgnoreCase("")) {
sharePlatform.setText(shareText);
}
if(shareImageUrl!=null && !shareImageUrl.equalsIgnoreCase("")) {
sharePlatform.setImageUrl(shareImageUrl);
sharePlatform.setImagePath(shareImageUrl);
}
}
}
我們在導(dǎo)航欄中只需要如此調(diào)用即可實現(xiàn)分享功能:

以上這篇Android中使用ShareSDK集成分享功能的實例代碼就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于Android內(nèi)存緩存LruCache的使用及其源碼解析
LruCache作為內(nèi)存緩存,使用強引用方式緩存有限個數(shù)據(jù),當緩存的某個數(shù)據(jù)被訪問時,它就會被移動到隊列的頭部,本文詳細介紹了關(guān)于Android內(nèi)存緩存LruCache的使用及其源碼解析,需要的朋友可以參考下2023-05-05
Android Studio 報錯failed to create jvm error code -4的解決方法
這篇文章主要介紹了Android Studio 在安裝后啟動報錯failed to create jvm error code -4的解決方法,需要的朋友可以參考下2014-05-05
myeclipse android環(huán)境搭建圖文教程
在從事android應(yīng)用開發(fā)過程中,搭配環(huán)境是所有開始的第一步,本文將介紹myeclipse android環(huán)境搭建圖文教程,希望可以幫助大家完成android開發(fā)之旅2012-11-11
Android Material Design 陰影實現(xiàn)示例
這篇文章主要介紹了Android Material Design 陰影實現(xiàn)示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04

