0

上にあるとき、私は自分のアプリケーションでジオフェンスで動作するようにしようとしているトリガされません。 これまでのところ、私は成功しており、アプリケーションがフォアグラウンドで である場合は完全に機能します。 Google Playサービスを利用しているAndroidエミュレータで確認しています。 は、私は位置パラメータを設定していると私は を言ったように、アプリケーションがフォアグラウンドにある場合、それは正常に動作し、これを確認するには。ジオフェンス遷移は、アプリケーションがバックグラウンド

しかし、アプリケーションがバックグラウンドで実行されている場合は、アプリケーションを開くかGoogleマップアプリケーションを開くまで、 の遷移は発生していないようです。

だから私はBroadcastReceiverの代わりIntentService を使用することを試みたと私はこのようなマニフェストファイル にbroadcastreceiverを登録しました:

<receiver android:name  = ".GeofenceReceiver" 
      android:exported = "true" 
      android:enabled = "true" 
/> 

しかし、私はまだ

...同じ結果を抱えています

アプリケーションがバックグラウンドにあるときに、どのように私は、ジオフェンスの遷移をトリガすることができますか?

私は、サービス内のLocationServices.FusedLocationApi.requestLocationUpdatesを使用して考えました。したがって、このアプローチでは、私のアプリケーションは位置 の更新を要求し、これはおそらくジオフェンスの遷移を引き起こします。

しかし、おそらくそれは、バッテリーを消費しますし、これは悪い習慣です。 他のオプションはありますか?

答えて

1

OK。 これは、バッテリーの問題のため、新しいAndroid Oの背景の制限のようです。 Android 8では、バッテリ消費を減らすため、バックグラウンドプロセス(サービスなど)について「新しいルール」を持っています。 Android 8では、アプリケーションがフォアグラウンド(ホームボタンで押されている)にない場合、アプリに関連するコンポーネントがフォアグラウンドにない場合、サービスはバックグラウンドサービスであってもおそらく殺されます。

あなたのデバイスシステムがAndroid 7で、あなたのアプリをAndroid 7以降にターゲット設定している場合は、すべて正常に動作します。

ロケーションのアップデートに関しては、バッテリの消費を節約するため、アップデートは1時間に数回発生します。

フォアグラウンドサービスを使用することをお勧めします。アプリケーションは引き続きフォアグラウンドとみなされます。

see this link