You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter中启动带数据和包名的Android Intent?

如何将ADB启动Intent命令转换为Flutter实现?

我有一条可通过Android Debug Bridge(ADB)正常运行的命令:

adb shell am start -W -a android.intent.action.VIEW -d "https://www.paytr.com/payment?paymentSessionToken=$token" com.provisionpay.softpos.paytr

需要将其转换为Flutter实现。


已尝试方案

1. 使用url_launcher

final uri = Uri.parse('https://www.paytr.com/payment?paymentSessionToken=asdasdasd');
launchUrl(uri, mode: LaunchMode.externalApplication);

此代码会在浏览器中打开www.paytr.com,无法唤起目标应用。

2. 使用external_app_launcher

await LaunchApp.openApp(
  androidPackageName: 'com.provisionpay.softpos.paytr',
  openStore: false
);

即使应用已安装,此代码仍会跳转到Google Play商店,且无法传递支付链接参数。


正确实现方式:使用android_intent_plus包

这个包可以直接构造与ADB命令完全匹配的Android Intent,精准唤起目标应用并传递参数。

步骤1:添加依赖

在pubspec.yaml中添加依赖:

dependencies:
  android_intent_plus: ^4.0.0 # 建议使用最新版本

步骤2:编写实现代码

import 'package:android_intent_plus/android_intent_plus.dart';

void launchPayTrPayment(String token) async {
  final payTrIntent = AndroidIntent(
    action: 'android.intent.action.VIEW', // 对应ADB中的`-a`参数
    data: 'https://www.paytr.com/payment?paymentSessionToken=$token', // 对应ADB中的`-d`参数
    package: 'com.provisionpay.softpos.paytr', // 对应ADB末尾指定的包名
  );
  await payTrIntent.launch();
}

为什么之前的方案无效?

  • url_launcher:仅发起VIEW动作打开URI,但未指定目标应用包名,系统会默认用浏览器处理,而非目标应用。
  • external_app_launcher:仅单纯启动应用,未传递VIEW动作和支付链接参数,且可能因包名校验或配置问题跳转至应用商店。

内容的提问来源于stack exchange,提问作者M. Akar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 10:27:14