feat(share): 恢复QQ分享通过系统分享(Intent.createChooser)拉起

根据需求反馈修改,因为直接拉起由于沙盒拦截等原因不生效:
1. 还原采用 Intent.createChooser(...) 拉起系统分享。
2. 依然保留 intent.setPackage(...) 限制分享列表中只包含 QQ,完美避开抖音等不相关的应用。
This commit is contained in:
2026-03-11 17:34:43 +08:00
parent 9be3406d52
commit 821ac0bdc5

View File

@@ -240,7 +240,7 @@ public class QQIntentShareUtil {
String packageName = getInstalledQQPackage();
boolean launched = false;
// 方法1: 尝试直接拉起
// 方法1: 采用调用系统分享
try {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
@@ -251,15 +251,12 @@ public class QQIntentShareUtil {
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 {
// 通过设包名系统分享面板中就只会出现QQ相关的组件从而过滤掉抖音
intent.setPackage(targetPackage);
}
activity.startActivity(intent);
Intent chooser = Intent.createChooser(intent, "分享到QQ");
chooser.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
activity.startActivity(chooser);
launched = true;
Log.d(TAG, "成功启动分享");
@@ -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);
}
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防止出现抖音
if (resolvedComp != null) {
shareIntent.setComponent(resolvedComp);
} else {
shareIntent.setPackage(targetPackage);
}
Intent chooserIntent = Intent.createChooser(shareIntent, "分享到QQ");
chooserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
chooserIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // 确保Chooser也有权限
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();
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);
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, "发送多图分享Intent到QQ");
Log.d(TAG, "打开系统分享面板进行多图分享");
} catch (Exception e) {
Log.e(TAG, "直接分享多图到QQ失败: " + e.getMessage());
}
if (launched) {
// 延迟回调成功
Log.e(TAG, "开启系统多图分享到QQ失败: " + e.getMessage());
if (mCallback != null) {
new Handler(Looper.getMainLooper()).postDelayed(() -> {
mCallback.onSuccess();