方法通道在Flutter Module中不起作用

时间:2019-06-19 04:32:30

标签: android methods flutter channel

我在flutter开发文档中编写演示代码以显示电池电量。 但是代码不起作用,方法通道在调用时显示日志错误: -未处理的异常:MissingPluginException(在通道samples.flutter.dev/battery上未找到方法getBatteryLevel的实现) 请帮我!谢谢大家!

2 个答案:

答案 0 :(得分:0)

假设您在本机应用程序中使用缓存的flutter引擎。

您的应用程序类应设置FlutterPluginCache。

class Application : MultiDexApplication() {
    lateinit var flutterEngine : FlutterEngine

    override fun onCreate() {
        super.onCreate()

        // Instantiate a FlutterEngine.
        flutterEngine = FlutterEngine(this)

        // Start executing Dart code to pre-warm the FlutterEngine.
        flutterEngine.dartExecutor.executeDartEntrypoint(
                DartExecutor.DartEntrypoint.createDefault()
        )

        // Cache the FlutterEngine to be used by FlutterActivity.
        FlutterEngineCache
                .getInstance()
                .put("flutter_engine_id", flutterEngine)
    }
}

在应用程序的活动中,获取启动引擎并设置方法调用处理程序。

 class FlutterDemoActivity : FlutterActivity() {
      private val CHANNEL = "samples.flutter.dev/battery"
      private val flutter_engine_id = "flutter_engine_id"

      @SuppressLint("SetTextI18n")
      override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_flutter_demo)
        
        //Get your flutter engine using engine id. 
        val engine = FlutterEngineCache.getInstance().get(flutter_engine_id)
        engine?.let{
          //Set method call handler to that engine.
          MethodChannel(it.dartExecutor.binaryMessenger, 
          CHANNEL).setMethodCallHandler {
             call, result ->
             if(call.method=="getBatteryLevel"){
               result.success(89) //send whatever you need here.
            }
          }
        }
      }
    }

答案 1 :(得分:0)

由于没有有关代码的详细信息,因此我假设您传递的是正确的方法名称和正确的通道名称。确保您的Android本机代码中的FlutterActivity在任何时间都不会被破坏。方法频道使用flutter引擎来调用android本机代码,以防万一FlutterActivity被销毁了。