Android中使用ShareSDK集成分享功能的实例代码

引言

现在APP开发集成分享功能已经是非常普遍的需求了。其他集成分享技术我没有使用过,今天我就来介绍下使用ShareSDK来进行分享功能开发的一些基本步骤和注意点,帮助朋友们避免一些坑。好了,下面切入正题正式开始介绍。

1、ShareSDK开发包及配置

这个不用多说,去他们官网看找SDK开发包和集成文档即可。

Android版本地址:http://www.mob.com/downloadDetail/ShareSDK/android

注意:记得要注册ShareSDK账号获取AppKey哦。这些集成文档里面应该都有,仔细看即可。

2、去各大应用平台注册获取AppKey和AppSecret

这个步骤要看你们团队想分享到哪些平台了,一般都是微博和微信。所以一般都去新浪微博和微信开发平台注册。

新浪开发平台:http://open.weibo.com/

腾讯开放平台:https://open.weixin.qq.com/

3、一键分享功能的集成

使用ShareSDK进行分享,如果你不需要进行定制开发的话,就可以使用ShareSDK里面自带的一键分享模块。使用之前别忘记把ShareSDK中的jar包和ShareSDK.xml放到指定位置哦(配置文档里面都有,慢慢看即可)。

在application节点下注册下面的Activity如图所示:

注意:将红框部分的数字改成在腾讯开放平台申请到的AppId即可。

如果项目集成了微信,还需要添加以下WXEntryActivity,不然的话,mob后台无法做微信的分享统计:(在工程的包下新建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代码如下:

/*
 * 官网地站:http://www.mob.com
 * 技术支持QQ: 4006852216
 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复)
 *
 * 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;
/** 微信客户端回调activity示例 */
public class WXEntryActivity extends WechatHandlerActivity {
 /**
  * 处理微信发出的向第三方应用请求app message
  * <p>
  * 在微信客户端中的聊天页面有“添加工具”,可以将本应用的图标添加到其中
  * 此后点击图标,下面的代码会被执行。Demo仅仅只是打开自己而已,但你可
  * 做点其他的事情,包括根本不打开任何页面
  */
 public void onGetMessageFromWXReq(WXMediaMessage msg) {
  if (msg != null) {
   Intent iLaunchMyself = getPackageManager().getLaunchIntentForPackage(getPackageName());
   startActivity(iLaunchMyself);
  }
 }
 /**
  * 处理微信向第三方应用发起的消息
  * <p>
  * 此处用来接收从微信发送过来的消息,比方说本demo在wechatpage里面分享
  * 应用时可以不分享应用文件,而分享一段应用的自定义信息。接受方的微信
  * 客户端会通过这个方法,将这个信息发送回接收方手机上的本demo中,当作
  * 回调。
  * <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();
  }
 }
}

下面你就可以调用一键分享功能进行简单的分享了,记住在调用之前一点要先调用ShareSDK.initSDK(this)这个方法。

说明:一键分享虽然简单,但是如果想要对一键分享界面进行修改时比较麻烦的,听说现在版本修改界面好像方便很多了?(不清楚,兄弟你可以去集成文档瞧瞧)。下面我就来介绍自定义的分享界面。

4、自定义分享界面的开发

先看效果图:

下面就来详细介绍这个分享界面的开发

界面样式的布局相信大家应该都很熟悉了,我这里就不贴样式布局的代码了。我在开发中将分享功能集成到了一个组件中(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();
 }
 //设置微信分享
 public ShareDialog setOnWeChatShare(OnClickListener weChatShareListener){
  mOnWeChatShareListener=weChatShareListener;
  return this;
 }
 //设置分享朋友圈
 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();
 }
 /**
  * 创建BaseDialog实例
  * @return
  */
 public ShareDialog builder(){
  LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  View view = inflater.inflate(R.layout.share_dialg_style, null);
  //设置弹出框横向铺满整个屏幕
  view.setMinimumWidth(display.getWidth());
  mDialog = new Dialog(mContext, R.style.ActionSheetDialogStyle);
  //设置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);
  //设置点击隐藏
  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即可。在这个文件中通过不同的分支,来执行不同的分享逻辑。代码如下:

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);
 }
 /**
  * 分享回调
  */
 @Override
 public void onCancel(Platform arg0, int arg1) {
  //回调的地方是子线程,进行UI操作要用handle处理
  handler.sendEmptyMessage(4);
 }
 @Override
 public void onComplete(Platform arg0, int arg1, HashMap<String, Object> arg2) {
  //回调的地方是子线程,进行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) {
  //回调的地方是子线程,进行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);
  }
 }
}

