java - 错误 : cannot find symbol new MethodChannel(flutterEngine. getDartExecutor().getBinaryMessenger(), channel )

标签 java android ubuntu flutter dart

好吧,我正在尝试使用 PlatformChannels 从 flutter 导入 Java 代码,我在 Ubuntu 上并且收到该错误,也许这是一个 Java 错误,请创建我的项目

flutter create -a java Batterylevel 我按照此链接上的文档进行操作 https://flutter.dev/docs/development/platform-integration/platform-channels?tab=android-channel-java-tab

我有这个 Java 文件(与文档相同)

import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES;
import android.os.Bundle;

import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.plugins.GeneratedPluginRegistrant;

public class MainActivity extends FlutterActivity {
  private static final String CHANNEL = "samples.flutter.dev/battery";

  @Override
  public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
    GeneratedPluginRegistrant.registerWith(flutterEngine);
    new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL)
        .setMethodCallHandler(
          (call, result) -> {
            if (call.method.equals("getBatteryLevel")) {
              int batteryLevel = getBatteryLevel();

              if (batteryLevel != -1) {
                result.success(batteryLevel);
              } else {
                result.error("UNAVAILABLE", "Battery level not available.", null);
              }
            } else {
              result.notImplemented();
            }
          }
        );
  }

  private int getBatteryLevel() {
    int batteryLevel = -1;
    if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) {
      BatteryManager batteryManager = (BatteryManager) getSystemService(BATTERY_SERVICE);
      batteryLevel = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY);
    } else {
      Intent intent = new ContextWrapper(getApplicationContext()).
          registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
      batteryLevel = (intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) * 100) /
          intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
    }

    return batteryLevel;
  }

}

这个 flutter 代码(如文档)

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

class MyHomePage extends StatefulWidget {
  const MyHomePage({
    Key key,
  }) : super(key: key);

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  static const platform = const MethodChannel('samples.flutter.dev/battery');

  String _batteryLevel = 'Unknown battery level.';

  Future<void> _getBatteryLevel() async {
    String batteryLevel;
    try {
      final int result = await platform.invokeMethod('getBatteryLevel');
      batteryLevel = 'Battery level at $result % .';
    } on PlatformException catch (e) {
      batteryLevel = "Failed to get battery level: '${e.message}'.";
    }

    setState(() {
      _batteryLevel = batteryLevel;
    });
  }

 @override
  Widget build(BuildContext context) {
    return Material(
      child: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.spaceEvenly,
          children: [
            RaisedButton(
              child: Text('Get Battery Level'),
              onPressed: _getBatteryLevel,
            ),
            Text(_batteryLevel),
          ],
        ),
      ),
    );
  }
}

我在 vscode OpenJDK11 上有我的 Java 路径:“java.home”:“/home/felipe/jdk1.8.0_111”

有人知道这是怎么回事吗?也许是linux平台或者Java,或者是我的代码,希望你能帮助我,谢谢!!!

最佳答案

我发现了自己的问题,我正在使用旧版本,并且 channel 不稳定,当我将 flutter SDK 升级到版本 1.17 并更改 channel 时,它可以工作。

关于java - 错误 : cannot find symbol new MethodChannel(flutterEngine. getDartExecutor().getBinaryMessenger(), channel ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61684167/

相关文章:

ubuntu - Doxygen:找不到共享库 'libclang.so.6'

java - 运行时错误: running java class file

java - 有人(成功)使用 Openjpa 和 Glassfish 4 了吗?

android - 如何结合 OpenGL 使用 onSensorChanged 传感器数据

java - 完成类(class)并从已完成类(class)到主类(class)获取 int

android - PictureListener 已弃用和过时,有替代品吗?

python - var/www/html 中没有 index.lighttpd.html

r - 从远程 Linux 服务器上的 R 调用 Companies House API 时出现 SSL 连接错误

java - 有什么理由只为 1 个元素创建一个数组吗?

java - 在java中获取mp3音频信号作为数组