我想在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)
答案 0 :(得分:0)
代码看起来正确。
您可能遇到的问题是Battery Status API已过时。
我认为,基本上它被跟踪工具所滥用,因为它可以很容易地与其他技术结合以对用户进行数字指纹识别:
已过时
该功能已过时。尽管它可能在某些浏览器中仍然可以使用,但不建议使用它,因为可以随时将其删除。尝试避免使用它。
答案 1 :(得分:0)
@rtpHarry
感谢您的回复!但是我认为是其他原因导致了这个问题。
据我了解,只有cordova-plugin-battery-status的Web集成使用的是您提到的过时的API。并且iOS和Android实施应使用与iOS或Android的本地连接。
关于过时的电池状态API-Web API | MDN,实际上至少在目前,它可以在Chrome,Android Webview和Android版Chrome上运行。
如果我只是想实现Android的电池状态,这对我来说是有效的:
let windowNavigator: any;
windowNavigator = window.navigator;
windowNavigator.getBattery().then(battery => {
console.log(battery.level);
battery.addEventListener('levelchange', function() {
console.log(this.level);
});
});
但是我想使用插件,而不是过时的Battery Status API。因此,如果有人知道发生错误的情况
Invalid event target
at setupSubscription (fromEvent.js:50)
at Observable._subscribe (fromEvent.js:24)
我很想听听。 ?