当前位置: 首页 > 知识库问答 >
问题:

ActivityAware.onAttachedToActive未被触发

管梓
2023-03-14

我正在尝试使用MethodChannel和Kotlin作为我的语言选择,将Android的Zendesk原生SDK移植到Flatter中。

当我在项目中直接使用Kotlin代码时,它就可以工作了

class MainActivity : FlutterActivity() {

  // others code are hidden

  private fun initialize(call: MethodCall, result: Result) {
    val url: String = call.argument("url")!!
    val appId: String = call.argument("appId")!!
    val clientId: String = call.argument("clientId")!!

    Zendesk.INSTANCE.init(this, url, appId, clientId)
    val identity = AnonymousIdentity()
    Zendesk.INSTANCE.setIdentity(identity)
    Support.INSTANCE.init(Zendesk.INSTANCE)

    RequestListActivity.builder().show(this)
    result.success(true)
  }
}

这个指的是活动,我想应用程序已经在里面了,但是当我试图制作独立的插件时,事情有点不同。我需要实现ActivityAware来获取活动(在flatter插件中获取活动引用)。

https://github.com/flutter/flutter/wiki/Experimental:-创建颤振插件

(可选)如果插件需要活动引用,也可以实现ActivityAware。

public class ZendeskPlugin : FlutterPlugin, MethodCallHandler, ActivityAware {
  private lateinit var activityBinding: ActivityPluginBinding

  // I can get ActivityPluginBinding from this method
  override fun onAttachedToActivity(@NonNull binding: ActivityPluginBinding) {
    activityBinding = binding
  }

  private fun initialize(call: MethodCall, result: Result) {
    activityBinding?.activity?.let {
      val appId: String = call.argument("appId")!!
      val clientId: String = call.argument("clientId")!!
      val url: String = call.argument("url")!!

      Zendesk.INSTANCE.init(it, url, appId, clientId)
      val identity = AnonymousIdentity()
      Zendesk.INSTANCE.setIdentity(identity)
      Support.INSTANCE.init(Zendesk.INSTANCE)

      RequestListActivity.builder().show(it)
      result.success(true)
      return
    }

    result.error("INITIALIZE_FAILED", "Failed to initialize", null)
  }
}

我试图从dart调用initialize,实际上它运行了,但似乎从未调用过附加的toactivity,并且使activityBinding从未初始化,因此代码失败,结果是。错误。

如何在类中获取活动?非常感谢。

共有1个答案

濮阳鸿祯
2023-03-14

问题可能是onAttachedToEngine中setMethodCallHandler的调用

在这里查看更多信息

 类似资料:
  • 我使用的是spring boot、kotlin和junit5。我有一个测试类,当我在未触发所有函数之前使用RunWith(SpringRunner::class)@时,但当我删除该类时,它会给lateinit字段带来错误。

  • 我正在尝试添加一个搜索功能,在这个功能中,每当用户输入文本(一个字母接一个字母)时,网站都会向服务器发送一个收集信息的请求。对于这一点,我需要的是我假设的ContextChanged事件?我尝试过使用它,但活动无法启动。 还有我的代码: 你认为哪里不对?yall是否有比“ContextChanged事件”更好的解决方案来获得每次按键和搜索框?

  • 在AndroidManifest中。xml我有一个: 我的广播文件: 我试图运行应用程序后关闭它在后台播放音乐。

  • 正如标题所说,我根本无法让Quartz.net工作。我从NuGet获得了最新版本的Quartz.net(2.2.1)、Common.Logging(2.1.2)、Common.Logging.NLog(2.0.0)和NLog(2.1.0)。触发器没有被触发,而且石英绝对没有记录任何东西。我猜我搞砸了配置。 我的应用程序配置: 有一个作业和一个触发器与之相关: 调度程序将启动,作业和触发器将正确添加

  • 问题内容: 此代码 在我的标记中 这是完整的ajax请求: 即使gif显示为旋转,也永远不会触发警报“开始”。AjaxStop如预期那样被触发。有什么想法吗? 问题答案: 之所以不会被触发,是因为直到ajax请求执行完 之后 (直到被调用时为止) , 您的处理程序才被注册。在被注册后为好,但 之前 的请求完成,所以当它回来就迷上了运行。 要解决此问题,请 在 首次致电 之前 将其移动: 更新:从j

  • 问题内容: 尝试使用vue watch方法,但即使使用,它似乎也不会触发某些对象。 在我的组件中,我收到一个数组作为prop,它们是创建以下表单的字段。我可以构建表单并将其动态绑定到一个名为的对象,并且一切正常(我在vue开发工具中看到,甚至可以按计划提交表单作品) 但是我在尝试观察该动态对象的变化时遇到了问题。 问题答案: 来自文档 由于现代JavaScript的局限性(以及Object.obs