Looking for android Answers? Try Ask4KnowledgeBase
Looking for android Keywords? Try Ask4Keywords

Androidロケーション


前書き

AndroidのロケーションAPIは、ユーザーの場所を特定したり、ユーザーがいつ一般エリアを離れたかを通知したり(ジオフェンシング)、ユーザーの行動(歩行、走行、運転など)を解釈するなど、様々な目的でさまざまなアプリケーションで使用されます。

しかし、Android Location APIはユーザーの場所を取得する唯一の手段ではありません。以下は、AndroidのLocationManagerと他の一般的な位置情報ライブラリの使い方の例です。

備考

Androidでロケーション認識アプリを構築するには、次の2つの方法があります。

LocationManager

長所

  • より詳細な制御
  • すべてのデバイスで利用可能
  • Androidフレームワークの一部

短所

  • 適切に管理されないと、バッテリの放電が問題になります
  • デバイスが場所を見つけることができない場合(例えば、建物内の劣悪なGPS)には、ロケーションプロバイダを切り替えるロジックが必要です。

特徴

  • NMEAリスナー
  • GPSステータスリスナー
  • プロバイダのステータスの変更を聞く(例:GPSがユーザーによってオフになっている)
  • ロケーションソースを選択するプロバイダのリスト

プロバイダー

GPS

  • 必要な権限:
  • 精度:10m〜100m
  • 電源要件:HIGH
  • 在庫状況:全世界(空をはっきりと見える)
  • 注意
    • 位置更新は、通常、1秒に1回の頻度で行われますが、GPSを使用していない状態でA-GPSが利用できない場合は、場所を受信するまでに数分かかります。
    • 空がはっきりと見えなくなった場合、GPSポイントは非常によく集まらず(ロケーションポイントが「ジャンプ」)、「 アーバンキャニオン 」効果のために特定のエリアで誤解を招く可能性があります。

ネットワーク

  • 必要な権限:
  • 精度:100m〜1000m +
  • 電源要件:LOW - MEDIUM
  • 可用性:セルタワーまたは無線LAN信号の範囲内
  • ノート:
    • 場所の更新はGPSよりも頻繁に発生します
    • 位置情報の更新は、一般的にうまくいっていません(ロケーションポイントは「ジャンプ」します)。精度はさまざまな要因(Wi-Fi信号数、信号強度、セルタワーのタイプなど)

受動的

  • 必要な権限:
  • 精度:10m〜1000m +
  • 電源要件:なし
  • 利用可能:他のアプリがGPSまたはネットワークのいずれかから位置情報を受信した場合のみ
  • ノート:
    • あなたに継続的な更新を与えるためにこれに頼らないでください。これは、ロケーション要求を行う他のアプリに受動的に耳を傾け、それらのロケーションを戻します。
    • FusedLocationProviderApiで生成されたポイントを返しません。生成されたポイントを生成するために使用された基礎的なポイントのみを返します。

FusedLocationProviderApi

長所

  • バッテリーの消耗を「すぐに」提供
  • 悪いGPSをうまく扱う
  • より定期的に更新を取得する

短所

  • GPSによるより細かい制御
  • すべての端末または一部の国で利用できない可能性があります
  • サードパーティのライブラリ依存関係が必要

特徴

  • 最適なバッター・セービングのためのロケーション・プロバイダの適切な管理
  • 典型的には、ネットワークロケーションプロバイダ
  • より頻繁なライブラリの更新により、より多くの改善が可能
  • 使用するプロバイダのタイプを指定する必要はありません

LocationRequestの優先レベル

PRIORITY_HIGH_ACCURACY

  • 必要な権限:
  • 精度:10m〜100m
  • 電源要件:HIGH
  • 可用性:Google Playサービスが利用できるところはどこにでもあります。
  • ノート:
    • ACCESS_FINE_LOCATIONが使用されていない場合は、ロケーション更新を生成するためにGPSは使用されませんが、正しい条件ではかなり正確なポイントが見つかるでしょう。
    • ACCESS_FINE_LOCATIONが使用されている場合、環境条件が与えられたときにデバイスを現在どのように正確に追跡できるかに応じて、GPSを使用して位置点を生成することができます。
    • これは、他の設定よりも正確な位置更新を報告するかもしれませんが、それはまだ " アーバンキャニオン "効果になりがちです。

