美文网首页
ShareSDK 封装使用

ShareSDK 封装使用

作者: wuchao226 | 来源:发表于2019-01-07 11:45 被阅读20次

ShareSDK 的集成请看官网集成文档 ShareSDK集成

封装 ShareManager

1、先创建一个分享数据的实体类

/**
 * @desciption: 要分享的数据实体
 */
public class ShareData {

    /**
     * 要分享到的平台的参数
     */
    public Platform.ShareParams mShareParams;
    /**
     * 要分享到的平台
     */
    public ShareManager.PlatformType mPlatformType;
}

2、ShareManager 类完整代码

/**
 * @desciption: 分享功能统一入口,负责发送数据到指定平台,可以优化为一个单例模式
 */
public class ShareManager {

    /**
     * 要分享到的平台
     */
    private Platform mCurrentPlatform;

    private ShareManager() {
    }

    public static ShareManager getInstance() {
        return Holder.INSTANCE;
    }

    /**
     * 第一个执行的方法,最好在程序入口入执行
     *
     * @param context context
     */
    public static void initSDK(Context context) {
        MobSDK.init(context);
    }

    /**
     * 分享数据到不同的平台
     */
    public void shareData(ShareData shareData, PlatformActionListener listener) {
        switch (shareData.mPlatformType) {
            case QQ:
                mCurrentPlatform = ShareSDK.getPlatform(QQ.name());
                break;
            case QZone:
                mCurrentPlatform = ShareSDK.getPlatform(QZone.name());
                break;
            case WeChat:
                mCurrentPlatform = ShareSDK.getPlatform(WeChat.name());
                break;
            case WechatMoments:
                mCurrentPlatform = ShareSDK.getPlatform(WechatMoments.name());
                break;
            default:
        }
        //由应用层去处理回调,分享平台不关心。
        mCurrentPlatform.setPlatformActionListener(listener);
        mCurrentPlatform.share(shareData.mShareParams);
    }

    /**
     * 应用程序需要的平台
     */
    public enum PlatformType {
        //qq
        QQ,
        QZone,
        WeChat,
        WechatMoments
    }

    private static class Holder {
        private static final ShareManager INSTANCE = new ShareManager();
    }
}

以上是ShareManager的完成功能代码,如需其他的功能可以根据需要添加。

自定义分享UI界面

1、自定义Dialog继承Dialog,初始化UI界面数据

/**
 * @desciption: 分享Dialog
 */
public class ShareDialog extends Dialog implements View.OnClickListener {

    private Context mContext;
    /**
     * 是否显示下载
     */
    private boolean isShowDownload;
    private DisplayMetrics mDisplayMetrics;

    /**
     * UI
     */
    private RelativeLayout mWeixinLayout;
    private RelativeLayout mWeixinMomentLayout;
    private RelativeLayout mQQLayout;
    private RelativeLayout mQZoneLayout;
    private RelativeLayout mDownloadLayout;
    private TextView mCancelView;

    /**
     * share relative
     */
    /**
     * 指定分享类型
     */
    private int mShareType;
    /**
     * 指定分享内容标题
     */
    private String mShareTitle;
    /**
     * 指定分享内容文本
     */
    private String mShareText;
    /**
     * 指定分享本地图片
     */
    private String mSharePhoto;
    /**
     * titleUrl是标题的网络链接,仅在人人网和QQ空间使用
     */
    private String mShareTileUrl;
    /**
     * siteUrl是分享此内容的网站地址,仅在QQ空间使用
     */
    private String mShareSiteUrl;
    /**
     * site是分享此内容的网站名称,仅在QQ空间使用
     */
    private String mShareSite;
    /**
     * url仅在微信(包括好友和朋友圈)中使用
     */
    private String mUrl;
   /**
     * 分享回调监听
     */
    private PlatformActionListener mListener = new PlatformActionListener() {
        @Override
        public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {
        }

        @Override
        public void onError(Platform platform, int i, Throwable throwable) {
        }

        @Override
        public void onCancel(Platform platform, int i) {
        }
    };