我们在导航栏中只需要如此调用即可实现分享功能:

以上这篇Android中使用ShareSDK集成分享功能的实例代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Android使用WebView实现截图分享功能

    在APP项目的开发过程中,经常会用到分享图片的功能,有时候还需要根据当前用户信息获取指定的分享图片,比如要求在用户分享图中显示用户名.Uid.用户头像等信息.想到的实现方法主要有两点: 1.通过android SDK自带的Canvas方法进行绘制. 2.通过webView实现客户端与H5交互,然后将H5界面做截图处理. 本文主要介绍第二种方式的实现过程,第一种方式的实现方法,后续有时间会在博客中做说明,下面开始本文内容. 首先确定我们要实现的逻辑: 1.客户端与H5的交互,客户端将用户信息(用户

  • Android ShareSDK快速实现分享功能

    第一步 :获取ShareSDK 为了集成ShareSDK,您首先需要到ShareSDK官方网站注册并且创建应用,获得ShareSDK的Appkey,然后到SDK的下载页面下载SDK的压缩包,解压以后可以得到如下图的目录结构: ShareSDK在"ShareSDK for Android"目录下,此目录中的"Libs"包含"MainLibs"和"OnekeyShare" 分别是ShareSDK的核心库和"快捷分享&qu

  • Android 第三方登录、分享(ShareSDK、友盟)

    为下边的项目做准备,写一个第三方登录.分享的demo.分别使用sharesdk和友盟来实现. 先说一下我对两者的使用上的感觉,个人感觉sharesdk比友盟更好一点,好在哪里呢?好在人工服务上.在集成的过程中遇到了各种问题,但是sharesdk的人工服务做的很好,能给答疑解惑,提供解决问题的方法! 接下来上代码(本文使用android studio开发,sharesdk版本v2.7.7,友盟版本v6.0.0): 一.使用sharesdk(sharesdk版本v2.7.7)来集成: 1.要去官网:

  • Android实现原生分享功能

    本文实例为大家分享了Android实现分享功能的具体代码,供大家参考,具体内容如下 因为公司的需求,最近一直在做分享这一块的功能.大概有这样几种思路: 1.使用Intent调用andoird原生的分享功能: 2.使用第三方的sdk,比如ShareSdk或者友盟: 3.去对应的平台下载jar包,参考官方设计文档写出自己的分享demo,但这种一般也比较复杂,尤其搞不懂qq和微信一家公司的,为什么微信那么麻烦. 不废话了,直接上代码: 一. 新建ShareUtil.java类 import java.

  • Android使用ShareSDK实现应用分享的功能

    简介 今天给大家带来的是使用ShareSDK实现应用分享的功能.下面我们先看下效果图. 效果图 步骤 1. 获取AppKey 访问mob官网http://mob.com注册账号–>点击头像进入"后台中心"–>选择shareSDK–>添加应用–>获取AppKey. 点击添加后,就可以生成项目对应的AppKey. 2. SDK下载 访问mob官网http://mob.com下载最新的sdk. 然后点击一键下载就可以下载最新的sdk. 3. sdk目录结构 上面这张图

  • Android自带API实现分享功能

    前言 在做项目的过程中需要实现文字和图片的分享,有两种方式: 1. 使用android sdk中自带的Intent.ACTION_SEND实现分享. 2. 使用shareSDK.友盟等第三方的服务. 鉴于使用的方便,此次只介绍使用Android sdk中自带的方式来实现分享的功能. 分享文字 /** * 分享文字内容 * * @param dlgTitle * 分享对话框标题 * @param subject * 主题 * @param content * 分享内容(文字) */ private

  • Android系统自带分享图片功能

    简介 记录一个利用系统分享功能进行图片分享的工具类(代码是用Kotlin写的,都是比较简单的语法,部分可能需要自定义的地方都已经标出).调用方式比较简单: Util.startShareImage(this) //this为当前的Activity实例 权限 记得添加文件操作权限, 另外需要注意6.0版本以上的权限管理 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <

  • Android中使用ShareSDK集成分享功能的实例代码

    引言 现在APP开发集成分享功能已经是非常普遍的需求了.其他集成分享技术我没有使用过,今天我就来介绍下使用ShareSDK来进行分享功能开发的一些基本步骤和注意点,帮助朋友们避免一些坑.好了,下面切入正题正式开始介绍. 1.ShareSDK开发包及配置 这个不用多说,去他们官网看找SDK开发包和集成文档即可. Android版本地址:http://www.mob.com/downloadDetail/ShareSDK/android. 注意:记得要注册ShareSDK账号获取AppKey哦.这些

  • Android 中TeaPickerView数据级联选择器功能的实例代码

    Github地址 YangsBryant/TeaPickerView (Github排版比较好,建议进入这里查看详情,如果觉得好,点个star吧!) 引入module allprojects { repositories { google() jcenter() maven { url 'https://www.jitpack.io' } } } implementation 'com.github.YangsBryant:TeaPickerView:1.0.2' 主要代码 public cla

  • Android仿微信右滑返回功能的实例代码

    先上效果图,如下: 先分析一下功能的主要技术点,右滑即手势判断,当滑到一直距离时才执行返回,并且手指按下的位置是在屏幕的最左边(这个也是有一定范围的),  这些可以实现onTouchEvent来实现. 接着就是返回时,有滑动效果,很显然这个是Acitivty切换动画实现的.好啦,分析完了就开干.下面上代码: @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()){ case Mot

  • Android中View跟随手指滑动效果的实例代码

    本文讲述了Android中View跟随手指滑动效果的实例代码.分享给大家供大家参考,具体如下: 1.android View 主要6种滑动方法,分别是 layout() offsetLeftAndRight()和offsetTopAndBottom() LayoutParams scrollBy()和 scrollTo() Scroller 动画 2.实现效果图 3.自定义中使用layout()方法实习view的滑动 public class MoveView extends View { pr

  • android中图片加载到内存的实例代码

    本文演示android中图片加载到内存 首先设计界面: 代码如下: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="matc

  • Android中关于递归和二分法的算法实例代码

    // 1. 实现一个函数,在一个有序整型数组中二分查找出指定的值,找到则返回该值的位置,找不到返回 -1. package demo; public class Mytest { public static void main(String[] args) { int[] arr={1,2,5,9,11,45}; int index=findIndext(arr,0,arr.length-1,12); System.out.println("index="+index); } // 1

  • Android 中TabLayout自定义选择背景滑块的实例代码

    TabLayout是Android 的Material Design包中的一个控件,可以和V4包中的ViewPager搭配产生一个联动的效果.这里我自定义了一个滑块能够跟随TabLayout进行滑动选择的SliderLayout.效果见下图(白色方框): 下面是SliderLayout的源码: import android.content.Context; import android.content.res.TypedArray; import android.graphics.drawabl

  • Android加载loading对话框的功能及实例代码(不退出沉浸式效果)

    一.自定义Dialog 在沉浸式效果下,当界面弹出对话框时,对话框将获取到焦点,这将导致界面退出沉浸式效果,那么是不是能通过屏蔽对话框获取焦点来达到不退出沉浸式的目的呢.说干就干,我们先来看一下改善后的效果图. 普通对话框弹出效果 LoadingDialog弹出效果 自定义LoadingDialog public class LoadingDialog extends Dialog { public LoadingDialog(Context context) { super(context);

  • Android 中图片和按钮按下状态变化实例代码解析

    1.图片设置背景选择器,以便点按或设置选中与否,背景切换 res/drawable/selector_settings_item_back.xml <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_focused

  • Android 使用fast-verification实现验证码填写功能的实例代码

    fast-verification 验证码的验证环节现在是移动APP中不可缺少的一部分,直接使用EditText组件虽然方便但缺少了一些美感,使用fast-verification,让实现验证码变得更简单. 依赖到项目项目根gradle中添加 maven { url 'https://www.jitpack.io' } 示例: allprojects { repositories { ... maven { url 'https://www.jitpack.io' } } } 在需要使用的mod

随机推荐