PRIORITY_BALANCED_POWER_ACCURACY

  • 必要な権限:
  • 精度:100m〜1000m +
  • 電源要件:MEDIUM
  • 可用性:Google Playサービスが利用できるところはどこにでもあります。
  • ノート:
    • PRIORITY_HIGH_ACCURACY同じノート
    • 可能性は低いですが、この設定ではGPSを使用して場所を生成することがあります。

PRIORITY_LOW_POWER

  • 必要な権限:
  • 精度:100m〜1000m +
  • 電源要件:低
  • 可用性:Google Playサービスが利用できるところはどこにでもあります。
  • ノート:
    • おそらく、GPSは使用していませんが、これまでのところテストされていません。
    • アップデートは一般的にあまり正確ではありません
    • 一般的に場所の大幅な変化を検出するために使用されます

PRIORITY_NO_POWER

  • 必要な権限:
  • 精度:10m〜1000m +
  • 電源要件:なし
  • 可用性:Google Playサービスが利用できるところはどこにでもあります。
  • ノート:
    • LocationManager PASSIVE_PROVIDERとほぼ同じ機能
    • 受信時にGoogle Playサービスの更新を報告しますPASSIVE_PROVIDERは、使用された基本的な位置の更新を報告します

トラブルシューティング

OnLocationChanged()は呼び出されません

これはAndroidの場所を取得する際の一般的な問題であると思われるため、よくある修正の簡単なチェックリストを掲載します。


  1. マニフェストを確認してください!

    最も一般的な問題の1つは、適切な権限が与えられていないことです。 GPSを使用している場合は、 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>を使用し、そうでない場合は<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 。 GoogleのFusedLocationApiにはACCESS_FINE_LOCATIONが必要ACCESS_FINE_LOCATION


  1. (Android 6+用) ランタイムのアクセス許可を確認してください

    確認し、許可をリクエストしてください!権限が与えられていない場合は、クラッシュするか、すべての例外をキャッチしている場合は悪化します。何も表示されません。ユーザーがアプリの開始時にあなたに許可を与えても問題はありません。常にすべての通話にアクセス権があるかどうかを確認してください。ユーザーは簡単に設定に行き、取り消すことができます。


  1. コードを再確認してください!

    あなたは正しいリスナーを通過していると確信していますか? BroadcastReceiverまたはIntentServiceをマニフェストに追加しましたか?あなたは使用しているPendingIntent.getService()BroadcastReceiverクラス、またはgetBroadcast()IntentServiceクラス?あなたはリクエストした直後にあなたのリスナーをあなたのコードのどこかに登録解除していないと確信していますか?


  1. デバイスの設定を確認してください!

    明らかに、位置情報サービスがオンになっていることを確認してください。

    ここに画像の説明を入力

    ネットワークサービスを使用している場合は、「常にスキャン可能」を有効にしましたか?あなたの位置モードを「最高」(「高精度」)または「バッテリー節約」(「ネットワークのみ」)に設定していますか?

    ここに画像の説明を入力

    GPSを使用している場合、ロケーションモードで「ベスト」(「高精度」)または「デバイスのみ」をオンにしましたか?

    ここに画像の説明を入力


  1. コードを再確認してください!

    はい、これはここに2回あります。あなたが使用してみましたLocationListenerの代わりに、 PendingIntent 、またはその逆に、あなたが実際に実装確保するためLocationManager正しく?アクティビティまたはサービスのライフサイクルの一部で、場所のリクエストが削除されていないことを確認していますか?


  1. あなたの周辺をチェックしてください!

    サンフランシスコの真ん中の建物の1階にあるGPSをテストしていますか?どこにいてもネットワークの場所をテストしていますか?あなたは、あなたのデバイスがなぜ場所を取得していないのだろうかと疑問に思う、すべての無線信号の秘密の地下バンカーで働いていますか?場所の問題のトラブルシューティングを行うときには、常に周囲を再確認してください。


場所がうまくいかない理由はそれほど明白ではないかもしれませんが、これらの難解な修正を検索する前に、この簡単なチェックリストを実行してください。

ロケーション 関連する例