Flutter插件开发-电池电量管理插件示例

防采集标记:亢少军老师的课程和资料

以下说明了怎么调用平台特定的接口来取得并显示当前的电池电量。通过单独的一个的平台消息,使用 Android BatteryManager 接口,和 iOS device.batteryLevel 接口。

注意:这个示例完整可运行的代码在这儿/examples/platform_channel/,该版本使用 Java 开发 Android,Objective-C 开发的 iOS。iOS 的 Swift 版本请参阅/examples/platform_channel_swift/.

步骤 1: 创建新工程

开始创建新工程:

  • 在终端运行: flutter create batterylevel

默认模板支持使用 Java 编写 Android,Objective-C 编写 iOS。想使用Kotlin 或者 Swift,使用 -i 与/或 -a 标记;

  • 终端运行: flutter create -i swift -a kotlin batterylevel

步骤 2: 创建 Flutter 平台客户端

应用的 State 类持有当前应用的状态。我们需要扩展它来持有当前的电池状态。

首先,我们构造通道。我们使用 MethodChannel 编写单独的平台方法并返回电池变量。

通道的客户端和宿主端通过在构造器中传入通道名来连接。所有的通道名在一个应用中必须唯一;我们推荐使用唯一的’域名前缀’给通道名加前缀,如 samples.flutter.io/battery

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
...
class _MyHomePageState extends State<MyHomePage> {
  static const platform = const MethodChannel('samples.flutter.io/battery');

  // Get battery level.
}

接下来,我们调用方法通道上的方法,指定具体方法。通过字符串标识符 getBatteryLevel 调用。调用也许会失败 – 例如如果平台不支持平台接口(比如运行在模拟器上),所以我们用语句块来包装invokeMethod 调用。我们拿到返回结果在 setState 里面用 _batteryLevel 更新用户界面状态。

  // Get battery level.
  String _batteryLevel = 'Unknown battery level.';

  Future<Null> _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;
    });
  }

最后,我们把模板中的 build 方法替换为一个小的用户界面用字符串显示电池状态,还有一个按钮来刷新这个值。

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

步骤 3a: 用 Java 添加 Android 平台特定实现

注意: 以下步骤使用 Java。如果你更喜欢 Kotlin,跳到步骤3b。

在 Android Studio 中打开 Android 宿主端:

  1. 打开 Android Studio。

  2. 选择菜单项 ‘文件 > 打开…’。

  3. 导航到 Flutter 应用程序的目录,选择它里面的 android 文件夹。点击确定。

  4. 在工程视图下打开位于 java 文件夹的 MainActivity.java 文件。

下一步,创建 MethodChannel 并在 onCreate 方法中设置 MethodCallHandler。确保使用了和 Flutter 客户端同样的通道名。

import io.flutter.app.FlutterActivity;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
import io.flutter.plugin.common.MethodChannel.Result;

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

    @Override
    public void onCreate(Bundle savedInstanceState) {
   

        super.onCreate(savedInstanceState);

        new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler(
                new MethodCallHandler() {
   
                    @Override
                    public void onMethodCall(MethodCall call, Result result) {
   
                        // TODO
                    }
                });
    }
}

下一步,我们添加真正的 Android Java 代码,使用 Android 电池接口取到电池电量。这些代码和你编写原生的 Android 应用一样。

首先,在文件顶部添加必要的应用:

import android.content.ContextWrapper;
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;

在 activity 类中 onCreate 的方法下面紧接着添加一个新的方法:

private int getBatteryLevel() {
   
  int batteryLevel = -1;
  if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) {
   
    BatteryManager batt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亢少军

致力于跨平台技术开发

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值