1
0

More than 1 year has passed since last update.

Androidアプリで端末の位置情報を取得する

Last updated at Posted at 2022-03-24

#はじめに
Androidアプリで、Cordovaプラグインを使用して端末の位置情報を取得する。

#コード
最終的なコード

document.addEventListener("deviceready", function(){

  let permissions = window.cordova.plugins.permissions;
  permissions.requestPermissions(
    [
      permissions.ACCESS_FINE_LOCATION
      ,permissions.ACCESS_COARSE_LOCATION
    ]
    ,function( status ){
      if( status.hasPermission ){
        navigator.geolocation.getCurrentPosition(
          function(position) {
            let latitude = position.coords.latitude
            let longitude = position.coords.longitude
            console.log(latitude, longitude)
          },
          function(error) {
            console.log(error)
          },
          {
            enableHighAccuracy: false,
            timeout: 30000,
          }
        );
      }
      else{
        console.log('status of permissions is error')
      }
    }
    ,function(){
       console.log('permissions is error')
    }
  );

}, false);

#解説
###Cordovaの読み込みが完了した後で、中の関数を実行する。
https://cordova.apache.org/docs/ja/latest/cordova/events/events.deviceready.html

document.addEventListener("deviceready", function(){
  ....
}, false);

###端末で位置情報取得を許可する。
アプリを開いた時に、「~~~に位置情報へのアクセスを許可しますか」という旨の確認ダイアログを表示させる。
cordova-plugin-android-permissionsをインストール。

cd src-cordova
cordova plugin add cordova-plugin-android-permissions

複数のパーミッションをリクエストするため、permissions.requestPermissionsを使用。
permissions.ACCESS_FINE_LOCATIONは、おおよその位置にアクセスできるようにする設定。
permissions.ACCESS_COARSE_LOCATIONは、正確な場所にアクセスできるようにする設定。


let permissions = window.cordova.plugins.permissions;

permissions.requestPermissions(
  [
    permissions.ACCESS_FINE_LOCATION
    ,permissions.ACCESS_COARSE_LOCATION
  ]
  ,function( status ){
    if( status.hasPermission ){
      ....
    }
    else{
      ....
    }
  }
  ,function(){
    ....
  }
);

app/AndroidManifest.xmlに下記を追加する。

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />

###geolocationプラグインをインストール。

cordova plugin add cordova-plugin-geolocation

// 古いバージョンのCordovaはこっちをインストール(5.0未満?)
cordova plugin add org.apache.cordova.geolocation

app/res/xml/config.xmlに下記を設定する。

<feature name="Geolocation">
    <param name="android-package" value="org.apache.cordova.GeoBroker" />
</feature>

###位置情報を取得する。
navigator.geolocation.getCurrentPositionを使う。

navigator.geolocation.getCurrentPosition(
  function(position) {
    let latitude = position.coords.latitude
    let longitude = position.coords.longitude
    console.log(latitude, longitude)
  },
  function(error) {
    console.log(error)
  },
  {
    enableHighAccuracy: false,
    timeout: 30000,
  }
);

enableHighAccuracyはより正確な位置情報を取得するためのオプション。
通常はtrueで設定するが、アプリの起動が遅くなる場合はfalseにすると早くなる。
falseでもほぼ正確な位置情報を取得できる。

#参考サイト
https://www.npmjs.com/package/cordova-plugin-android-permissions

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0