2017-11-20 24 views
6

Tôi đã phát triển một ứng dụng trong PhoneGap đang theo dõi tuyến đường đi của bạn thông qua API vị trí địa lý, tôi nhận được vị trí hiện tại của thiết bị qua navigator.geolocation.getCurrentPosition(onSuccess, onError); và Nhưng bây giờ vấn đề là nó không hoạt động trong nền tức là (khi tôi mở một ứng dụng khác và nó bắt đầu chạy ở chế độ nền), nó không cập nhật ý nghĩa của polyline mà không kích hoạt chức năng navigator.geolocation.watchPosition(function(position) này vì vậy tôi đã cố gắng chạy ứng dụng thông qua Cordova-plugin-background-mode plugin này bắt đầu chạy ứng dụng của nó ở chế độ nền và một lần nữa không kích hoạt chức năng navigator.geolocation.watchPosition(function(position) có nghĩa là điều này không bắt buộc tôi .e (không cần cài đặt plugin để chạy ứng dụng ở chế độ nền). Vì vậy, hãy giúp tôi giải quyết vấn đề này khi nhận được vị trí ở chế độ nền. Và nếu tôi sử dụng plugin Cordova-plugin-mauron85-background-geolocation này làm cách nào để có được vị trí khi tôi đang đi qua vị trí xem? và phải làm gì nếu ứng dụng đang chạy ở nền trước? sao tôi phải sử dụng chức năng watchPosition hoặc cái gì khác?Để nhận vị trí thiết bị sau khoảng thời gian cụ thể khi ứng dụng Phonegap đang chạy ở chế độ nền thông qua API vị trí địa lý

Trả lời

1

Bạn có thể muốn tìm hiểu điều này location plugin. Họ dường như nghĩ rằng họ đã giải quyết được vấn đề.

Nhanh chóng fiddle và thử nghiệm trên điện thoại tôi có quyền truy cập để hiển thị đây không phải là vấn đề về điện thoại. Đây là một vấn đề hệ điều hành. Hầu hết các điện thoại đã được tối ưu hóa để tạm ngưng hoạt động nền, đặc biệt là hoạt động của trình duyệt web. Nó có lẽ là tốt nhất để buộc vào các sự kiện bản địa để có được hành vi mà bạn muốn.

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

Tôi đã nhận thấy rằng điện thoại giữ tất cả các kết nối mở ngay cả đối với các tác vụ nền. Bạn có thể chơi game bằng cách thực hiện cuộc gọi ajax đến máy chủ không từ chối nhưng không trả lời, thêm bộ xử lý hết giờ và thiết lập khoảng thời gian bạn muốn, trong trình xử lý thời gian chờ ajax kiểm tra vị trí và sau đó thiết lập một cuộc gọi mới.

Chúc may mắn!

+0

@everyone cho chúng tôi biết nếu bạn cố gắng hack ajax để thực hiện trong khoảng thời gian khi ở chế độ nền. –

0

Có một mẫu với 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(); 

} 
Các vấn đề liên quan