android微信分享小程序卡片,分享链接功能

只想看微信分享api的可以直接跳转序号3查看

1、安卓分享小程序功能(底部弹框方式)

image.png

1、底部弹框布局

<?xml version="1.0" encoding="utf-8"?>
<com.hjq.shape.layout.ShapeLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:shape_topLeftRadius="10dp"
    app:shape_topRightRadius="10dp"
    android:background="@color/color_f5f5f5">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="16sp"
        android:textColor="@color/color_333333"
        android:layout_gravity="center_horizontal"
        android:text="分享至"
        android:layout_marginTop="15dp"
        android:layout_marginBottom="15dp"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp">
        <RelativeLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1">
            <LinearLayout
                android:id="@+id/ll_wechat"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:layout_centerInParent="true">
                <ImageView
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:src="@mipmap/icon_share_wechat"
                    android:layout_gravity="center_horizontal"/>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textSize="14sp"
                    android:textColor="@color/color_333333"
                    android:layout_marginTop="5dp"
                    android:layout_gravity="center_horizontal"
                    android:text="微信好友"/>
            </LinearLayout>
        </RelativeLayout>

        <RelativeLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:visibility="gone"
            >
            <LinearLayout
                android:id="@+id/ll_circle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:layout_centerInParent="true">
                <ImageView
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:src="@mipmap/icon_share_circle"
                    android:layout_gravity="center_horizontal"/>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textSize="14sp"
                    android:textColor="@color/color_333333"
                    android:layout_marginTop="5dp"
                    android:layout_gravity="center_horizontal"
                    android:text="朋友圈"/>

            </LinearLayout>
        </RelativeLayout>

        <RelativeLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:visibility="gone"
            >
            <LinearLayout
                android:id="@+id/ll_copy"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:layout_centerInParent="true">
                <ImageView
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:src="@mipmap/icon_share_copy"
                    android:layout_gravity="center_horizontal"/>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textSize="14sp"
                    android:textColor="@color/color_333333"
                    android:layout_marginTop="5dp"
                    android:layout_gravity="center_horizontal"
                    android:text="复制链接"/>

            </LinearLayout>
        </RelativeLayout>

    </LinearLayout>

    <TextView
        android:id="@+id/tv_cancel"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="@color/white"
        android:gravity="center"
        android:textSize="16sp"
        android:textColor="@color/color_333333"
        android:text="取消"/>


</com.hjq.shape.layout.ShapeLinearLayout>

2、弹框代码

package com.example.xy.utils.share;

import android.app.Activity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;

import androidx.annotation.NonNull;

import com.blankj.utilcode.util.ToastUtils;
import com.example.xy.R;
import com.example.xy.prefer.PreferDetailNewActivity;
import com.example.xy.style_collection.StyleDetailActivity;
import com.example.xy.utils.AppSharedPreferences;
import com.example.xy.utils.Constant;
import com.example.xy.utils.Utils;
import com.example.xy.utils.WxShareUtils;
import com.google.android.material.bottomsheet.BottomSheetBehavior;
import com.google.android.material.bottomsheet.BottomSheetDialog;

public class ShareUtils {

    private Activity activity;
    private BottomSheetDialog bottomShare;
    private BottomSheetBehavior mDialogBehavior;
    private Bitmap img;
    private String content;
    private String webUrl;

    public ShareUtils(Activity activity,Bitmap img, String content,String webUrl){
        this.activity = activity;
        this.img = img;
        this.content = content;
        this.webUrl = webUrl;
    }

    //一下是分享功能webUrl
    public void bottomSheet() {
        if (bottomShare == null) {
            // 创建布局
            View view = LayoutInflater.from(activity).inflate(R.layout.dialog_bottomsheet_prefer_share, null, false);
            bottomShare = new BottomSheetDialog(activity, R.style.BottomSheetDialog);
            // 设置点击dialog外部不消失
            bottomShare.setCanceledOnTouchOutside(true);
            // 核心代码 解决了无法去除遮罩问题
            bottomShare.getWindow().setDimAmount(0f);
            // 设置布局
            bottomShare.setContentView(view);
            // 用户行为
            mDialogBehavior = BottomSheetBehavior.from((View) view.getParent());
            // dialog的高度
            ((BottomSheetBehavior<View>) mDialogBehavior).setPeekHeight(getWindowHeightShare());
            //重点
            view.findViewById(R.id.ll_wechat).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    bottomShare.dismiss();
                    WxShareUtils.shareMiniPro(activity,
                            Constant.APP_ID,
                            webUrl,
                            content,
                            content,
                            img
                    );
                }
            });
            view.findViewById(R.id.ll_copy).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    bottomShare.dismiss();
                    // 获取剪贴板管理器:
                    ClipboardManager cm = (ClipboardManager) activity.getSystemService(Context.CLIPBOARD_SERVICE);
                    ClipData mClipData = ClipData.newPlainText("Label",
                            Constant.SHARE_URL + "?id=" + AppSharedPreferences.getInstance(activity).getInviteCode()
                    );
                    // 将ClipData内容放到系统剪贴板里。
                    cm.setPrimaryClip(mClipData);
                    ToastUtils.showShort("复制成功");
                }
            });
            view.findViewById(R.id.tv_cancel).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    bottomShare.dismiss();
                }
            });
            //展示
            bottomShare.show();
            Utils.darkenBackground(activity, 0.6f);
            bottomShare.setOnDismissListener(new DialogInterface.OnDismissListener() {
                @Override
                public void onDismiss(DialogInterface dialog) {
                    Utils.darkenBackground(activity, 1f);
                }
            });
            // 重新用户的滑动状态
            mDialogBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
                @Override
                public void onStateChanged(@NonNull View bottomSheet, int newState) {
                    // 监听BottomSheet状态的改变
                    if (newState == BottomSheetBehavior.STATE_HIDDEN) {
                        bottomShare.dismiss();
                        Utils.darkenBackground(activity, 1f);
                        mDialogBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
                    }
                }

                @Override
                public void onSlide(@NonNull View bottomSheet, float slideOffset) {
                    // 监听拖拽中的回调,根据slideOffset可以做一些动画
                }
            });
        }
    }

    private int getWindowHeightShare() {
        Resources res = activity.getResources();
        DisplayMetrics displayMetrics = res.getDisplayMetrics();
        int heightPixels = displayMetrics.heightPixels;
        // 设置弹窗高度为屏幕高度的3/4
        return heightPixels - heightPixels / 4;
    }

}

