2015-10-13 26 views
31

Có thể chạy dịch vụ nền nếu tôi đóng ứng dụng Ionic/Cordova (cả iOS và Android) không?Tìm vị trí trong ứng dụng Ionic/Cordova khi ở chế độ nền

Đối với mục đích này tôi nhặt mà pluging https://github.com/katzer/cordova-plugin-background-mode

Cho đến nay tôi có mã:

$ionicPlatform.ready(function() { 
      cordova.plugins.backgroundMode.isEnabled(); 

      cordova.plugins.backgroundMode.configure({ 
       silent: true 
      }) 
       ............ 
      ///do some task 
)} 

Nó hoạt động tốt nếu ứng dụng đi vào foreground nhưng ngay sau khi tôi đóng ứng dụng nhiệm vụ Tôi cũng đang chạy. Vì vậy, có cách giải quyết nào khác để thực hiện nhiệm vụ của tôi ngay cả khi ứng dụng bị đóng?

EDIT:

Tôi cũng đã bổ sung thêm điều khoản cho cả iOS và Andorid nhưng tôi nhận được kết quả tương tự.

EDIT 2:

tôi đang cố gắng làm gì trong nền để viết thực hiện riêng của tôi về dịch vụ vị trí thay đổi đáng kể vì không có plugin miễn phí cho Cordova hoặc PhoneGap có thể làm việc với cả iOS và Android.

+1

Bạn đã nhận được bất kỳ giải pháp? – Muhsin

+0

Bạn có nhận được bất kỳ giải pháp nào không ?, giống như ở đây đang tìm kiếm thứ gì đó – Nico

Trả lời

13

Ionic Framework

Tôi vừa mới triển khai tính năng như thế này trong dự án của mình. Tôi đã sử dụng Ionic và tôi đã sử dụng chế độ nền plugin Cordova từ Katzer. (ngay bây giờ tôi đang chạy quá trình nền thông qua trình mô phỏng iOS 9.2).

Dưới đây là một đoạn mã để làm cho nó làm việc:

// Run when the device is ready 
document.addEventListener('deviceready', function() { 

    // Android customization 
    // To indicate that the app is executing tasks in background and being paused would disrupt the user. 
    // The plug-in has to create a notification while in background - like a download progress bar. 
    cordova.plugins.backgroundMode.setDefaults({ 
     title: 'TheTitleOfYourProcess', 
     text: 'Executing background tasks.' 
    }); 

    // Enable background mode 
    cordova.plugins.backgroundMode.enable(); 

    // Called when background mode has been activated 
    cordova.plugins.backgroundMode.onactivate = function() { 

     // Set an interval of 3 seconds (3000 milliseconds) 
     setInterval(function() { 

      // The code that you want to run repeatedly 

     }, 3000); 
    } 
}, false); 

Ionic Framework 2

Dưới đây là một ví dụ Ionic 2 ES6 đã sẵn sàng:

// Import the Ionic Native plugin 
import { BackgroundMode } from 'ionic-native'; 

// Run when the device is ready 
document.addEventListener('deviceready',() => { 

    // Android customization 
    // To indicate that the app is executing tasks in background and being paused would disrupt the user. 
    // The plug-in has to create a notification while in background - like a download progress bar. 
    BackgroundMode.setDefaults({ 
     title: 'TheTitleOfYourProcess', 
     text: 'Executing background tasks.' 
    }); 

    // Enable background mode 
    BackgroundMode.enable(); 

    // Called when background mode has been activated 
    // note: onactive now returns an returns an observable that emits when background mode is activated 
    BackgroundMode.onactivate.subscribe(() => { 
      // The code that you want to run repeatedly 
    }); 
}, false); 
+0

Và nó hoạt động ngay cả khi bạn đóng hoàn toàn ứng dụng? – radioaktiv

+0

Nếu bạn đóng ứng dụng như trong "di chuyển nó sang nền" thì nó sẽ hoạt động. – 0x1ad2

+0

Điều gì xảy ra nếu người đó tắt điện thoại (tôi muốn tắt máy hoàn toàn và khởi động lại), sau đó nó sẽ làm gì để đưa mã của bạn trở lại trò chơi? Tôi biết rằng tất cả các ứng dụng Báo thức đều đạt được điều đó. –

2

Tôi nghĩ rằng việc theo dõi nền geolocation rằng bạn cố gắng triển khai đã tồn tại như một plugin cordova, nó được gọi là cordova-plugin-mauron85-background-geolocation.

Plugin này vừa là dịch vụ vị trí địa lý nền trước và nền trước. Nó là pin nhiều hơn và dữ liệu hiệu quả sau đó định vị html5 hoặc cordova-geolocation plugin.

Có rất nhiều tùy chọn cấu hình, xem trang github được liên kết ở trên.

0

Cách giải quyết trên IONIC-3

nhập khẩu các plugin

import { Platform } from 'ionic-angular'; 
import { BackgroundMode } from '@ionic-native/background-mode'; 

thêm trong constructor

constructor(private backgroundMode: BackgroundMode, private plt: Platform) { 
    this.initBackgroundMode(); 
} 

private initBackgroundMode() { 
    this.plt.ready().then(() => { 
     this.backgroundMode.setDefaults({ silent: true }); 
     this.backgroundMode.enable(); 
     if (this.plt.is("android")) { 
      this.backgroundMode.on('activate').subscribe(() => { 
       this.backgroundMode.disableWebViewOptimizations(); 
       // Custom code for updating the location 
       // or do similar functionality 
       // use timeout or interval accordingly to execute the functionality in loop 
      }); 
     } 
    }) 
} 
Các vấn đề liên quan