場所の有無にかかわらず動作できる Android アプリケーションがあります。アクティビティでこのケースを処理するのは簡単です: ロケーション リスナーを設定し、進行状況ダイアログで待機しますが、ユーザーが待機を中止できるようにします (ロケーション プロバイダーが無効になっている場合、特別なエラーは発生しません。場所を返します...いいです)。
ただし、場所を必要とするサービスもあります。サービスはアクティビティの前に実行される可能性があるため、アクティビティに依存して場所を取得することはできません (または取得しない)。
問題は、このケースをサービスでどのように処理するかです。場所を待つことはできますが、ユーザーの中止に頼ることはできないため、待機を停止するタイミングをどのように知ることができ、場所が利用できないと想定できますか? 私は次のようなことができるようです、
- ロケーションリスナーを設定し、更新を待ち、アクション「更新」で3分後に同じサービスをスケジュールするアクション「ロケーションの取得」でサービスをスケジュールします
- サービス アクション「更新」で、最後に確認された場所を取得し、それで満足します。それは得られたか、得られなかったかのどちらかです。null の場合は、場所がなく、できる限りのことをしたことを示しています。
これは機能するようですが、onHandleIntent() の後にインテント サービスが停止すると、on location changed イベントが受信されないため、単純なインテント サービスを使用できなくなったため、複雑になっています (私は推測します)。
とにかく複雑なので、もっと簡単な方法はないかと考えています。