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用の無料のプラグインがないため、バックグラウンドでしようとしているのは、重要な位置変更サービスの独自の実装を記述することです。
最近、私のプロジェクトにこのような機能を実装しました。 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 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);
あなたが実装しようとしているバックグラウンドの位置情報追跡は、すでに cordova-plugin-mauron85-background-geolocation と呼ばれるcordovaプラグインとして存在していると思います。
このプラグインは、フォアグラウンドとバックグラウンドの両方の位置情報サービスです。 html5ジオロケーションまたはcordova-geolocationプラグインよりもはるかにバッテリーとデータ効率が高いです。
多くの設定オプションがあります。上記リンクのgithubページをご覧ください。
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
});
}
})
}