添加文本分享

This commit is contained in:
v7lin
2019-12-26 23:06:30 +08:00
parent 3a1a31a001
commit 1bc14b1778
2 changed files with 77 additions and 21 deletions

View File

@ -1,5 +1,7 @@
package io.github.v7lin.tencent_kit; package io.github.v7lin.tencent_kit;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
@ -21,6 +23,7 @@ import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -62,10 +65,13 @@ public class TencentKitPlugin implements MethodCallHandler, PluginRegistry.Activ
} }
private static final String METHOD_REGISTERAPP = "registerApp"; private static final String METHOD_REGISTERAPP = "registerApp";
private static final String METHOD_ISINSTALLED = "isInstalled"; private static final String METHOD_ISQQINSTALLED = "isQQInstalled";
private static final String METHOD_ISTIMINSTALLED = "isTIMInstalled";
private static final String METHOD_ISQQLITEINSTALLED = "isQQLiteInstalled";
private static final String METHOD_LOGIN = "login"; private static final String METHOD_LOGIN = "login";
private static final String METHOD_LOGOUT = "logout"; private static final String METHOD_LOGOUT = "logout";
private static final String METHOD_SHAREMOOD = "shareMood"; private static final String METHOD_SHAREMOOD = "shareMood";
private static final String METHOD_SHARETEXT = "shareText";
private static final String METHOD_SHAREIMAGE = "shareImage"; private static final String METHOD_SHAREIMAGE = "shareImage";
private static final String METHOD_SHAREMUSIC = "shareMusic"; private static final String METHOD_SHAREMUSIC = "shareMusic";
private static final String METHOD_SHAREWEBPAGE = "shareWebpage"; private static final String METHOD_SHAREWEBPAGE = "shareWebpage";
@ -113,28 +119,20 @@ public class TencentKitPlugin implements MethodCallHandler, PluginRegistry.Activ
// final String universalLink = call.argument(ARGUMENT_KEY_UNIVERSALLINK); // final String universalLink = call.argument(ARGUMENT_KEY_UNIVERSALLINK);
tencent = Tencent.createInstance(appId, registrar.context().getApplicationContext()); tencent = Tencent.createInstance(appId, registrar.context().getApplicationContext());
result.success(null); result.success(null);
} else if (METHOD_ISINSTALLED.equals(call.method)) { } else if (METHOD_ISQQINSTALLED.equals(call.method)) {
boolean isInstalled = false; result.success(isAppInstalled(registrar.context(), "com.tencent.mobileqq"));
PackageManager packageManager = registrar.context().getPackageManager(); } else if (METHOD_ISTIMINSTALLED.equals(call.method)) {
List<PackageInfo> infos = packageManager.getInstalledPackages(0); result.success(isAppInstalled(registrar.context(), "com.tencent.tim"));
if (infos != null && !infos.isEmpty()) { } else if (METHOD_ISQQLITEINSTALLED.equals(call.method)) {
for (PackageInfo info : infos) { result.success(isAppInstalled(registrar.context(), "com.tencent.qqlite"));
// 普通大众版 > 办公简洁版 > 急速轻聊版
if ("com.tencent.mobileqq".equals(info.packageName)
|| "com.tencent.tim".equals(info.packageName)
|| "com.tencent.qqlite".equals(info.packageName)) {
isInstalled = true;
break;
}
}
}
result.success(isInstalled);
} else if (METHOD_LOGIN.equals(call.method)) { } else if (METHOD_LOGIN.equals(call.method)) {
login(call, result); login(call, result);
} else if (METHOD_LOGOUT.equals(call.method)) { } else if (METHOD_LOGOUT.equals(call.method)) {
logout(call, result); logout(call, result);
} else if (METHOD_SHAREMOOD.equals(call.method)) { } else if (METHOD_SHAREMOOD.equals(call.method)) {
shareMood(call, result); shareMood(call, result);
} else if (METHOD_SHARETEXT.equals(call.method)) {
shareText(call, result);
} else if (METHOD_SHAREIMAGE.equals(call.method)) { } else if (METHOD_SHAREIMAGE.equals(call.method)) {
shareImage(call, result); shareImage(call, result);
} else if (METHOD_SHAREMUSIC.equals(call.method)) { } else if (METHOD_SHAREMUSIC.equals(call.method)) {
@ -247,6 +245,35 @@ public class TencentKitPlugin implements MethodCallHandler, PluginRegistry.Activ
result.success(null); result.success(null);
} }
private void shareText(MethodCall call, Result result) {
int scene = call.argument(ARGUMENT_KEY_SCENE);
if (scene == TencentScene.SCENE_QQ) {
String summary = call.argument(ARGUMENT_KEY_SUMMARY);
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, summary);
sendIntent.setType("text/*");
// 普通大众版 > 办公简洁版 > 急速轻聊版
PackageManager packageManager = registrar.context().getPackageManager();
List<PackageInfo> infos = packageManager.getInstalledPackages(0);
if (infos != null && !infos.isEmpty()) {
for (String packageName : Arrays.asList("com.tencent.mobileqq", "com.tencent.tim", "com.tencent.qqlite")) {
for (PackageInfo info : infos) {
if (packageName.equals(info.packageName)) {
sendIntent.setPackage(packageName);
if (sendIntent.resolveActivity(registrar.context().getPackageManager()) != null) {
sendIntent.setComponent(new ComponentName(packageName, "com.tencent.mobileqq.activity.JumpActivity"));
registrar.activity().startActivity(sendIntent);
break;
}
}
}
}
}
}
result.success(null);
}
private void shareImage(MethodCall call, Result result) { private void shareImage(MethodCall call, Result result) {
if (tencent != null) { if (tencent != null) {
int scene = call.argument(ARGUMENT_KEY_SCENE); int scene = call.argument(ARGUMENT_KEY_SCENE);
@ -419,4 +446,15 @@ public class TencentKitPlugin implements MethodCallHandler, PluginRegistry.Activ
} }
return false; return false;
} }
// ---
private static boolean isAppInstalled(Context context, String packageName) {
PackageInfo packageInfo = null;
try {
packageInfo = context.getPackageManager().getPackageInfo(packageName, 0);
} catch (PackageManager.NameNotFoundException e) {
}
return packageInfo != null;
}
} }

