diff --git a/app/src/main/java/com/tsgame/tsgame_niuniu/util/QQIntentShareUtil.java b/app/src/main/java/com/tsgame/tsgame_niuniu/util/QQIntentShareUtil.java index 531b90d..fbe6e80 100644 --- a/app/src/main/java/com/tsgame/tsgame_niuniu/util/QQIntentShareUtil.java +++ b/app/src/main/java/com/tsgame/tsgame_niuniu/util/QQIntentShareUtil.java @@ -240,28 +240,25 @@ public class QQIntentShareUtil { String packageName = getInstalledQQPackage(); boolean launched = false; - // 方法1: 尝试直接拉起 + // 方法1: 采用调用系统分享 try { Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_TEXT, text); - + // 鸿蒙/卓易通关键适配Flags intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); String targetPackage = (packageName != null && !packageName.isEmpty()) ? packageName : QQ_PACKAGE_NAME; - ComponentName resolvedComp = resolveShareComponent(activity, intent, targetPackage); - - if (resolvedComp != null) { - intent.setComponent(resolvedComp); - } else { - intent.setPackage(targetPackage); - } - - activity.startActivity(intent); + // 通过设包名,系统分享面板中就只会出现QQ相关的组件,从而过滤掉抖音 + intent.setPackage(targetPackage); + + Intent chooser = Intent.createChooser(intent, "分享到QQ"); + chooser.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + activity.startActivity(chooser); launched = true; - + Log.d(TAG, "成功启动分享"); activity.runOnUiThread(() -> Toast.makeText(activity, "已将内容复制到剪贴板,请在QQ中粘贴并分享", Toast.LENGTH_LONG).show()); } catch (Exception e) { @@ -333,7 +330,7 @@ public class QQIntentShareUtil { } catch (Exception e) { Log.e(TAG, "分享文本到QQ空间失败: " + e.getMessage(), e); - // 尝试使用通用分享 +// 尝试使用通用系统分享 try { Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); @@ -342,15 +339,11 @@ public class QQIntentShareUtil { String packageName = getInstalledQQPackage(); String targetPackage = (packageName != null && !packageName.isEmpty()) ? packageName : QQ_PACKAGE_NAME; - - ComponentName resolvedComp = resolveShareComponent(activity, intent, targetPackage); - if (resolvedComp != null) { - intent.setComponent(resolvedComp); - } else { - intent.setPackage(targetPackage); - } + intent.setPackage(targetPackage); - activity.startActivity(intent); + Intent chooser = Intent.createChooser(intent, "分享到QQ空间"); + chooser.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + activity.startActivity(chooser); Toast.makeText(activity, "已将内容复制到剪贴板,请从打开的界面中粘贴分享", Toast.LENGTH_LONG).show(); if (mCallback != null) { @@ -407,26 +400,23 @@ public class QQIntentShareUtil { shareIntent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // 确保Flags也被设置在Intent上 - // 尝试直接拉起 + // 采用调用系统分享 boolean launched = false; try { String targetPackage = (packageName != null && !packageName.isEmpty()) ? packageName : QQ_PACKAGE_NAME; - ComponentName resolvedComp = resolveShareComponent(activity, shareIntent, targetPackage); + shareIntent.setPackage(targetPackage); // 限制只能分享到QQ,防止出现抖音 + + Intent chooserIntent = Intent.createChooser(shareIntent, "分享到QQ"); + chooserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + chooserIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // 确保Chooser也有权限 - if (resolvedComp != null) { - shareIntent.setComponent(resolvedComp); - } else { - shareIntent.setPackage(targetPackage); - } - - activity.startActivity(shareIntent); + activity.startActivity(chooserIntent); launched = true; - Log.d(TAG, "已发送分享图片Intent到QQ"); - activity.runOnUiThread(() -> Toast.makeText(activity, "已发送分享图片Intent到QQ", Toast.LENGTH_SHORT).show()); + Log.d(TAG, "已发送分享图片Intent到QQ系统面板"); } catch (Exception e) { - Log.e(TAG, "直接分享到QQ失败: " + e.getMessage()); - final String failMsg = "直接分享失败: " + e.getMessage(); + Log.e(TAG, "启动分享图片到QQ系统面板失败: " + e.getMessage()); + final String failMsg = "分享失败: " + e.getMessage(); activity.runOnUiThread(() -> Toast.makeText(activity, failMsg, Toast.LENGTH_SHORT).show()); } @@ -502,21 +492,16 @@ public class QQIntentShareUtil { }, 1000); } } catch (android.content.ActivityNotFoundException e) { - Log.e(TAG, "直接分享到QQ空间失败,尝试降级为通用QQ分享: " + e.getMessage()); + Log.e(TAG, "直接分享到QQ空间失败,尝试系统分享: " + e.getMessage()); - // 如果直接分享失败,直接拉起应用并且限制包名 + // 采用调用系统分享 String targetPackage = (packageName != null && !packageName.isEmpty()) ? packageName : QQ_PACKAGE_NAME; - ComponentName resolvedComp = resolveShareComponent(activity, shareIntent, targetPackage); - - if (resolvedComp != null) { - shareIntent.setComponent(resolvedComp); - } else { - shareIntent.setComponent(null); - shareIntent.setPackage(targetPackage); - } - - activity.startActivity(shareIntent); - Toast.makeText(activity, "即将打开QQ,请选择分享位置", Toast.LENGTH_SHORT).show(); + shareIntent.setComponent(null); + shareIntent.setPackage(targetPackage); + + Intent chooserIntent = Intent.createChooser(shareIntent, "分享到QQ空间"); + chooserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + activity.startActivity(chooserIntent); // 假设分享成功 if (mCallback != null) { @@ -629,29 +614,18 @@ public class QQIntentShareUtil { try { String targetPackage = (packageName != null && !packageName.isEmpty()) ? packageName : QQ_PACKAGE_NAME; - ComponentName resolvedComp = null; - - if (isQzone) { - resolvedComp = new ComponentName(targetPackage, getQZoneShareComponent()); - } else { - resolvedComp = resolveShareComponent(activity, intent, targetPackage); - } - - if (resolvedComp != null) { - intent.setComponent(resolvedComp); - } else { - intent.setPackage(targetPackage); - } - - activity.startActivity(intent); - launched = true; - Log.d(TAG, "已发送多图分享Intent到QQ"); - } catch (Exception e) { - Log.e(TAG, "直接分享多图到QQ失败: " + e.getMessage()); - } + // 采用调用系统分享 + intent.setPackage(targetPackage); - if (launched) { - // 延迟回调成功 + Intent chooser = Intent.createChooser(intent, isQzone ? "分享到QQ空间" : "分享到QQ"); + chooser.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + chooser.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + + activity.startActivity(chooser); + launched = true; + Log.d(TAG, "已打开系统分享面板进行多图分享"); + } catch (Exception e) { + Log.e(TAG, "开启系统多图分享到QQ失败: " + e.getMessage()); if (mCallback != null) { new Handler(Looper.getMainLooper()).postDelayed(() -> { mCallback.onSuccess();