Фоновый сервис в плагине ios Cordova - PullRequest
0 голосов
/ 12 января 2019

Я разрабатываю фоновый сервис приложения для непрерывного получения широты местоположения в фоновом режиме. Используется плагин Cordova, т. Е. Добавлен плагин Cordova плагин добавить https://github.com/pmwisdom/cordova-background-geolocation-services.git.

Я хочу, чтобы служба работала в фоновом режиме даже после закрытия приложения. Под словом «убитый» я имею в виду длительное время нажатие кнопки «домой» -> просмотр всех запущенных приложений -> проведите мое приложение в сторону -> приложение убито ИЛИ нажмите кнопку «Назад» в течение длительного времени -> приложение убито

Мой код выглядит следующим образом.

CDVBackgroundLocationServices.swift ()

var msg = "Got Location Update: { \(latitude) - \(longitude) }  Accuracy: \(accuracy)  speed: \(speed)";

        if(useActivityDetection) {
            msg += " Stationary : \(activityManager.isStationary)";
        }

        log(message: msg);

        locationCommandDelegate?.run(inBackground: {

            var result:CDVPluginResult?;
            let loc = self.locationToDict(loc: bestLocation!) as [NSObject: AnyObject];

            result = CDVPluginResult(status: CDVCommandStatus_OK, messageAs:loc);
            result!.setKeepCallbackAs(true);
            locationCommandDelegate?.send(result, callbackId:locationUpdateCallback);
        });
        let urlToRequest = "c=mt90&a=tracker";
        let url4 = URL(string: urlToRequest)!
        let session4 = URLSession.shared
        let request = NSMutableURLRequest(url: url4)
        request.httpMethod = "POST"
        request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData
        let speedOptionalString:String?
        speedOptionalString = "\(speed)"
        let respSpeed = "-1"
        var makeSpeed="0";
        if var respSpeed = speedOptionalString {
            makeSpeed = "0"
        }else{
            makeSpeed = "\(speed)"
        }

        let requestData = [
             "UUID":"\(deviceImei)",
            "Latitude": "\(latitude)" ,
            "Longitude": "\(longitude)" ,
            "speed": "\(makeSpeed)",
            ] as [String : String]

        request.httpBody = try! JSONEncoder().encode(requestData)

        let task = session4.dataTask(with: request as URLRequest) { (data, response, error) in
            guard let _: Data = data, let _: URLResponse = response, error == nil else {
                return
            }
            let dataString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
            print("*****This is the data 4: \(dataString)") //JSONSerialization
        }
        task.resume()
    }

DeviceReady ()

Msgs.Config.timeInterval=localStorage.getItem('timeInterval');

Msgs.Config.deviceId = device.uuid;

//Get plugin
bgLocationServices =  window.plugins.backgroundLocationServices;
var timeInterval=Msgs.Config.timeInterval*1000;
bgLocationServices.configure({
                             //Both
                             desiredAccuracy: 20, 
                             distanceFilter: 5, 
                             debug: true, 
                             interval: timeInterval, 
                             useActivityDetection: true
                             Msgs.Config.deviceId,   
                             });
bgLocationServices.start();

Я вижу, что служба работает, когда приложение открыто. Он все еще работает, когда я сворачиваю приложение с помощью кнопки home. Он все еще работает, когда я закрываю приложение с помощью кнопки назад. Но это прекратится, если я убью его, как упоминалось выше. Как мне это решить?

...