android - 如何触发 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.
}
解决方案
我能够让它与以下缩写实现一起工作。您实现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()
}
}
推荐阅读
- xamarin - Xamarin 仅选择一个单选按钮
- matlab - 在MATLAB中以图像像素为输入训练神经网络并获取屏幕坐标值作为输出
- spring - 如何使用 Spring 为文本搜索设置 default_language
- java - 使用重复键解析 json
- c# - PDF 上的数字签名 - 使用 Itextsharp 5 .net 的 acrobat 阅读器中不显示完整的证书链
- c - 多个文件和结构,不同的输出
- java - 当我在 GridView 中使用 setOnItemClickListener 时返回 null
- python - 没有名为“localstack.mock”的模块
- eclipse - Eclipse:单击任何视图即可调用文件匹配策略
- clojure - DataScript / datahike 规则不返回任何内容