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

Flutter quick_actions插件报quick_action_getlaunchaction_no_activity错误求助

问题分析

错误PlatformException(quick_action_getlaunchaction_no_activity, There is no activity available when launching action)的核心原因是:在Flutter应用的Activity还未完成初始化时,调用了quick_actions插件的initialize方法。

从你的main.dart代码可以看到,QuickActionsService().init()是在runApp()之前执行的,而Android端的quick_actions插件需要依赖已绑定的Flutter Activity才能完成初始化流程,此时Activity还未被创建和绑定,因此抛出该异常。

解决方案

方案1:延迟初始化到runApp之后

将QuickActions的初始化逻辑移到runApp之后,确保Activity已完成绑定。可以通过WidgetsBinding.instance.addPostFrameCallback实现:

修改main.dart:

Future<void> main({bool testing = false}) async {
  WidgetsFlutterBinding.ensureInitialized();
  setupLocator();

  var fbApp = await Firebase.initializeApp(
      options: DefaultFirebaseOptions.currentPlatform);
  if (!testing) {
    FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterFatalError;
    PlatformDispatcher.instance.onError = (error, stack) {
      FirebaseCrashlytics.instance.recordError(error, stack, fatal: true);
      return true;
    };
    if (kReleaseMode) {
      await fbApp.setAutomaticDataCollectionEnabled(true);
    } else {
      await fbApp.setAutomaticDataCollectionEnabled(false);
    }
  }
  await AuthenticationService().init();
  await NotificationService().init();
  await AppAudioService().init();
  await FkUserAgent.init();
  
  runApp(const FreeCodeCampMobileApp());
  
  // 延迟初始化QuickActions,确保Activity已就绪
  WidgetsBinding.instance.addPostFrameCallback((_) async {
    await QuickActionsService().init();
  });
}

方案2:在初始化时添加异常捕获

如果必须在runApp前执行初始化,可以添加try-catch捕获异常,避免崩溃:

修改QuickActionsService的init方法:

Future<void> init() async {
  try {
    await quickActions.setShortcutItems([
      const ShortcutItem(
        type: 'action_tutorials',
        localizedTitle: 'Tutorials',
      ),
      const ShortcutItem(
        type: 'action_learn',
        localizedTitle: 'Learn',
      ),
      const ShortcutItem(
        type: 'action_code_radio',
        localizedTitle: 'Code Radio',
      ),
      const ShortcutItem(
        type: 'action_podcasts',
        localizedTitle: 'Podcasts',
      ),
    ]);

    await quickActions.initialize((shortcutType) {
      switch (shortcutType) {
        case 'action_tutorials':
          _navigationService.replaceWith(Routes.homeView);
          break;
        case 'action_learn':
          _navigationService.replaceWith(Routes.learnLandingView);
          break;
        case 'action_code_radio':
          _navigationService.replaceWith(Routes.codeRadioView);
          break;
        case 'action_podcasts':
          _navigationService.replaceWith(Routes.podcastListView);
          break;
        default:
      }
    });
  } catch (e) {
    // 记录异常到Crashlytics或者忽略
    FirebaseCrashlytics.instance.recordError(e, StackTrace.current, fatal: false);
  }
}

方案3:确认Activity配置的正确性

你的AndroidManifest中使用com.ryanheise.audioservice.AudioServiceActivity作为主Activity,需要确保该Activity正确继承并实现了Flutter的嵌入逻辑。如果是第三方库提供的Activity,确认其版本与Flutter SDK版本兼容,避免Activity绑定异常。

补充说明

该异常通常出现在应用冷启动的边缘场景(比如系统资源紧张时启动应用),因此难以在本地复现。通过调整初始化时机,可以从根本上避免该问题。

内容的提问来源于stack exchange,提问作者SemBauke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:07:09