You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何调用Honeywell SDK的.jar文件内BatteryManager类?

在Flutter中调用霍尼韦尔Android SDK的BatteryManager类

1. 确认Android项目依赖配置

先确保Jar文件的依赖配置生效:

  • 打开android/app/build.gradle,在dependencies代码块中添加:
    implementation files('libs/Honeywell.jar')
    
  • 同步Android项目,确保依赖加载完成。

2. 建立Flutter与Android的通信通道

在main.dart中初始化MethodChannel,用于跨平台通信:

import 'package:flutter/services.dart';

// 通道名需和Android端保持一致,可自定义
const MethodChannel _honeywellChannel = MethodChannel('honeywell_battery_channel');

3. 在Android原生层封装BatteryManager调用逻辑

打开Android项目的MainActivity.kt(或MainActivity.java),编写原生代码桥接逻辑:

Kotlin示例:

import android.os.Bundle
import com.honeywell.xxx.BatteryManager // 替换为Jar中BatteryManager的实际包路径
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel

class MainActivity : FlutterActivity() {
    private val CHANNEL = "honeywell_battery_channel"

    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        super.configureFlutterEngine(flutterEngine)
        MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->
            when (call.method) {
                // 对应Flutter端调用的方法名
                "getBatteryLevel" -> {
                    val batteryManager = BatteryManager(applicationContext)
                    // 替换为BatteryManager提供的真实方法
                    val level = batteryManager.getBatteryPercentage()
                    result.success(level)
                }
                else -> result.notImplemented()
            }
        }
    }
}

Java示例:

import android.os.Bundle;
import com.honeywell.xxx.BatteryManager; // 替换为实际包路径
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.plugin.common.MethodChannel;

public class MainActivity extends FlutterActivity {
    private static final String CHANNEL = "honeywell_battery_channel";

    @Override
    public void configureFlutterEngine(FlutterEngine flutterEngine) {
        super.configureFlutterEngine(flutterEngine);
        new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL).setMethodCallHandler(
                (call, result) -> {
                    if (call.method.equals("getBatteryLevel")) {
                        BatteryManager batteryManager = new BatteryManager(getApplicationContext());
                        int level = batteryManager.getBatteryPercentage(); // 替换为真实方法
                        result.success(level);
                    } else {
                        result.notImplemented();
                    }
                }
        );
    }
}

注意:需替换com.honeywell.xxx.BatteryManager为Jar文件中类的实际包名,同时替换getBatteryPercentage()为该类提供的真实方法。

4. 在main.dart中调用原生封装方法

通过MethodChannel调用原生逻辑,间接使用BatteryManager的功能:

// 封装调用方法
Future<int?> getHoneywellBatteryLevel() async {
  try {
    final int? level = await _honeywellChannel.invokeMethod('getBatteryLevel');
    return level;
  } on PlatformException catch (e) {
    print("调用失败: ${e.message}");
    return null;
  }
}

// 在Widget中使用示例
@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(title: const Text("霍尼韦尔电池管理")),
    body: Center(
      child: ElevatedButton(
        onPressed: () async {
          int? batteryLevel = await getHoneywellBatteryLevel();
          print("当前电池电量: $batteryLevel%");
        },
        child: const Text("获取电池电量"),
      ),
    ),
  );
}

核心说明

  • Flutter无法直接调用Android Jar中的类,必须通过MethodChannel实现跨平台通信,将原生逻辑封装后暴露给Dart层。
  • 需参考霍尼韦尔SDK文档,确保BatteryManager的初始化方式、方法调用符合官方要求(比如是否需要传入上下文、是否有单例限制等)。
  • 若需调用更多BatteryManager的方法,只需在原生层的MethodChannel回调中添加对应的方法分支即可。

内容的提问来源于stack exchange,提问作者TheMortiestMorty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 13:07:21