【问题标题】:Ionic 4: BatteryStatus doesn't changeIonic 4:BatteryStatus 不会改变
【发布时间】:2021-10-22 09:20:47
【问题描述】:

我正在尝试在我的应用中获取设备的电池状态。

安装后

cordova-plugin-battery-status
@ionic-native/battery-status
@ionic-native/core

我将BatteryStatus 放入模块提供程序中。

在组件中,我有:

batterySubscription: Subscription;
batteryLevel: number = 100;
isBatteryPlugged: boolean = false;

constructor(private batteryStatus: BatteryStatus) { }

ngOnInit() {
  this.initSubscriptions();
}

initSubscriptions() {
  this.batterySubscription = this.batteryStatus.onChange().subscribe( (status: 
  BatteryStatusResponse) => {
    console.log(status.level, status.isPlugged);
    this.batteryLevel = status.level;
    this.isBatteryPlugged = status.isPlugged;
  });
}

一切都编译得很完美,但电池信息永远不会改变(在浏览器和应用程序中一样)。当我插入计算机和电池电量变化时,它都不会检测到。

有人知道这个问题吗? 谢谢!

【问题讨论】:

    标签: angular typescript ionic-framework


    【解决方案1】:

    代码对我来说看起来不错,但该插件太旧了,它可能无法在较新的操作系统上按预期工作。您可以尝试打开一个问题:https://github.com/apache/cordova-plugin-battery-status/issues

    如果我是你,我会尝试使用电容器:https://capacitorjs.com/docs/apis/device#getbatteryinfo

    【讨论】:

    • 电容器工作良好,但我无法检测到电池信息的变化...
    【解决方案2】:

    取决于您正在测试的操作系统,而不是

    this.battery.onChange()
    

    你可能会得到更好的结果

    fromEvent<BatteryStatusResponse>(window, 'batterystatus')
    

    这是我在 Android 10 上一直使用的,并从中获得了所需的行为。

    更多参考:https://github.com/apache/cordova-plugin-battery-status/issues/66#issuecomment-527070672

    【讨论】:

    • 不幸的是,这种方法不起作用,对于您提到的问题中的某些人来说,它似乎是一样的。感谢您的帮助!
    • 知道了,我注意到它的价值所在,这种方法可能需要很长时间才能将任何内容传递给订阅,尤其是在尝试通过 USB 进行调试时。
    • 你认为什么是“很长一段时间”?
    • 可能需要几分钟。如果它插入 USB 并且没有运行繁重的过程,则可能需要一段时间才能更换电池。从我的服务的构造函数初始化订阅时,我确实获得了更大的成功。理想情况下,他们会更改此 api 以返回一个 BehaviorSubject,或者至少表现得像一个。
    【解决方案3】:

    我选择使用带有 setInterval 的电容器来更新电池信息。如果有人有更好的方法,我愿意阅读:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-15
      • 2019-04-23
      • 2021-04-20
      • 1970-01-01
      • 2014-09-10
      • 2019-11-22
      • 2021-02-02
      • 1970-01-01
      相关资源
      最近更新 更多