web-dev-qa-db-ja.com

バックグラウンドでIonic / Cordovaアプリで位置情報を取得する

Ionic/Cordovaアプリ(iOSとAndroidの両方)を閉じると、バックグラウンドサービスを実行できますか?

その目的のために、プラグインを選択しました https://github.com/katzer/cordova-plugin-background-mode

これまでのところ、私はそのコードを持っています:

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

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

アプリがフォアグラウンドに移動しても正常に機能しますが、アプリケーションを閉じると、実行中のタスクも停止します。アプリを閉じてもタスクを実行するための回避策や方法はありますか?

編集:

また、iOSとAndoridの両方に権限を追加しましたが、同じ結果が得られます。

編集2:

IOSとAndroidの両方で動作するCordovaまたはPhoneGap用の無料のプラグインがないため、バックグラウンドでしようとしているのは、重要な位置変更サービスの独自の実装を記述することです。

33
radioaktiv

Ionic Framework

最近、私のプロジェクトにこのような機能を実装しました。 Ionicを使用し、KatzerのCordovaプラグインバックグラウンドモードを使用しました。現在、iOS 9.2シミュレーターを介してバックグラウンドプロセスを実行しています)。

動作させるためのコードスニペットを次に示します。

// 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

Ionic 2 ES6準備完了の例:

// 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);
13
0x1ad2

あなたが実装しようとしているバックグラウンドの位置情報追跡は、すでに cordova-plugin-mauron85-background-geolocation と呼ばれるcordovaプラグインとして存在していると思います。

このプラグインは、フォアグラウンドとバックグラウンドの両方の位置情報サービスです。 html5ジオロケーションまたはcordova-geolocationプラグインよりもはるかにバッテリーとデータ効率が高いです。

多くの設定オプションがあります。上記リンクのgithubページをご覧ください。

2
theDmi

IONIC-3の回避策

プラグインをインポートする

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

コンストラクターに追加する

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
            });
        }
    })
}
0
Jose G Varanam