出于背景目的,我在离子文档(本机且无本机)和其他页面中进行了深入搜索,发现可能有实现此目的的可能性(即使关闭了应用程序,也要继续运行订阅),但是我根本不明白应该在哪里放置一件事或其他东西来使BakckgroundMode插件正常工作...(我认为此插件无法在我的设备中运行),但是很难检查该事物,因为您无法使用chrome:// inspect ...检查设备是否处于后台模式...
这是BackgroundMode插件:
https://github.com/katzer/cordova-plugin-background-mode
我已经安装了backgroundMode 0.7.2,它不是最实用的插件,但是尝试安装最新的插件会在构建时出现错误,因此我尝试了此版本并可以使用。
在文档中,我看到以下内容:
该插件创建对象cordova.plugins.backgroundMode,并且 在设备就绪事件触发后可以访问。
因此,为了运行后台模式,请在我的page.ts构造函数中(稍后我将讨论为什么在构造函数中)中放置:
document.addEventListener('deviceready', ()=> {
this.backgroundMode.enable();
this.backgroundMode.setDefaults(
{
title: 'executing in bg mode...',
text: 'background mode was activated successfully!',
color: '#fff',
resume: true,
silent: false
}
);
this.backgroundMode.disableWebViewOptimizations();
this.backgroundMode.on('activate').subscribe(()=>{
this.isAcceptedObservable = this.localNotifications.on('yes').subscribe(res =>{
console.log('confirmed!');
this.backgroundMode.unlock();
});
//And more observables...
});
});
backgroundMode.on('activate')订阅中的订阅是我需要保持运行的东西,即使应用已关闭。
之所以将代码放入构造函数,是因为我还使用ngx-socket-io来侦听我创建的节点中套接字服务器的发射和广播功能,因此订阅之一是链接到套接字事件的是:
this.getInvitationSubscriber = this.getInvitation().subscribe(data =>{
this.invitations.push(data);
this.showNotification({
title: 'Invitation received!',
text: 'Someone invited you!',
icon: data['from']['avatar_src'],
attachments: [data['from']['invitation_src']]
});
console.log(this.invitations);
});
在ionViewWillEnter我打电话:
ionViewWillEnter{
this.socket.connect();
}
并且此函数在构造函数之外:
getInvitation(){
let observable = new Observable(observer =>{
this.socket.on('subject', data =>{
observer.next(data);
});
});
return observable;
}
我希望继续运行在backgroundMode.on('activate')函数内部的构造函数中的“通知侦听器”,以便即使应用程序关闭也能接收通知,但是我不知道ngx-socket是否可行-io和我的结构。
我也已经在app.module提供程序和otherpage.module.ts提供程序中注入了后台模式并正确导入,因此不是错误,但是我没有收到通知...
我知道通知调度是正确的,因为如果我简单地尝试不使用backgroundMode并将该订阅置于backgroundMode.on('activate')订阅之外,我会再次收到通知,但仅在应用程序位于前台或处于暂停状态...