2017-11-20 27 views
6

के माध्यम से पृष्ठभूमि में फोनगैप एप्लिकेशन चल रहा है, मैंने फोनगैप में एक एप्लिकेशन विकसित किया है जो भौगोलिक स्थान एपीआई के माध्यम से आपके यात्रा मार्ग को ट्रैक कर रहा है, मुझे navigator.geolocation.getCurrentPosition(onSuccess, onError); के माध्यम से डिवाइस की वर्तमान स्थिति मिल रही है और navigator.geolocation.watchPosition(function(position) के माध्यम से नियमित अंतराल के बाद स्थिति प्राप्त करके पॉलीलाइन अपडेट करना, लेकिन अब समस्या यह पृष्ठभूमि में काम नहीं कर रही है यानी (जब मैं एक और एप्लिकेशन खोलता हूं और यह पृष्ठभूमि में चलना शुरू करता है) यह पॉलीलाइन का अद्यतन नहीं करता है, यह navigator.geolocation.watchPosition(function(position) फ़ंक्शन ट्रिगर नहीं करता है तो मैंने Cordova-plugin-background-mode के माध्यम से ऐप चलाने की कोशिश की, इस प्लगइन ने पृष्ठभूमि में ऐप चलाने शुरू कर दिया और फिर navigator.geolocation.watchPosition(function(position) फ़ंक्शन को ट्रिगर नहीं कर रहा था इसका मतलब है कि यह आवश्यक नहीं था I .e (पृष्ठभूमि मोड में ऐप चलाने के लिए प्लगइन स्थापित करने की कोई आवश्यकता नहीं थी)। इसलिए कृपया पृष्ठभूमि मोड में स्थिति प्राप्त करने की इस समस्या को हल करने में मेरी सहायता करें। और यदि मैं इस Cordova-plugin-mauron85-background-geolocation प्लगइन का उपयोग करता हूं तो मैं स्थिति कैसे प्राप्त कर सकता हूं क्योंकि मैं घड़ी की स्थिति के माध्यम से हो रहा था? और यदि एप अग्रभूमि में चल रहा है तो क्या करें? क्या मुझे watchPosition फ़ंक्शन या कुछ और उपयोग करना है?विशिष्ट अंतराल के बाद डिवाइस का स्थान प्राप्त करने के लिए जब जिओलोकेशन एपीआई

उत्तर

1

आप इस location plugin में खोदना चाहते हैं। उन्हें लगता है कि उन्होंने समस्या हल कर ली है।

एक त्वरित fiddle और फ़ोन पर एक परीक्षण के लिए मुझे यह दिखाने के लिए उपयोग है कि यह एक फोनगैप मुद्दा नहीं है। यह एक ओएस मुद्दा है। ज्यादातर फोन पृष्ठभूमि गतिविधि को निलंबित करने के लिए अनुकूलित किए गए हैं, खासकर वेब ब्राउजर गतिविधि। अपने इच्छित व्यवहार को प्राप्त करने के लिए मूल घटनाओं में बांधना शायद सबसे अच्छा है।

navigator.geolocation.watchPosition(positionChanged, err, options); 

कि फोन के सभी कनेक्शन भी पृष्ठभूमि कार्य के लिए खुला रखने मैं नोटिस किया था। आप किसी ऐसे सर्वर पर AJAX कॉल करके स्थिति को गेम करने में सक्षम हो सकते हैं जो अस्वीकार नहीं करता है, लेकिन जवाब देने में विफल रहता है, एक टाइमआउट हैंडलर जोड़ता है, और अंतराल को सेट करता है, AJAX टाइमआउट हैंडलर में स्थान की जांच करें और फिर सेटअप करें एक नया कॉल

गुड लक!

+0

@everyone हमें बताएं कि आप पृष्ठभूमि में होने के अंतराल में निष्पादित करने के लिए ajax हैक कोशिश करते हैं। –

0

cordova-plugin-background-mode के साथ एक नमूना है:

var backgroundGeoLocation = window.plugins.backgroundGeoLocation; 

function startGetLocation() { 

var callbackFn = function(location) { 
    console.log('[js] BackgroundGeoLocation callback: ' + location.latitude + ',' + location.longitude); 
    var latitude = location.latitude; 
    var longitude = location.longitude; 
    var pontos = []; 
    if($localStorage.getPontosGps() && $localStorage.getPontosGps().pontos){ 
     pontos = $localStorage.getPontosGps().pontos; 
    } 


    $log.log('lat: ' + latitude); 
    $log.log('long: ' + longitude); 

    if (!_.find(pontos, { 
     latitude: latitude, 
     longitude: longitude 
     })) { 

     pontos.push({ 
     latitude: latitude, 
     longitude: longitude, 
     velocidade: null 
     }); 

     $localStorage.setPontosGps({ 
     isRunning: true, 
     pontos: pontos 
     }); 
    } 
    backgroundGeoLocation.finish(); 
    }; 

    var failureFn = function(error) { 
    console.log('BackgroundGeoLocation error: ' + error); 
    }; 

    backgroundGeoLocation.configure(callbackFn, failureFn, { 
    desiredAccuracy: 10, 
    stationaryRadius: 20, 
    distanceFilter: 30, 
    debug: false, 
    stopOnTerminate: false, 
    locationTimeout: 10, 
    notificationTitle: 'Title', // <-- android only, customize the title of the notification 
    notificationText: 'Collecting geolocation' 
    }); 

    backgroundGeoLocation.start(); 

} 
संबंधित मुद्दे