From 4db5fb0905ec2c2af87b1ad592cbd9a16aee1840 Mon Sep 17 00:00:00 2001 From: Ali Date: Thu, 20 Jan 2022 13:27:38 +0600 Subject: [PATCH] feat: add option to send arguments via intent --- .../LaunchexternalappPlugin.java | 29 ++++++++++++++++++- lib/external_app_launcher.dart | 7 +++-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/android/src/main/java/com/example/launchexternalapp/LaunchexternalappPlugin.java b/android/src/main/java/com/example/launchexternalapp/LaunchexternalappPlugin.java index 99960db..a8d0dc4 100644 --- a/android/src/main/java/com/example/launchexternalapp/LaunchexternalappPlugin.java +++ b/android/src/main/java/com/example/launchexternalapp/LaunchexternalappPlugin.java @@ -57,8 +57,12 @@ public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) { } else if (call.method.equals("openApp")) { String packageName = call.argument("package_name"); + String arguments = call.argument("arguments").toString(); - result.success(openApp(packageName, call.argument("open_store").toString())); + if(arguments != null) + result.success(openApp(packageName, call.argument("open_store").toString(), arguments)); + else + result.success(openApp(packageName, call.argument("open_store").toString())); } else { result.notImplemented(); @@ -94,4 +98,27 @@ private String openApp(String packageName, String openStore) { } return "something went wrong"; } + + private String openApp(String packageName, String openStore, String arguments) { + if (isAppInstalled(packageName)) { + Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(packageName); + if (launchIntent != null) { + // null pointer check in case package name was not found + launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + launchIntent.putExtra("arguments", arguments); + context.startActivity(launchIntent); + return "app_opened"; + } + } else { + if (openStore != "false") { + Intent intent1 = new Intent(Intent.ACTION_VIEW); + intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent1.setData(android.net.Uri.parse("https://play.google.com/store/apps/details?id=" + packageName)); + context.startActivity(intent1); + return "navigated_to_store"; + } + } + return "something went wrong"; + } + } diff --git a/lib/external_app_launcher.dart b/lib/external_app_launcher.dart index 3ec96ec..6f6cefd 100644 --- a/lib/external_app_launcher.dart +++ b/lib/external_app_launcher.dart @@ -32,7 +32,9 @@ class LaunchApp { {String? iosUrlScheme, String? androidPackageName, String? appStoreLink, - bool? openStore}) async { + bool? openStore, + String? arguments, + }) async { String? packageName = Platform.isIOS ? iosUrlScheme : androidPackageName; String packageVariableName = Platform.isIOS ? 'iosUrlScheme' : 'androidPackageName'; @@ -46,7 +48,8 @@ class LaunchApp { return await _channel.invokeMethod('openApp', { 'package_name': packageName, 'open_store': openStore == false ? "false" : "open it", - 'app_store_link': appStoreLink + 'app_store_link': appStoreLink, + 'arguments' : arguments, }).then((value) { if (value == "app_opened") { print("app opened successfully");