feat(share): 恢复QQ分享通过系统分享(Intent.createChooser)拉起
根据需求反馈修改,因为直接拉起由于沙盒拦截等原因不生效: 1. 还原采用 Intent.createChooser(...) 拉起系统分享。 2. 依然保留 intent.setPackage(...) 限制分享列表中只包含 QQ,完美避开抖音等不相关的应用。
This commit is contained in:
@@ -240,7 +240,7 @@ public class QQIntentShareUtil {
|
|||||||
String packageName = getInstalledQQPackage();
|
String packageName = getInstalledQQPackage();
|
||||||
boolean launched = false;
|
boolean launched = false;
|
||||||
|
|
||||||
// 方法1: 尝试直接拉起
|
// 方法1: 采用调用系统分享
|
||||||
try {
|
try {
|
||||||
Intent intent = new Intent(Intent.ACTION_SEND);
|
Intent intent = new Intent(Intent.ACTION_SEND);
|
||||||
intent.setType("text/plain");
|
intent.setType("text/plain");
|
||||||
@@ -251,15 +251,12 @@ public class QQIntentShareUtil {
|
|||||||
intent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
|
intent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
|
||||||
|
|
||||||
String targetPackage = (packageName != null && !packageName.isEmpty()) ? packageName : QQ_PACKAGE_NAME;
|
String targetPackage = (packageName != null && !packageName.isEmpty()) ? packageName : QQ_PACKAGE_NAME;
|
||||||
ComponentName resolvedComp = resolveShareComponent(activity, intent, targetPackage);
|
// 通过设包名,系统分享面板中就只会出现QQ相关的组件,从而过滤掉抖音
|
||||||
|
|
||||||
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);
|
||||||
launched = true;
|
launched = true;
|
||||||
|
|
||||||
Log.d(TAG, "成功启动分享");
|
Log.d(TAG, "成功启动分享");
|
||||||
@@ -333,7 +330,7 @@ public class QQIntentShareUtil {
|
|||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.e(TAG, "分享文本到QQ空间失败: " + e.getMessage(), e);
|
Log.e(TAG, "分享文本到QQ空间失败: " + e.getMessage(), e);
|
||||||
|
|
||||||
// 尝试使用通用分享
|
// 尝试使用通用系统分享
|
||||||
try {
|
try {
|
||||||
Intent intent = new Intent(Intent.ACTION_SEND);
|
Intent intent = new Intent(Intent.ACTION_SEND);
|
||||||
intent.setType("text/plain");
|
intent.setType("text/plain");
|
||||||
@@ -342,15 +339,11 @@ public class QQIntentShareUtil {
|
|||||||
|
|
||||||
String packageName = getInstalledQQPackage();
|
String packageName = getInstalledQQPackage();
|
||||||
String targetPackage = (packageName != null && !packageName.isEmpty()) ? packageName : QQ_PACKAGE_NAME;
|
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();
|
Toast.makeText(activity, "已将内容复制到剪贴板,请从打开的界面中粘贴分享", Toast.LENGTH_LONG).show();
|
||||||
|
|
||||||
if (mCallback != null) {
|
if (mCallback != null) {
|
||||||
@@ -407,26 +400,23 @@ public class QQIntentShareUtil {
|
|||||||
shareIntent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
|
shareIntent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
|
||||||
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // 确保Flags也被设置在Intent上
|
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // 确保Flags也被设置在Intent上
|
||||||
|
|
||||||
// 尝试直接拉起
|
// 采用调用系统分享
|
||||||
boolean launched = false;
|
boolean launched = false;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
String targetPackage = (packageName != null && !packageName.isEmpty()) ? packageName : QQ_PACKAGE_NAME;
|
String targetPackage = (packageName != null && !packageName.isEmpty()) ? packageName : QQ_PACKAGE_NAME;
|
||||||
ComponentName resolvedComp = resolveShareComponent(activity, shareIntent, targetPackage);
|
shareIntent.setPackage(targetPackage); // 限制只能分享到QQ,防止出现抖音
|
||||||
|
|
||||||
if (resolvedComp != null) {
|
Intent chooserIntent = Intent.createChooser(shareIntent, "分享到QQ");
|
||||||
shareIntent.setComponent(resolvedComp);
|
chooserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
} else {
|
chooserIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // 确保Chooser也有权限
|
||||||
shareIntent.setPackage(targetPackage);
|
|
||||||
}
|
|
||||||
|
|
||||||
activity.startActivity(shareIntent);
|
activity.startActivity(chooserIntent);
|
||||||
launched = true;
|
launched = true;
|
||||||
Log.d(TAG, "已发送分享图片Intent到QQ");
|
Log.d(TAG, "已发送分享图片Intent到QQ系统面板");
|
||||||
activity.runOnUiThread(() -> Toast.makeText(activity, "已发送分享图片Intent到QQ", Toast.LENGTH_SHORT).show());
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.e(TAG, "直接分享到QQ失败: " + e.getMessage());
|
Log.e(TAG, "启动分享图片到QQ系统面板失败: " + e.getMessage());
|
||||||
final String failMsg = "直接分享失败: " + e.getMessage();
|
final String failMsg = "分享失败: " + e.getMessage();
|
||||||
activity.runOnUiThread(() -> Toast.makeText(activity, failMsg, Toast.LENGTH_SHORT).show());
|
activity.runOnUiThread(() -> Toast.makeText(activity, failMsg, Toast.LENGTH_SHORT).show());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -502,21 +492,16 @@ public class QQIntentShareUtil {
|
|||||||
}, 1000);
|
}, 1000);
|
||||||
}
|
}
|
||||||
} catch (android.content.ActivityNotFoundException e) {
|
} 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;
|
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.setComponent(null);
|
||||||
shareIntent.setPackage(targetPackage);
|
shareIntent.setPackage(targetPackage);
|
||||||
}
|
|
||||||
|
|
||||||
activity.startActivity(shareIntent);
|
Intent chooserIntent = Intent.createChooser(shareIntent, "分享到QQ空间");
|
||||||
Toast.makeText(activity, "即将打开QQ,请选择分享位置", Toast.LENGTH_SHORT).show();
|
chooserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
|
activity.startActivity(chooserIntent);
|
||||||
|
|
||||||
// 假设分享成功
|
// 假设分享成功
|
||||||
if (mCallback != null) {
|
if (mCallback != null) {
|
||||||
@@ -629,29 +614,18 @@ public class QQIntentShareUtil {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
String targetPackage = (packageName != null && !packageName.isEmpty()) ? packageName : QQ_PACKAGE_NAME;
|
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);
|
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;
|
launched = true;
|
||||||
Log.d(TAG, "已发送多图分享Intent到QQ");
|
Log.d(TAG, "已打开系统分享面板进行多图分享");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.e(TAG, "直接分享多图到QQ失败: " + e.getMessage());
|
Log.e(TAG, "开启系统多图分享到QQ失败: " + e.getMessage());
|
||||||
}
|
|
||||||
|
|
||||||
if (launched) {
|
|
||||||
// 延迟回调成功
|
|
||||||
if (mCallback != null) {
|
if (mCallback != null) {
|
||||||
new Handler(Looper.getMainLooper()).postDelayed(() -> {
|
new Handler(Looper.getMainLooper()).postDelayed(() -> {
|
||||||
mCallback.onSuccess();
|
mCallback.onSuccess();
|
||||||
|
|||||||
Reference in New Issue
Block a user