首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在NativeScript中实现针对API级别26+及以下的Android后台服务?

如何在NativeScript中实现针对API级别26+及以下的Android后台服务?
EN

Stack Overflow用户
提问于 2019-10-17 01:09:46
回答 1查看 568关注 0票数 1

我需要在NativeScript中实现一个后台服务,它将每隔x分钟获取用户位置,向我的API发出请求,并根据响应发出本地通知。

因此,我开始寻找实现该功能的方法,这使我找到了这个NativeScript 存储库。如自述所述:

当前的实现使用了NotificationChannel,它是在utilizes 26中添加的。如果您希望针对较低的API级别,请查看较早的实现警报管理器实现。请记住,由于操作系统中的限制,API级别26或更高版本不支持这种方法。

我需要支持Android 5.1+ (API级22+),所以新的实现不会对我起作用,相反,我应该使用前面提到的旧的告警管理器实现。问题是,正如您在引号中所看到的,API级别的26+不支持这种方法。

众所周知,谷歌正在迫使新的应用程序至少针对API级别28。那么,如何实现从API 22级到28级的后台服务呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-17 08:12:54

您可以参考本地文字-地理定位插件回购中的示例,它适用于所有受支持的安卓版本。

代码语言:javascript
复制
     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;
    }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58423548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档