首页 > 解决方案 > 如何触发 ActivityAware 覆盖方法 onAttachedToActivity()?

问题描述

我需要引用我的插件的活动。根据官方文档,我实际上需要实现 ActivityAware,并且要获取对活动的引用,它是由onAttachedToActivity覆盖函数提供的。如何触发此覆盖功能?我实际上查阅了这个文档,但不太清楚如何触发它,因为我在任何地方都没有看到任何示例代码。它说

可以在以下两种情况之一中调用此方法:

这个 ActivityAware FlutterPlugin 刚刚添加到已经连接到正在运行的 Activity 的 FlutterEngine 中。这个 ActivityAware FlutterPlugin 已经被添加到了 FlutterEngine 并且 FlutterEngine 刚刚连接到了一个 Activity。

我的代码如下所示:

public class MyPlugin implements FlutterPlugin, ActivityAware {
Activity activity;
@Override
public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) {
  // TODO: your plugin is now attached to a Flutter experience.
}

@Override
public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
  // TODO: your plugin is no longer attached to a Flutter experience.
}
@Override
public void onAttachedToActivity(ActivityPluginBinding activityPluginBinding) {
    activity = activityPluginBinding.getActivity()

  // TODO: your plugin is now attached to an Activity
}

@Override
public void onDetachedFromActivityForConfigChanges() {
  // TODO: the Activity your plugin was attached to was
  // destroyed to change configuration.
  // This call will be followed by onReattachedToActivityForConfigChanges().
}

@Override
public void onReattachedToActivityForConfigChanges(ActivityPluginBinding activityPluginBinding) {
  // TODO: your plugin is now attached to a new Activity
  // after a configuration change.
}

@Override
public void onDetachedFromActivity() {
  // TODO: your plugin is no longer associated with an Activity.
  // Clean up references.
}

标签: androidflutterkotlin

解决方案


我能够让它与以下缩写实现一起工作。您实现ActivityWare接口,然后通过activityPluginBinding.activity

class ProPayFlutterPlugin : FlutterPlugin, MethodCallHandler, ActivityAware

override fun onAttachedToActivity(binding: ActivityPluginBinding) {
        activityPluginBinding = binding
        initializeCardReaderDependencies(activityPluginBinding.activity)
}
    private fun initializeCardReaderDependencies(activity: Activity) {
        Log.d(LOG_TAG, "Initializing card reader dependencies")
        SDKManager.initialize(activity.application)
        Terminal.initialize()
        cardReaderController = CardReaderController.getControllerFor(BBPOSDevice::class.java)
        val meaningfulMessageListener = CardReaderEventStream(cardReaderController)
        cardReaderNotificationChannel.setStreamHandler(meaningfulMessageListener)
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            activity.startLockTask()
        }
    }

推荐阅读