android - 方法 channel 在 Flutter 模块中不起作用

标签 android methods flutter channel

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

最佳答案

假设您在 native 应用程序中使用缓存的 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)
    }
}
在您的应用程序的 Activity 中,获取 flutter 引擎并设置方法调用处理程序。
 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.
            }
          }
        }
      }
    }

关于android - 方法 channel 在 Flutter 模块中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56660099/

相关文章:

android - Instant App - 数字 Assets 链接协议(protocol)

java - 为什么我的程序中不能调用这个方法?

javascript - 未捕获的类型错误 : "(function call) is not a function"

android - java.lang.IllegalArgumentException : Illegal URL with retrofit 异常

android - XDE.exe 一直使用 > 35% CPU - 这是预期的行为吗? (VS 安卓模拟器)

android - Android主题中的windowIsFloating属性

c# - 按 Escape 键调用方法

api - 如何使用Dart从GraphQL API获取和使用所需的属性?

firebase - 无法使用Flutter Web访问Cloud Firestore

flutter - 更新到 Flutter 1.12.13 后,TextField 提示/输入文本在没有 prefixIcon 的情况下未居中