    public ShareDialog(@NonNull Context context, boolean isShowDownload) {
        super(context, R.style.SheetDialogStyle);
        mContext = context;
        this.isShowDownload = isShowDownload;
        mDisplayMetrics = mContext.getResources().getDisplayMetrics();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dialog_share_layout);
        initView();
    }

    private void initView() {
        //通过获取到dialog的window来控制dialog的宽高及位置
        Window window = getWindow();
        if (window != null) {
            window.setGravity(Gravity.BOTTOM);
            WindowManager.LayoutParams layoutParams = window.getAttributes();
            layoutParams.width = mDisplayMetrics.widthPixels;
            window.setAttributes(layoutParams);
        }
        mWeixinLayout = findViewById(R.id.weixin_layout);
        mWeixinLayout.setOnClickListener(this);
        mWeixinMomentLayout = findViewById(R.id.moment_layout);
        mWeixinMomentLayout.setOnClickListener(this);
        mQQLayout = findViewById(R.id.qq_layout);
        mQQLayout.setOnClickListener(this);
        mQZoneLayout = findViewById(R.id.qzone_layout);
        mQZoneLayout.setOnClickListener(this);
        mCancelView = findViewById(R.id.cancel_view);
        mCancelView.setOnClickListener(this);
    }
    /**
     * 指定分享内容标题
     */
    public void setShareTitle(String title) {
        mShareTitle = title;
    }

    /**
     * 指定分享本地图片
     */
    public void setImagePhoto(String photo) {
        mSharePhoto = photo;
    }

    /**
     * 指定分享类型
     */
    public void setShareType(int type) {
        mShareType = type;
    }

    /**
     * site是分享此内容的网站名称,仅在QQ空间使用
     */
    public void setShareSite(String site) {
        mShareSite = site;
    }

    /**
     * titleUrl是标题的网络链接,仅在人人网和QQ空间使用
     */
    public void setShareTitleUrl(String titleUrl) {
        mShareTileUrl = titleUrl;
    }

    /**
     * url仅在微信(包括好友和朋友圈)中使用
     */
    public void setUrl(String url) {
        mUrl = url;
    }

    /**
     * siteUrl是分享此内容的网站地址,仅在QQ空间使用
     */
    public void setShareSiteUrl(String siteUrl) {
        mShareSiteUrl = siteUrl;
    }

    /**
     * 指定分享内容文本
     */
    public void setShareText(String text) {
        mShareText = text;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.weixin_layout:
                shareData(ShareManager.PlatformType.WeChat);
                break;
            case R.id.moment_layout:
                shareData(ShareManager.PlatformType.WechatMoments);
                break;
            case R.id.qq_layout:
                shareData(ShareManager.PlatformType.QQ);
                break;
            case R.id.qzone_layout:
                shareData(ShareManager.PlatformType.QZone);
                break;
            case R.id.cancel_view:
                dismiss();
                break;
            default:
        }
    }

    /**
     * 分享数据
     */
    private void shareData(ShareManager.PlatformType platformType) {
        ShareData mData = new ShareData();
        Platform.ShareParams params = new Platform.ShareParams();
        params.setShareType(mShareType);
        params.setTitle(mShareTitle);
        params.setTitleUrl(mShareTileUrl);
        params.setSite(mShareSite);
        params.setSiteUrl(mShareSiteUrl);
        params.setText(mShareText);
        params.setImagePath(mSharePhoto);
        params.setUrl(mUrl);
        mData.mPlatformType = platformType;
        mData.mShareParams = params;
        ShareManager.getInstance().shareData(mData, mListener);
    }
}

ShareDialog 样式Style

<style name="SheetDialogStyle" parent="@android:style/Theme.Dialog">
        <item name="android:windowBackground">@android:color/white</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowFrame">@null</item>
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowAnimationStyle">@style/ActionSheetDialogAnimation</item>
    </style>
    <style name="ActionSheetDialogAnimation" parent="@android:style/Animation.Dialog">
        <item name="android:windowEnterAnimation">@anim/action_bottom_in</item>
        <item name="android:windowExitAnimation">@anim/action_bottom_out</item>
    </style>

ShareDialog 底部进入和退出动画

//action_bottom_in
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:duration="200"
     android:fillAfter="true">
    <translate
        android:fromYDelta="100%"
        android:toYDelta="0"/>
</set>

//action_bottom_out
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:duration="200"
     android:fillAfter="true">
    <translate
        android:fromYDelta="0"
        android:toYDelta="100%"/>
</set>

在Activity中使用分享Dialog

ShareDialog dialog = new ShareDialog(this, true);
dialog.setShareType(Platform.SHARE_IMAGE);
dialog.setShareTitle(getString(R.string.imooc));
dialog.setShareTitleUrl(getString(R.string.imooc_site));
dialog.setShareText(getString(R.string.imooc));
dialog.setShareSite(getString(R.string.imooc));
dialog.setShareTitle(getString(R.string.imooc));
dialog.setImagePhoto(mPhotoLists.get(currentPos));
dialog.setUrl(mPhotoLists.get(currentPos));
dialog.show();

相关文章

  • ShareSDK 封装使用

    ShareSDK 的集成请看官网集成文档 ShareSDK集成。 封装 ShareManager 1、先创建一个分...

  • ShareSDK集成及自定义封装使用

    ShareSDK集成及自定义封装使用 市面上APP使用较为广泛的分享功能SDKShareSDK集成开发的笔记 目录...

  • Sharesdk封装

    Sharesdk封装 对于分享的使用我们经常借用第三方平台来实现,这样可以高效的更新到最新的各个平台的最新的sdk...

  • 开发中问题及解决方法

    使用ShareSDK [WXApi isWXAppInstalled]一直返回NO问题使用ShareSDK集成了微...

  • 关于分享的小见解

    关于分享----shareSDK使用中遇到的一些问题 首先为shareSDK打个广告,shareSDK拥有下面这些...

  • ShareSDK

    使用ShareSDK授权相关功能实现用户第三方登录。流程如下所示: 1.使用ShareSDK中的hasAuthor...

  • ShareSDK 分享

    ShareSDK-for-iOS 比较方便使用

  • 嘟嘟牛在线App踩过的坑

    ShareSDK分享 问题1:最近使用ShareSDK经常出现微信不能分享? 答:thumbImage: 这个要设...

  • Android ShareSDK桥接技术

    ShareSDK本身基于android原生上集成使用的,但是为了能让广大开发者可以在各种引擎上使用ShareSDK...

  • 对ShareSDK分享的封装

    这几天写项目的时候,发现,有好多的控制器都有分享.每一次,分享的内容虽然不一样,但是格式大致一样,而且代码繁多,出...

网友评论

      本文标题:ShareSDK 封装使用

      本文链接:https://www.haomeiwen.com/subject/ypgyrqtx.html