Фоновая служба NativeScript перестает работать после закрытия приложения - PullRequest
0 голосов
/ 14 ноября 2018

У меня проблема с фоновым сервисом nativescript.Я хочу написать приложение с фоновым сервисом.Служба должна всегда запускаться в фоновом режиме, даже когда приложение будет остановлено и закрыто.

Я использовал nativescript-android-utils для служб намерений Android, но служба перестает работать послеПриложение закрывается.Я также попытался зарегистрировать широковещательный приемник в соответствии с this , но результат тот же: когда приложение закрыто, служба также перестает работать.

Я хочу написать фоновую службу gps tracker, и этопочему мне нужно, чтобы служба всегда работала в фоновом режиме.

Сервисный код:

declare var com: any;
@JavaProxy("org.nativescript.PresleyApp.Test")
export class Test extends com.pip3r4o.android.app.IntentService {
    protected onHandleIntent(intent: android.content.Intent): void {
        geolocation.enableLocationRequest().then(function() {
            this.watchId = geolocation.watchLocation(
                (loc) => {
                    if (loc) {
                        const toast = Toast.makeText("Background Location: " + loc.latitude + " " + loc.longitude);
                        toast.show();
                        console.log("Background Location: " + loc.latitude + " " + loc.longitude);
                    }
                },
                (e) => {
                    console.log("Background watchLocation error: " + (e.message || e));
                },
                {
                    desiredAccuracy: Accuracy.high,
                    updateDistance: 0.1,
                    updateTime: 3000,
                    minimumUpdateTime: 100
                });
        }, (e) => {
            console.log("Background enableLocationRequest error: " + (e.message || e));
        });
    }
}

Запуск службы с

const context = application.android.context;
const intent = new android.content.Intent();
intent.setClassName(context, "org.nativescript.PresleyApp.Test");
context.startService(intent);

1 Ответ

0 голосов
/ 15 ноября 2018

Итак, вот как я поступил,

    import * as timer from "timer";

    @JavaProxy("com.nativescript.DataSyncService")
    class DataSyncService extends android.app.Service {

        private timerId: number;

        onBind(): android.os.IBinder {
            return null;
        }

        onCreate(): void {
            super.onCreate();

            if (!this.timerId) {
                this.timerId = timer.setInterval(()=> {
                   // Run this every 4 hrs
                }, (1000 * 60 * 60 * 4));
            }
        }

        onStartCommand(intent: android.content.Intent, flags: number, startId: number): number {
            return android.app.Service.START_STICKY;
        }

        onDestroy(): void {
            super.onDestroy();
            timer.clearInterval(this.timerId);
        }
    }

Возвращая START_STICKY из onStartCommand, система перезапускает службу, когда процесс (приложение) завершается.

...