【问题标题】:How to get Activity from Flutter Android's PlatformView如何从 Flutter Android 的 PlatformView 获取 Activity
【发布时间】:2021-04-20 07:14:53
【问题描述】:

是否可以从我的原生 Android 代码中获取当前活动(如 FooView.java 的构造函数所示,我需要提供一个活动)?

我需要 FooView.java 本身来检查相机权限并检查是否安装了 ARCore。我对 Flutter 和它的平台集成相当陌生,我无法在网上找到答案。如果它是 Flutter 插件,则可以通过 registrar.activity() 访问活动,但我没有注册商,因为我使用了非插件方法(我相信它被称为 App registration)。

MainActivity.java

public class MainActivity extends FlutterActivity {
  @Override public void configureFlutterEngine(FlutterEngine flutterEngine) {
    GeneratedPluginRegistrant.registerWith(flutterEngine);
    flutterEngine.getPlatformViewsController().getRegistry().registerViewFactory("fooView", new FooViewFactory());
  }
}

FooView.java

public class FooView implements PlatformView {
  private boolean requestInstall = true;

  FooView(Context context, int id, Map<String, Object> creationParams) {
    Activity someActivity = ?????; // TODO: Find where to get the activity holding the view
    switch (ArCoreApk.getInstance().requestInstall(someActivity, requestInstall)) {
      ...
    }
  }
}

【问题讨论】:

    标签: android flutter flutter-android


    【解决方案1】:

    首先,将您的 viewFactory 构造函数更改为包含活动:

    class NativeViewFactory(val activity: Activity)
    
    

    现在更改本机 View 的构造函数,在您的情况下是 FooView。 将其更改为此以包含活动。

    FooView(Activity activity,Context context, int id, Map<String, Object> creationParams)
    
    

    现在最后一部分是替换 MainActivity 中的以下代码:

    flutterEngine.getPlatformViewsController().getRegistry().registerViewFactory("fooView", new FooViewFactory());
    

    用这个:

    flutterEngine.getPlatformViewsController().getRegistry().registerViewFactory("fooView", new FooViewFactory(getActivity()));
    

    【讨论】:

      猜你喜欢
      • 2020-11-14
      • 2012-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多