3、WxShareUtils

封装了2个调用微信分享的方法

package com.example.xy.utils;

import android.content.Context;
import android.graphics.Bitmap;

import com.blankj.utilcode.util.ToastUtils;
import com.tencent.mm.opensdk.modelmsg.SendMessageToWX;
import com.tencent.mm.opensdk.modelmsg.WXMediaMessage;
import com.tencent.mm.opensdk.modelmsg.WXMiniProgramObject;
import com.tencent.mm.opensdk.modelmsg.WXWebpageObject;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;

public class WxShareUtils {
    /**
     * 分享网页类型至微信
     *
     * @param context 上下文
     * @param appId   微信的appId
     * @param webUrl  网页的url
     * @param title   网页标题
     * @param content 网页描述
     * @param bitmap  位图
     * @param tag  标识 1 好友对话框  2 朋友圈
     */
    public static void shareWeb(Context context, String appId, String webUrl, String title, String content, Bitmap bitmap,int tag) {
        // 通过appId得到IWXAPI这个对象
        IWXAPI wxapi = WXAPIFactory.createWXAPI(context, appId);
        // 检查手机或者模拟器是否安装了微信
        if (!wxapi.isWXAppInstalled()) {
            ToastUtils.showShort("您还没有安装微信");
            return;
        }

        // 初始化一个WXWebpageObject对象
        WXWebpageObject webpageObject = new WXWebpageObject();
        // 填写网页的url
        webpageObject.webpageUrl = webUrl;

        // 用WXWebpageObject对象初始化一个WXMediaMessage对象
        WXMediaMessage msg = new WXMediaMessage(webpageObject);
        // 填写网页标题、描述、位图
        msg.title = title;
        msg.description = content;
        // 如果没有位图,可以传null,会显示默认的图片
        msg.setThumbImage(bitmap);

        // 构造一个Req
        SendMessageToWX.Req req = new SendMessageToWX.Req();
        // transaction用于唯一标识一个请求(可自定义)
        req.transaction = "webpage";
        // 上文的WXMediaMessage对象
        req.message = msg;
        // SendMessageToWX.Req.WXSceneSession是分享到好友会话
        // SendMessageToWX.Req.WXSceneTimeline是分享到朋友圈
        if(tag ==1){
            req.scene = SendMessageToWX.Req.WXSceneSession;
        }else {
            req.scene = SendMessageToWX.Req.WXSceneTimeline;
        }
        // 向微信发送请求
        wxapi.sendReq(req);
    }

    /**
     * 分享微信小程序 
     * @param context
     * @param appId
     * @param webUrl
     * @param title
     * @param content
     * @param bitmap 图片资源
     */
    public static void shareMiniPro(Context context, String appId, String webUrl, String title, String content, Bitmap bitmap){
        // 通过appId得到IWXAPI这个对象
        IWXAPI wxapi = WXAPIFactory.createWXAPI(context, appId);
        // 检查手机或者模拟器是否安装了微信
        if (!wxapi.isWXAppInstalled()) {
            ToastUtils.showShort("您还没有安装微信");
            return;
        }
        WXMiniProgramObject miniProgram = new WXMiniProgramObject();
        miniProgram.webpageUrl=webUrl;//自定义
        miniProgram.userName="xxxxxxx";//小程序端提供参数
        miniProgram.path=webUrl;//小程序端提供参数
        WXMediaMessage mediaMessage = new WXMediaMessage(miniProgram);
        mediaMessage.title = title;//自定义
        mediaMessage.description = content;//自定义
//        Bitmap bitmap = BitmapFactory.decodeResource(SendToWXActivity.this.getResources(),R.drawable.fightk);
//        Bitmap sendBitmap = Bitmap.createScaledBitmap(bitmap,180,180,true);
//        bitmap.recycle();
        mediaMessage.thumbData = Utils.bmpToByteArray(bitmap);
//        mediaMessage.setThumbImage(bitmap);
        SendMessageToWX.Req req = new SendMessageToWX.Req();
        req.transaction = "";
        req.scene = SendMessageToWX.Req.WXSceneSession;
        req.message = mediaMessage;
        wxapi.sendReq(req);
    }

}

工具类Util

public class Utils {
      /**
   *bmp转字节数组
   * */
  public static byte[] bmpToByteArray(Bitmap bitmap){
      int bytes = bitmap.getByteCount();
      ByteBuffer buf = ByteBuffer.allocate(bytes);
      bitmap.copyPixelsToBuffer(buf);
      byte[] byteArray = buf.array();
      return byteArray;
  }
}

补充:
如果只是类似淘宝考虑的复制粘贴,不需要使用分享API,只调起微信即可。
参考:(89条消息) 【Android】Android App打开手机QQ、微信等应用_android app打开微信_Chelsea0522的博客-CSDN博客

val url = "weixin://"
fragment.activity!!.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容