是否可以从BroadcastReceiver / Alarm Manager获取FlutterView?

时间:2019-01-30 09:32:07

标签: android flutter broadcastreceiver

我正在尝试构建执行以下操作的Flutter应用程序:

1)每分钟运行一次警报管理器(即使应用程序处于后台/关闭状态)。

2)调用警报管理器的onReceive方法时,获取用户位置。

3)将此位置存储在SQL / SQF数据库中。

基本上,我所有的代码都在工作。但是,我希望对两个不同的插件执行第2步和第3步,以创建更多的模块化。但是要这样做,我需要有FlutterView的实例,以便可以从Android执行“ MethodChannel(flutterView, CHANNEL).invokeMethod(methods, args);”。

(在android / Java中,onReceive方法)我试图从上下文中获取FlutterView,如下所示:

            private FlutterView viewFromAppContext(Context context) {
                Application app = (Application) context.getApplicationContext();
                if (!(app instanceof FlutterApplication)) {
                    Log.i(TAG, "viewFromAppContext app not a FlutterApplication");
                    return null;
                }
                FlutterApplication flutterApp = (FlutterApplication) app;
                Activity activity = flutterApp.getCurrentActivity();
                if (activity == null) {
                    Log.i(TAG, "viewFromAppContext activity is null");
                    return null;
                }
                if (!(activity instanceof FlutterActivity)) {
                    Log.i(TAG, "viewFromAppContext activity is not a FlutterActivity");
                    return null;
                }
                FlutterActivity flutterActivity = (FlutterActivity) activity;
                return flutterActivity.getFlutterView();
            }

但是,当我尝试在后台运行应用程序时,活动为null。
在这种情况下是否可以创建新的活动和/或flutterview(可以将其定向到我在dart中的“ setMethodCallHandler”方法)?

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找的是FlutterNativeView,其第二个参数设置为true;它不容易遵循,与链接的git repo略有不同,并且其设计超出了您的需求,但是Ben Konyi has a working example of this。我认为您可能会喜欢检查他保持其他插件和服务正常运行的某些方式,如果不使用methodchannel impl(具有三个回调域)。