View File

@ -18,7 +18,9 @@ class Tencent {
} }
static const String _METHOD_REGISTERAPP = 'registerApp'; static const String _METHOD_REGISTERAPP = 'registerApp';
static const String _METHOD_ISINSTALLED = 'isInstalled'; static const String _METHOD_ISQQINSTALLED = 'isQQInstalled';
static const String _METHOD_ISTIMINSTALLED = 'isTIMInstalled';
static const String _METHOD_ISQQLITEINSTALLED = 'isQQLiteInstalled';
static const String _METHOD_LOGIN = 'login'; static const String _METHOD_LOGIN = 'login';
static const String _METHOD_LOGOUT = 'logout'; static const String _METHOD_LOGOUT = 'logout';
static const String _METHOD_SHAREMOOD = 'shareMood'; static const String _METHOD_SHAREMOOD = 'shareMood';
@ -99,7 +101,22 @@ class Tencent {
/// 检查QQ是否已安装 /// 检查QQ是否已安装
Future<bool> isInstalled() async { Future<bool> isInstalled() async {
return _channel.invokeMethod(_METHOD_ISINSTALLED); return (await isQQInstalled()) || (await isTIMInstalled()) || (await isQQLiteInstalled());
}
/// 检查QQ是否已安装
Future<bool> isQQInstalled() {
return _channel.invokeMethod(_METHOD_ISQQINSTALLED);
}
/// 检查QQ是否已安装
Future<bool> isTIMInstalled() {
return _channel.invokeMethod(_METHOD_ISTIMINSTALLED);
}
/// 检查QQ是否已安装
Future<bool> isQQLiteInstalled() {
return _channel.invokeMethod(_METHOD_ISQQLITEINSTALLED);
} }
/// 登录 /// 登录
@ -218,17 +235,18 @@ class Tencent {
return _channel.invokeMethod(_METHOD_SHAREMOOD, arguments); return _channel.invokeMethod(_METHOD_SHAREMOOD, arguments);
} }
/// 分享 - 文本 /// 分享 - 文本Android调用的是系统API故而不会有回调
Future<void> shareText({ Future<void> shareText({
@required int scene, @required int scene,
@required String summary, @required String summary,
}) { }) {
assert(scene == TencentScene.SCENE_QQ);
assert(summary != null && summary.isNotEmpty); assert(summary != null && summary.isNotEmpty);
final Map<String, dynamic> arguments = <String, dynamic>{ final Map<String, dynamic> arguments = <String, dynamic>{
_ARGUMENT_KEY_SCENE: scene, _ARGUMENT_KEY_SCENE: scene,
_ARGUMENT_KEY_SUMMARY: summary, _ARGUMENT_KEY_SUMMARY: summary,
}; };
return _channel.invokeMethod(_METHOD_SHAREMOOD, arguments); return _channel.invokeMethod(_METHOD_SHARETEXT, arguments);
} }
/// 分享 - 图片 /// 分享 - 图片