我需要在NativeScript中实现一个后台服务,该服务每隔x分钟获取一次用户位置,向我的API发出请求,并根据响应发出本地通知。
因此,我开始寻找实现此方法的方法,这使我进入了NativeScript repository。如自述文件所述:
当前实现使用API级别26中添加的NotificationChannel。如果要定位较低的API级别,请查看较旧的实现Alarm Manager Implementation。请记住,由于操作系统的限制,API Level 26或更高版本不支持此方法。
我需要支持Android 5.1+(API级别22+),因此新的实现对我不起作用,相反,我应该使用提到的较旧的Alarm Manager实现。问题是,正如您在引文中所看到的,API Level 26+不支持此方法。
众所周知,Google强制新应用程序至少针对API级别28。那么,我如何实现可在API级别22到28之间运行的后台服务?
答案 0 :(得分:2)
您可以参考nativescript-geolocation插件存储库中的示例,该示例适用于所有受支持的Android版本。
if (device.sdkVersion < "26") {
@JavaProxy("com.nativescript.location.BackgroundService")
class BackgroundService extends (<any>android).app.Service {
constructor() {
super();
return global.__native(this);
}
onStartCommand(intent, flags, startId) {
console.log('service onStartCommand');
this.super.onStartCommand(intent, flags, startId);
return android.app.Service.START_STICKY;
}
onCreate() {
console.log('service onCreate');
_startWatch();
}
onBind(intent) {
console.log('service onBind');
}
onUnbind(intent) {
console.log('service onUnbind');
}
onDestroy() {
console.log('service onDestroy');
_clearWatch();
}
}
return BackgroundService;
} else {
@JavaProxy("com.nativescript.location.BackgroundService26")
class BackgroundService26 extends (<any>android.app).job.JobService {
constructor() {
super();
return global.__native(this);
}
onStartJob(): boolean {
console.log('service onStartJob');
_startWatch();
return true;
}
onStopJob(jobParameters: any): boolean {
console.log('service onStopJob');
this.jobFinished(jobParameters, false);
_clearWatch();
return false;
}
}
return BackgroundService26;
}