浜松のWEBシステム開発・スマートフォンアプリ開発・RTK-GNSS関連の開発はお任せください
株式会社シーポイントラボ
TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:静岡県浜松市中区富塚町1933-1 佐鳴湖パークタウンサウス2F

【androidjava】FusedLocationProviderについて

撮影した写真の位置情報が付いてこなかった時に現在位置を取ってきて

それを代わりに使う機能を作りました。

 

FusedLocationProviderがでるまでは、gps、wifi、電話といった受信機器

から開発者で切り分けていましたが

これを実装すると、どの機器からも処理を分岐させる

必要がなくなり楽に受信処理を書くことができます。

 

locationmanagerよりもかなり短くお手軽に書けました。

 

まず最初にパーミッションを付けましょう。他の

uses-permissionがついているところに適当にぶちこみます。

 

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

リクエストを受け取る為にインスタンスを作ります。

 

 


private FusedLocationProviderClient fusedLocationClient;

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

//コンストラクタはthisでok
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
        LocationRequest locationRequest = new LocationRequest();
        locationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
}
getLastLocation();
}

//現在地を緯度経度の形で受け取る

private void getLastLocation() {
        fusedLocationClient.getLastLocation()
                .addOnSuccessListener(
                        this,
                        new OnSuccessListener<Location>() {
                            @Override
                            public void onSuccess(Location location) {
                                System.out.println("asaba");
                                latitude = location.getLatitude();
                                longitute = location.getLongitude();
                                latLng = new LatLng(latitude, longitute);
                                MapFragment mapFragment = (MapFragment) getFragmentManager()
                                        .findFragmentById(R.id.mapFragment);
                                mapFragment.getMapAsync(MainActivity.this);
                            }
                        });
    }

getLastLocation()で通信に成功した場合にlatitudeとlongituteを

取ってきます。

注意するべきは、MapFragmentの定義位置です。

onCreate内でこれを呼ぶと、mapFragmentがgetLastLocation()より

早く呼ばれてしまい、latLngがnullとなりアプリがクラッシュして

しまう点です。

必ず同じスコープ内で処理をしておきましょう。

latitudeとlongituteをSystem.out.println();で表示して

現在地が読み取れれば成功です。

 

リファレンスはこちら→https://developer.android.com/training/location/retrieve-current.html

  • この記事いいね! (0)