只想看微信分享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)))