【问题标题】:How to access the current battery status in an Ionic 4 / Angular + Cordova application?如何在 Ionic 4 / Angular + Cordova 应用程序中访问当前电池状态?
【发布时间】:2019-07-13 10:58:55
【问题描述】:

目标

我想访问 Ionic 4 / Angular + Cordova 应用程序中的当前电池状态。

我尝试过的

我在一个干净的空白 Ionic 4 应用程序上遵循了 https://ionicframework.com/docs/native/battery-status 的说明。

app.module.ts

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouteReuseStrategy } from '@angular/router';

import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx';
import { BatteryStatus } from '@ionic-native/battery-status/ngx';

import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';

@NgModule({
  declarations: [AppComponent],
  entryComponents: [],
  imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule],
  providers: [
    StatusBar,
    SplashScreen,
    BatteryStatus,
    { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }
  ],
  bootstrap: [AppComponent]
})
export class AppModule {}

home.page.ts

import { Component } from '@angular/core';
import { BatteryStatus } from '@ionic-native/battery-status/ngx';

@Component({
  selector: 'app-home',
  templateUrl: 'home.page.html',
  styleUrls: ['home.page.scss']
})
export class HomePage {
  constructor(private batteryStatus: BatteryStatus) {
    // watch change in battery status
    const subscription = this.batteryStatus.onChange().subscribe(status => {
      console.log(status.level, status.isPlugged);
    });
  }
}

问题

遗憾的是,我总是收到以下错误,有人知道我做错了什么吗?

Error

ERROR TypeError: Invalid event target
    at setupSubscription (fromEvent.js:50)
    at Observable._subscribe (fromEvent.js:24)
    at Observable.push../node_modules/rxjs/_esm5/internal/Observable.js.Observable._trySubscribe (Observable.js:43)
    at Observable.push../node_modules/rxjs/_esm5/internal/Observable.js.Observable.subscribe (Observable.js:29)
    at new HomePage (home.page.ts:12)
    at createClass (core.js:22150)
    at createDirectiveInstance (core.js:22029)
    at createViewNodes (core.js:23255)
    at createRootView (core.js:23169)
    at callWithDebugContext (core.js:24177)

【问题讨论】:

    标签: cordova cordova-plugins ionic4 battery


    【解决方案1】:

    代码看起来正确。

    您遇到的可能是电池状态 API 已过时。

    我认为它基本上被跟踪工具滥用了,因为它可以很容易地与其他技术结合起来对用户进行数字指纹识别:

    过时

    此功能已过时。尽管它可能在某些浏览器中仍然有效,但不鼓励使用它,因为它可能随时被删除。尽量避免使用它。

    【讨论】:

      【解决方案2】:

      @rtpHarry

      感谢您的回复!但我认为是其他原因导致了这个问题。

      据我了解,只有 cordova-plugin-battery-status 的 Web 集成使用您提到的过时 API。并且 iOS 和 Android 实现应该使用到 iOS 或 Android 的本机连接。

      关于过时的电池状态 API - Web API | MDN,实际上,至少现在,它正在开发 Chrome、Android Webview 和 Chrome for Android。

      如果我只想为 Android 实现电池状态,这对我有用:

          let windowNavigator: any;
          windowNavigator = window.navigator;
          windowNavigator.getBattery().then(battery => {
            console.log(battery.level);
            battery.addEventListener('levelchange', function() {
              console.log(this.level);
            });
          });
      

      但我想使用插件,而不是过时的电池状态 API。因此,如果有人知道错误是什么情况

      Invalid event target
          at setupSubscription (fromEvent.js:50)
          at Observable._subscribe (fromEvent.js:24)
      

      我很想听。 ?

      【讨论】:

        猜你喜欢
        • 2017-09-03
        • 1970-01-01
        • 2020-03-06
        • 1970-01-01
        • 1970-01-01
        • 2016-11-04
        • 2019-03-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多