美文网首页
flutter iOS获取手机充电状态 是否在充电

flutter iOS获取手机充电状态 是否在充电

作者: 守护浪漫的小香樟 | 来源:发表于2023-09-20 13:28 被阅读0次

flutter项目中有个需求,针对手机是否在充电进行判断走不同的业务逻辑.

一、错误尝试

1、经过查找资料: 需要使用插件battery_plus

battery_plus: ^4.0.2

代码实现

// 引入
import 'package:battery_plus/battery_plus.dart';

// 实现
final Battery _battery = Battery();
BatteryState state = await _battery.batteryState;、
if (state == BatteryState.charging) {
    // 充电中
 }

2、经过尝试此方法无效.

二、正确方法
思路: 既然flutter插件无用, 只能采用iOS原生的方法,获取到状态后在flutter中读取
1、先获取充电状态 iOS原生文件

// 查询电池可用状态
var enable = UIDevice.current.isBatteryMonitoringEnabled;
//enable = false;
// 设置状态可用
UIDevice.current.isBatteryMonitoringEnabled = true;

// UserDefaults存储到本地
var user = UserDefaults.standard;

switch UIDevice.current.batteryState {
        case .charging:
            print("充电中");
            user.set("1", forKey: "flutter.iosbattary")
        case .full:
            print("满电");
            user.set("2", forKey: "flutter.iosbattary")
        case .unplugged:
            print("未插电");
            user.set("3", forKey: "flutter.iosbattary")
        case .unknown:
            print("未知");
            user.set("4", forKey: "flutter.iosbattary")
        default:
            print("未知");
            user.set("5", forKey: "flutter.iosbattary")
        }

2、读取存储的电池充电状态。 flutter代码读取

// 2、电量
var res = SpUtil.getString("iosbattary");
if (res!=null && res.toString()!="3") {
//非插电状态
}

3、关于UserDefaults读取问题

注意⚠️: 在iOS端存储时用的key是flutter.iosbattary 在flutter端读取时用的是:iosbattary
查看flutter端UserDefaults的源码:

  Future<bool> _setValue(String valueType, String key, Object value) {
    ArgumentError.checkNotNull(value, 'value');
    final String prefixedKey = '$_prefix$key';
    if (value is List<String>) {
      // Make a copy of the list so that later mutations won't propagate
      _preferenceCache[key] = value.toList();
    } else {
      _preferenceCache[key] = value;
    }
    return _store.setValue(valueType, prefixedKey, value);
  }

static const String _prefix = 'flutter.';

注意看prefixedKey = '_prefixkey';
flutter读取本地数据时Key添加了一个flutter.的前缀

相关文章

网友评论

      本文标题:flutter iOS获取手机充电状态 是否在充电

      本文链接:https://www.haomeiwen.com/subject/vszovdtx.html