首页 > 解决方案 > 如何使用 API 从颤振插件启动活动

问题描述

所以我正在制作一个 Flutter 插件,并尝试在 Android 上运行 Kotlin 代码。问题是,此代码运行一个方法,该方法尝试在没有FLAG_ACTIVITY_NEW_TASK意图标志的情况下启动活动。这样做的问题是它也没有办法给它一个intent instance,因为它试图在方法本身内实例化一个实例。该方法期望从存储在 UI 上并从中调用的按钮或其他方法调用。但是,由于是从onMethodCallFlutter插件中的方法调用的,所以好像不起作用。我尝试了许多解决方法,例如在 Activity 中添加一个方法并在从 Flutter 插件类调用它时运行其中的代码。我也尝试过使用 UIThread 也没有运气。任何解决方法?

注意:由于隐藏了这个 API,我没有提供任何代码。应该只知道我正在运行onMethodCall事件中的代码。

错误:Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

标签: androidflutterkotlinflutter-plugin

解决方案


您可以扩展您的插件以ActivityAware在您的插件类中实现,当您实现它时,您会得到几个回调,这些回调会为您提供当前活动。像这样 :

lateinit activity: Activity? = null
override fun onDetachedFromActivity() {
    activity = null
  }

  override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) {
    activity = binding.activity
  }

  override fun onAttachedToActivity(binding: ActivityPluginBinding) {
    activity = binding.activity
  }

  override fun onDetachedFromActivityForConfigChanges() {
    activity = null
  }

之后,您可以从分配的活动变量中启动活动。

如果您需要进一步的帮助,请告诉我。


推荐阅读