[Android] GPS パーミッションを考慮して実装する

アンドロイドでの位置情報は端末のGPSとWifiや基地局GPSを組み合わせた、FusedLocationProvideAPI が推奨されています。ただ精度が高い位置情報のみを得たい場合は明示的にGPSを使うことになります。

簡単な実装を GPSで位置情報を取得するアプリを作る で試しましたがその続きです。
 
gps a01 - [Android] GPS パーミッションを考慮して実装する

Android Studio 3.1
Android 8.1.0

 



GPS

 
繰り返しになりますが、GPSに必要なpermissionは、Android 6.0 Runtime Permissiondangerous permission に該当するため、ユーザーの許可を得るための実装が必要になります。

 

Runtime Permission

 
Android 6.0 Runtime Permission に該当するPermissionため、アプリ起動中に許可を得るように設定します。許可しない場合でも例外で落ちないように実装しないといけません。下のようなフロー処理となります。
 
permission 1 - [Android] GPS パーミッションを考慮して実装する

  • APIが23以上か否か
    • False: そのまま処理実行
  • 許可しているか否か、checkSelfPermission(…)
    • 許可していない場合や、初回起動のケースは次に行く
      • 初めは許可していたが、途中で拒否をユーザーが選択するケースもあり得ることに注意
    • 許可しているケースは処理に移る
  • Permissionが何に使われるか説明して許可してもらうように依頼する
    • 拒否された場合はこの機能については動作しないが他の処理をする
      • 例えばゲームアプリで得点をネットにアップするとき、ユーザーの位置情報もアップしたいという要請に対して拒否しても、ゲームは継続されるということです。
    • 許可されて処理の実行


GPSの基本的な設定は こちら を参照してください。

 

サンプルコード: Runtime Permission

 
以下はMainActivityでPermissionの確認をして、許可されていたら別Activity(LocationActivity.java)に遷移してGPS測位を開始するようにしました。
 
MainActivity.java

 

サンプルコード: GPS測位

 
ここからGPSの測位
LocationActivity.java

 
一応レイアウト
activity_main.xml

 
strings.xml

AndroidManifest.xml

 
これで実機でテストしてみましょう。屋外でテストするためにログをTextViewで出せるようにしました。屋外でも、ビルの谷間はほぼあきらめた方がいいです。衛星が見えても1個2個ですから最低3個、通常は4個捕捉する必要があります。
 
gps a01 - [Android] GPS パーミッションを考慮して実装する
 
GPSの位置を取得するまで、数分かかる場合があります。GPS衛星のカレンダーを持っていれば、最初の補足時間が短くなりますが、無い場合は、衛星からその情報を取得するのです。

また一度測位した後のアップデートはこの設定の場合、1秒後で距離50mの変化があるケースです。
 
測位によって得られる主な情報は:

  • getLatitude():緯度[°]
    • 南緯がマイナス、北緯がプラスで、WGS84座標系
  • getLongitude():経度[°]
    • 西経がマイナス、東経がプラスで、WGS84座標系
  • getAccuracy():精度[m]
    • この緯度経度を中心としてこの半径の円内にある確率が68%ということです。正規分布の標準偏差+/-2σということですね。
  • getAltitude():高度
    • 単位は[m]でWGS84座標系、高度はGPSではあまり精度がよくありません
  • getTime():測位時刻[msec]
    • 1970/1/1 0:00からのUTC時間。これを使って時間差を計算してはいけないようで時間が前後することもあり得ます。時間のデルタを計測したい場合は
      getElapsedRealtimeNanos を使います。
  • getSpeed():速度[m/sec]
    • 止まっていれば0となります。
  • getBearing():方位(水平)[°]
    • 北から東へ90°となり0°は北向きを示しています。

などです。これ以外にも色々あります。尚、これはフォアグランドでのGPSを走らせています。バックグランドでの測位はこちらを参考にしてください。

 
関連ページ:

 

References:
LocationManager | Android Developers
Criteria | Android Developers
Runtime Permissions | Android Developers
Location Strategies | Android Developers
Location | Android Developers

誤字脱字、意味不明で分からにゃイ、
などのご意見はこちらから mailフォーム

ブックマークしておくと便利です このエントリーをはてなブックマークに追加




アプリ開発が上達するお勧め

アプリ開発を始めたけどわからないところがあり、誰かに聞きたいけど周りにはそんな人はいない…あるいは、会社で働いていて日中そんなに時間をとれないなど、オンラインのプログラミングスクールがいいでしょう、時間の制約がないところが一番の魅力です。

以下の3つはAndroidが学習できるオンラインスクールです。


TECH ACADEMY
Androidアプリコース



侍エンジニア塾
侍エンジニア塾 無料体験レッスン



CodeCamp
~約8,000名の受講生と80社以上の導入実績~
現役エンジニアのオンライン家庭教師CodeCamp





正直ネットや本では限界があります。直接(ネットで)誰か分かる人に聞いた方が早く解決して、上達も早いと思います。

尚、スクールがダメだと言う人がいますが、やる気があれば問題ありません。与えられるのを待っていてはいけないですね
欲しいものは取りに行くのです。


Google Pixel 3 XLグローバル版
SIMフリー 並行輸入品
6.3インチの大画面
背景をぼかすポートレートモード撮影

Anker PowerCore II Slim 10000
Power IQ 2.0搭載
iPhone & Android対応

シェアする

  • このエントリーをはてなブックマークに追加

フォローする