修改微信分享为Intent分享,不依赖sdk

This commit is contained in:
2026-03-05 18:32:09 +08:00
parent c458f3c707
commit 64ae57f7f2
6 changed files with 63 additions and 410 deletions

View File

@@ -2,18 +2,18 @@ apply plugin: 'com.android.application'
android {
signingConfigs { release {
storeFile file('./keystore/gamehall.keystore')
storePassword 'tswl2015'
keyPassword 'tswl2015'
storeFile file('G:\\Works\\YouleApp\\harmonyos\\tsgame_ohos\\keystore\\daoqi_game_1.keystore')
storePassword 'tswl0791'
keyPassword 'tswl0791'
keyAlias = 'gamehall'
v1SigningEnabled true
v2SigningEnabled true
}
debug {
storeFile file('./keystore/gamehall.keystore')
storePassword 'tswl2015'
keyPassword 'tswl2015'
storeFile file('G:\\Works\\YouleApp\\harmonyos\\tsgame_ohos\\keystore\\daoqi_game_1.keystore')
storePassword 'tswl0791'
keyPassword 'tswl0791'
keyAlias = 'gamehall'
v1SigningEnabled true
v2SigningEnabled true

View File

@@ -2,51 +2,26 @@ package com.jx.jyhd.simcpux.util;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.widget.Toast;
import com.jx.jyhd.simcpux.Constants;
import com.jx.jyhd.simcpux.Util;
import com.jx.jyhd.wxapi.WXEntryActivity;
import com.tagmae.tsgame_erwang.utils.Base64ImageUtil;
import com.tencent.mm.opensdk.modelmsg.SendMessageToWX;
import com.tencent.mm.opensdk.modelmsg.WXImageObject;
import com.tencent.mm.opensdk.modelmsg.WXMediaMessage;
import com.tencent.mm.opensdk.modelmsg.WXWebpageObject;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
import java.io.File;
import com.tsgame.tsgame_niuniu.util.WeChatIntentShareUtil;
/**
* 微信分享工具类
* 微信分享工具类已代理至无SDK版 WeChatIntentShareUtil
*/
public class WeChatShareUtil {
private static final int THUMB_SIZE = 150;
private static WeChatShareUtil instance;
private final Context mContext;
private final IWXAPI mWxApi;
private WeChatShareCallback mCallback;
private WeChatShareUtil(Context context) {
this.mContext = context.getApplicationContext();
// 初始化微信API
mWxApi = WXAPIFactory.createWXAPI(mContext, Constants.APP_ID, true);
mWxApi.registerApp(Constants.APP_ID);
}
/**
* 获取实例
* @param context 上下文
* @return WeChatShareUtil实例
*/
public static WeChatShareUtil getInstance(Context context) {
if (instance == null && context != null) {
instance = new WeChatShareUtil(context);
@@ -54,130 +29,44 @@ public class WeChatShareUtil {
return instance;
}
/**
* 检查微信是否已安装
* @return 是否安装
*/
public boolean isWeChatInstalled() {
try {
return mWxApi.isWXAppInstalled();
} catch (Exception e) {
e.printStackTrace();
return false;
}
return WeChatIntentShareUtil.getInstance(mContext).isWeChatInstalled();
}
/**
* 设置分享回调
* @param callback 分享回调
*/
public void setShareCallback(WeChatShareCallback callback) {
this.mCallback = callback;
}
/**
* 获取分享回调
* @return 分享回调
*/
public WeChatShareCallback getShareCallback() {
return mCallback;
}
/**
* 分享网页到微信
* @param activity 活动
* @param webpageUrl 网页链接
* @param title 标题
* @param description 描述
* @param scene 分享场景(0:好友, 1:朋友圈)
*/
public void shareWebPage(Activity activity, String webpageUrl, String title, String description, int scene) {
if (!isWeChatInstalled()) {
Toast.makeText(activity, "请先安装微信客户端", Toast.LENGTH_SHORT).show();
if (mCallback != null) {
mCallback.onError(-1, "未安装微信客户端");
}
return;
}
try {
// 设置分享回调处理
// 创建Handler来接收微信分享结果
final Handler shareHandler = new Handler(Looper.getMainLooper()) {
private void bindCallback() {
if (mCallback != null) {
WeChatIntentShareUtil.getInstance(mContext).setShareCallback(new WeChatIntentShareUtil.WeChatShareCallback() {
@Override
public void handleMessage(Message msg) {
// 处理微信分享回调
if (mCallback != null) {
if (msg.what == 0) { // 成功
mCallback.onSuccess();
} else if (msg.what == -2) { // 取消
mCallback.onCancel();
} else { // 错误
mCallback.onError(msg.what, "微信分享失败,错误码:" + msg.what);
}
}
public void onSuccess() {
if (mCallback != null) mCallback.onSuccess();
}
};
// 设置分享回调
WXEntryActivity.setshareHandler(shareHandler);
// 创建网页消息对象
WXWebpageObject webpage = new WXWebpageObject();
webpage.webpageUrl = webpageUrl;
// 创建多媒体消息
WXMediaMessage msg = new WXMediaMessage(webpage);
msg.title = title;
msg.description = description;
// 设置缩略图 - 使用应用的启动图标 logo6 而不是 ic_launcher
Bitmap thumbBmp = BitmapFactory.decodeResource(mContext.getResources(),
mContext.getResources().getIdentifier("logo6", "drawable", mContext.getPackageName()));
// 如果找不到logo6则退回到使用ic_launcher
if (thumbBmp == null) {
thumbBmp = BitmapFactory.decodeResource(mContext.getResources(),
com.jx.jyhd.R.mipmap.ic_launcher);
}
if (thumbBmp != null) {
Bitmap thumbBitmap = Bitmap.createScaledBitmap(thumbBmp, THUMB_SIZE, THUMB_SIZE, true);
thumbBmp.recycle();
msg.thumbData = Util.bmpToByteArray(thumbBitmap, true);
}
// 构建发送请求
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("webpage");
req.message = msg;
req.scene = scene == 0 ? SendMessageToWX.Req.WXSceneSession : SendMessageToWX.Req.WXSceneTimeline;
// 发送请求
boolean result = mWxApi.sendReq(req);
if (!result) {
Toast.makeText(activity, "微信分享请求发送失败", Toast.LENGTH_SHORT).show();
if (mCallback != null) {
mCallback.onError(-2, "微信分享请求发送失败");
@Override
public void onError(int code, String message) {
if (mCallback != null) mCallback.onError(code, message);
}
}
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(activity, "微信分享失败: " + e.getMessage(), Toast.LENGTH_SHORT).show();
if (mCallback != null) {
mCallback.onError(-3, "微信分享失败: " + e.getMessage());
}
@Override
public void onCancel() {
if (mCallback != null) mCallback.onCancel();
}
});
}
}
/**
* 分享图片到微信
* @param activity 活动
* @param imagePath 图片路径
* @param scene 分享场景(0:好友, 1:朋友圈)
*/
public void shareWebPage(Activity activity, String webpageUrl, String title, String description, int scene) {
bindCallback();
WeChatIntentShareUtil.getInstance(activity).shareWebPage(activity, webpageUrl, title, description, scene);
}
public void shareImage(Activity activity, String imagePath, int scene) {
if (!isWeChatInstalled()) {
Toast.makeText(activity, "请先安装微信客户端", Toast.LENGTH_SHORT).show();
@@ -187,23 +76,16 @@ public class WeChatShareUtil {
return;
}
// 使用新的图片处理工具类检查图片是否存在,不存在时可以尝试使用其他备用方案
Uri imageFile = Base64ImageUtil.base64ToImageFile(activity,imagePath,null);
//Uri imageFile = Uri.parse(imagePath);
Uri imageFile = Base64ImageUtil.base64ToImageFile(activity, imagePath, null);
if (imageFile == null) {
//Toast.makeText(activity, "分享图片不存在,尝试创建临时图片", Toast.LENGTH_SHORT).show();
// 如果是Bitmap对象可以使用ImageProcessUtils保存
if (imagePath.startsWith("data:image/") || imagePath.startsWith("base64,")) {
// 对于Base64编码的图片使用ImageProcessUtils保存
com.tagmae.tsgame_erwang.utils.ImageProcessUtils.saveBase64ImageToCache(
activity,
imagePath,
new com.tagmae.tsgame_erwang.utils.ImageProcessUtils.ImageSaveCallback() {
@Override
public void onSuccess(String savedImagePath) {
// 保存成功,使用新路径进行分享
shareImageInternal(activity, savedImagePath, scene);
}
@@ -218,7 +100,6 @@ public class WeChatShareUtil {
);
return;
} else {
// 图片不存在且不能处理
if (mCallback != null) {
mCallback.onError(-2, "图片文件不存在");
}
@@ -226,89 +107,14 @@ public class WeChatShareUtil {
}
}
// 直接使用现有图片路径分享
shareImageInternal(activity, imageFile.getPath(), scene);
}
/**
* 内部图片分享实现
*/
private void shareImageInternal(Activity activity, String imagePath, int scene) {
try {
// 设置分享回调处理
// 创建Handler来接收微信分享结果
final Handler shareHandler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
// 处理微信分享回调
if (mCallback != null) {
if (msg.what == 0) { // 成功
mCallback.onSuccess();
} else if (msg.what == -2) { // 取消
mCallback.onCancel();
} else { // 错误
mCallback.onError(msg.what, "微信分享失败,错误码:" + msg.what);
}
}
}
};
// 设置分享回调
WXEntryActivity.setshareHandler(shareHandler);
// 加载要分享的图片
Bitmap bmp = BitmapFactory.decodeFile(imagePath);
if (bmp == null) {
Toast.makeText(activity, "图片加载失败", Toast.LENGTH_SHORT).show();
if (mCallback != null) {
mCallback.onError(-3, "图片加载失败");
}
return;
}
// 创建图片对象
WXImageObject imgObj = new WXImageObject(bmp);
// 创建多媒体消息
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = imgObj;
// 设置缩略图
Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, THUMB_SIZE, THUMB_SIZE, true);
bmp.recycle();
msg.thumbData = Util.bmpToByteArray(thumbBmp, true);
// 构建发送请求
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("img");
req.message = msg;
req.scene = scene == 0 ? SendMessageToWX.Req.WXSceneSession : SendMessageToWX.Req.WXSceneTimeline;
// 发送请求
boolean result = mWxApi.sendReq(req);
if (!result) {
Toast.makeText(activity, "微信分享请求发送失败", Toast.LENGTH_SHORT).show();
if (mCallback != null) {
mCallback.onError(-4, "微信分享请求发送失败");
}
}
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(activity, "微信分享失败: " + e.getMessage(), Toast.LENGTH_SHORT).show();
if (mCallback != null) {
mCallback.onError(-5, "微信分享失败: " + e.getMessage());
}
}
bindCallback();
WeChatIntentShareUtil.getInstance(activity).shareImage(activity, imagePath, scene);
}
/**
* 分享Bitmap到微信
* @param activity 活动
* @param bitmap 位图对象
* @param scene 分享场景(0:好友, 1:朋友圈)
*/
public void shareBitmap(Activity activity, Bitmap bitmap, int scene) {
if (bitmap == null) {
Toast.makeText(activity, "分享图片为空", Toast.LENGTH_SHORT).show();
@@ -318,14 +124,12 @@ public class WeChatShareUtil {
return;
}
// 使用ImageProcessUtils保存Bitmap
com.tagmae.tsgame_erwang.utils.ImageProcessUtils.saveBitmapToCache(
activity,
bitmap,
new com.tagmae.tsgame_erwang.utils.ImageProcessUtils.ImageSaveCallback() {
@Override
public void onSuccess(String imagePath) {
// 保存成功,使用生成的图片路径分享
shareImageInternal(activity, imagePath, scene);
}
@@ -340,16 +144,6 @@ public class WeChatShareUtil {
);
}
/**
* 构建交易ID
*/
private String buildTransaction(String type) {
return type + System.currentTimeMillis();
}
/**
* 微信分享回调接口
*/
public interface WeChatShareCallback {
void onSuccess();
void onError(int code, String message);

View File

@@ -3474,49 +3474,14 @@ public class NewwebviewActivity extends AppCompatActivity implements
if (bean.getType().equals("1")) {
WXWebpageObject webpage = new WXWebpageObject();
webpage.webpageUrl = bean.getWebpageUrl();
WXMediaMessage msg = new WXMediaMessage(webpage);
msg.title = bean.getTitle();
msg.description = bean.getDescription();
// Toast.makeText(this, bean.getDescription(), 1).show();
Bitmap bt = BitmapFactory.decodeResource(getResources(),
R.drawable.sharelogo3);
com.tsgame.tsgame_niuniu.util.WeChatIntentShareUtil.getInstance(this).shareWebPage(
this,
bean.getWebpageUrl(),
bean.getTitle(),
bean.getDescription(),
com.tsgame.tsgame_niuniu.util.WeChatIntentShareUtil.SCENE_FRIENDS
);
ByteArrayOutputStream out = new ByteArrayOutputStream();
bt.compress(Bitmap.CompressFormat.PNG, 100, out);
// Toast.makeText(webviewActivity.this, "" +
// out.toByteArray().length,
// 1).show();
if (out.toByteArray().length > 32000) {
// int a=out.toByteArray().length/30000;
BitmapFactory.Options newOpts = new BitmapFactory.Options();
newOpts.inJustDecodeBounds = true;
// Toast.makeText(webviewActivity.this, "压缩", 1).show();
BitmapFactory.decodeResource(getResources(),
R.drawable.sharelogo3, newOpts);
newOpts.inJustDecodeBounds = false;
int inSampleSize = 2;// 大小缩小一半
newOpts.inSampleSize = inSampleSize;
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.sharelogo3, newOpts);
msg.thumbData = Util.bmpToByteArray(bitmap, true);
} else {
msg.thumbData = Util.bmpToByteArray(bt, true);
}
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("webpage");
req.message = msg;
req.scene = SendMessageToWX.Req.WXSceneSession;
api.sendReq(req);
} else if (bean.getType().equals("2")) {
try{
@@ -3704,46 +3669,13 @@ public class NewwebviewActivity extends AppCompatActivity implements
if (bean.getType().equals("1")) {
System.out.println("hhhhhhh");
WXWebpageObject webpage = new WXWebpageObject();
webpage.webpageUrl = bean.getWebpageUrl();
WXMediaMessage msg = new WXMediaMessage(webpage);
msg.title = bean.getTitle();
msg.description = bean.getDescription();
// Toast.makeText(this, bean.getDescription(), 1).show();
Bitmap bt = BitmapFactory.decodeResource(getResources(),
R.drawable.sharelogo3);
ByteArrayOutputStream out = new ByteArrayOutputStream();
bt.compress(Bitmap.CompressFormat.PNG, 100, out);
// Toast.makeText(webviewActivity.this, "" +
// out.toByteArray().length,
// 1).show();
if (out.toByteArray().length > 32000) {
// int a=out.toByteArray().length/30000;
BitmapFactory.Options newOpts = new BitmapFactory.Options();
newOpts.inJustDecodeBounds = true;
BitmapFactory.decodeResource(getResources(),
R.drawable.sharelogo3, newOpts);
newOpts.inJustDecodeBounds = false;
int inSampleSize = 2;// 大小缩小一半
newOpts.inSampleSize = inSampleSize;
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.sharelogo3, newOpts);
msg.thumbData = Util.bmpToByteArray(bitmap, true);
} else {
msg.thumbData = Util.bmpToByteArray(bt, true);
}
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("webpage");
req.message = msg;
req.scene = SendMessageToWX.Req.WXSceneTimeline;
api.sendReq(req);
com.tsgame.tsgame_niuniu.util.WeChatIntentShareUtil.getInstance(this).shareWebPage(
this,
bean.getWebpageUrl(),
bean.getTitle(),
bean.getDescription(),
com.tsgame.tsgame_niuniu.util.WeChatIntentShareUtil.SCENE_MOMENTS
);
} else if (bean.getType().equals("2")) {
photosharefriends();

View File

@@ -3347,52 +3347,14 @@ public class webviewActivity extends AppCompatActivity implements
if (bean.getType().equals("1")) {
WXWebpageObject webpage = new WXWebpageObject();
webpage.webpageUrl = bean.getWebpageUrl();
WXMediaMessage msg = new WXMediaMessage(webpage);
msg.title = bean.getTitle();
msg.description = bean.getDescription();
// Toast.makeText(this, bean.getDescription(), 1).show();
Bitmap bt = BitmapFactory.decodeResource(getResources(),
R.drawable.sharelogo3);
com.tsgame.tsgame_niuniu.util.WeChatIntentShareUtil.getInstance(this).shareWebPage(
this,
bean.getWebpageUrl(),
bean.getTitle(),
bean.getDescription(),
com.tsgame.tsgame_niuniu.util.WeChatIntentShareUtil.SCENE_FRIENDS
);
ByteArrayOutputStream out = new ByteArrayOutputStream();
bt.compress(Bitmap.CompressFormat.PNG, 100, out);
// Toast.makeText(webviewActivity.this, "" +
// out.toByteArray().length,
// 1).show();
if (out.toByteArray().length > 32000) {
// int a=out.toByteArray().length/30000;
BitmapFactory.Options newOpts = new BitmapFactory.Options();
newOpts.inJustDecodeBounds = true;
// Toast.makeText(webviewActivity.this, "压缩", 1).show();
BitmapFactory.decodeResource(getResources(),
R.drawable.sharelogo3, newOpts);
newOpts.inJustDecodeBounds = false;
int inSampleSize = (out.toByteArray().length / 32768 + 1) / 2 + 2;
if (inSampleSize < 2) {
inSampleSize = 2;
}
newOpts.inSampleSize = inSampleSize;
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.sharelogo3, newOpts);
msg.thumbData = Util.bmpToByteArray(bitmap, true);
} else {
msg.thumbData = Util.bmpToByteArray(bt, true);
}
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("webpage");
req.message = msg;
req.scene = SendMessageToWX.Req.WXSceneSession;
api.sendReq(req);
} else if (bean.getType().equals("2")) {
try {
@@ -3538,49 +3500,13 @@ public class webviewActivity extends AppCompatActivity implements
Wxistrue.sharetype = 2;
if (bean.getType().equals("1")) {
WXWebpageObject webpage = new WXWebpageObject();
webpage.webpageUrl = bean.getWebpageUrl();
WXMediaMessage msg = new WXMediaMessage(webpage);
msg.title = bean.getTitle();
msg.description = bean.getDescription();
// Toast.makeText(this, bean.getDescription(), 1).show();
Bitmap bt = BitmapFactory.decodeResource(getResources(),
R.drawable.sharelogo3);
ByteArrayOutputStream out = new ByteArrayOutputStream();
bt.compress(Bitmap.CompressFormat.PNG, 100, out);
// Toast.makeText(webviewActivity.this, "" +
// out.toByteArray().length,
// 1).show();
if (out.toByteArray().length > 32000) {
// int a=out.toByteArray().length/30000;
BitmapFactory.Options newOpts = new BitmapFactory.Options();
newOpts.inJustDecodeBounds = true;
BitmapFactory.decodeResource(getResources(),
R.drawable.sharelogo3, newOpts);
newOpts.inJustDecodeBounds = false;
int inSampleSize = (out.toByteArray().length / 32000 + 1) / 2 + 2;
if (inSampleSize < 2) {
inSampleSize = 2;
}
newOpts.inSampleSize = inSampleSize;
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.sharelogo3, newOpts);
msg.thumbData = Util.bmpToByteArray(bitmap, true);
} else {
msg.thumbData = Util.bmpToByteArray(bt, true);
}
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("webpage");
req.message = msg;
req.scene = SendMessageToWX.Req.WXSceneTimeline;
api.sendReq(req);
com.tsgame.tsgame_niuniu.util.WeChatIntentShareUtil.getInstance(this).shareWebPage(
this,
bean.getWebpageUrl(),
bean.getTitle(),
bean.getDescription(),
com.tsgame.tsgame_niuniu.util.WeChatIntentShareUtil.SCENE_MOMENTS
);
} else if (bean.getType().equals("2")) {
// photosharefriends();

View File

@@ -340,11 +340,12 @@ public class WeChatIntentShareUtil {
sb.append(title).append("\n\n");
}
if (!TextUtils.isEmpty(description)) {
sb.append(description).append("\n\n");
}
if (!TextUtils.isEmpty(webUrl)) {
sb.append(webUrl);
sb.append(description);
}
// 根据需求限制:分享的链接(webUrl)不需要分享出去
// if (!TextUtils.isEmpty(webUrl)) {
// sb.append("\n\n").append(webUrl);
// }
// 朋友圈不支持纯文本分享,需要准备一个默认图片
if (scene == SCENE_MOMENTS) {

Binary file not shown.