怎么在Android中使用ShareSDK實現(xiàn)一個分享功能?針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
創(chuàng)新互聯(lián)服務(wù)項目包括株洲網(wǎng)站建設(shè)、株洲網(wǎng)站制作、株洲網(wǎng)頁制作以及株洲網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,株洲網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到株洲省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
1、ShareSDK開發(fā)包及配置
2、去各大應(yīng)用平臺注冊獲取AppKey和AppSecret
這個步驟要看你們團(tuán)隊想分享到哪些平臺了,一般都是微博和微信。所以一般都去新浪微博和微信開發(fā)平臺注冊。
新浪開發(fā)平臺:http://open.weibo.com/
騰訊開放平臺:https://open.weixin.qq.com/
3、一鍵分享功能的集成
使用ShareSDK進(jìn)行分享,如果你不需要進(jìn)行定制開發(fā)的話,就可以使用ShareSDK里面自帶的一鍵分享模塊。使用之前別忘記把ShareSDK中的jar包和ShareSDK.xml放到指定位置哦(配置文檔里面都有,慢慢看即可)。
在application節(jié)點下注冊下面的Activity如圖所示:
注意:將紅框部分的數(shù)字改成在騰訊開放平臺申請到的AppId即可。
如果項目集成了微信,還需要添加以下WXEntryActivity,不然的話,mob后臺無法做微信的分享統(tǒng)計:(在工程的包下新建wxapi目錄再放置WXEntryActivity)
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 ** 在微信客戶端中的聊天頁面有“添加工具”,可以將本應(yīng)用的圖標(biāo)添加到其中 * 此后點擊圖標(biāo),下面的代碼會被執(zhí)行。Demo僅僅只是打開自己而已,但你可 * 做點其他的事情,包括根本不打開任何頁面 */ public void onGetMessageFromWXReq(WXMediaMessage msg) { if (msg != null) { Intent iLaunchMyself = getPackageManager().getLaunchIntentForPackage(getPackageName()); startActivity(iLaunchMyself); } } /** * 處理微信向第三方應(yīng)用發(fā)起的消息 *
* 此處用來接收從微信發(fā)送過來的消息,比方說本demo在wechatpage里面分享 * 應(yīng)用時可以不分享應(yīng)用文件,而分享一段應(yīng)用的自定義信息。接受方的微信 * 客戶端會通過這個方法,將這個信息發(fā)送回接收方手機(jī)上的本demo中,當(dāng)作 * 回調(diào)。 *
* 本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)用一鍵分享功能進(jìn)行簡單的分享了,記住在調(diào)用之前一點要先調(diào)用ShareSDK.initSDK(this)這個方法。
說明:一鍵分享雖然簡單,但是如果想要對一鍵分享界面進(jìn)行修改時比較麻煩的,聽說現(xiàn)在版本修改界面好像方便很多了?(不清楚,兄弟你可以去集成文檔瞧瞧)。下面我就來介紹自定義的分享界面。
4、自定義分享界面的開發(fā)
先看效果圖:
下面就來詳細(xì)介紹這個分享界面的開發(fā)
界面樣式的布局相信大家應(yīng)該都很熟悉了,我這里就不貼樣式布局的代碼了。我在開發(fā)中將分享功能集成到了一個組件中(ShareDialog)。詳細(xì)代碼如下:
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)的地方是子線程,進(jìn)行UI操作要用handle處理 handler.sendEmptyMessage(4); } @Override public void onComplete(Platform arg0, int arg1, HashMaparg2) { //回調(diào)的地方是子線程,進(jìn)行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)的地方是子線程,進(jìn)行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; } } }; /** * 進(jìn)行分享 * * @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)分享功能:
關(guān)于怎么在Android中使用ShareSDK實現(xiàn)一個分享功能問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。