모바일 앱(안드로이드)

안드로이드 앱 만들기 : 구글맵 최종 위치 표시 하기.

Billcorea 2022. 1. 11. 22:12
반응형

 

앱을 만들다 보면, 간혹 지도에 현재 나의 위치를 표시해야 하는 경우가 생긴다. 그래서 간단하게 그 기능을 만들어 보도록 하겠다.

 

먼저 위치 정보를 수집하기 위해서 권한을 등록해야 한다.  manifest 을 열어서 보면...

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

그리고 다음은 gradle 파일에 추가해야할 부분은 

 

    implementation 'com.google.android.gms:play-services-location:19.0.1'

이제 코드를 구현해볼 차례인데, 

 

import android.Manifest;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
.....

import com.google.android.gms.location.FusedLocationProviderClient;

.....

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback,
                                GoogleMap.OnMyLocationButtonClickListener,
                               GoogleMap.OnMarkerClickListener {

.....

    private FusedLocationProviderClient fusedLocationClient;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ....

            fusedLocationClient = LocationServices.getFusedLocationProviderClient(MapsActivity.this);

        ....
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
                && ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        mMap = googleMap;
        mMap.setOnMarkerClickListener(MapsActivity.this);
        mMap.setOnMyLocationButtonClickListener(MapsActivity.this);
        mMap.setMyLocationEnabled(true);
        mUiSettings = googleMap.getUiSettings();
        mUiSettings.setZoomControlsEnabled(true);
        mUiSettings.setMyLocationButtonEnabled(true);

        fusedLocationClient.getLastLocation()
                    .addOnSuccessListener(new OnSuccessListener<Location>() {
                        @Override
                        public void onSuccess(Location location) {

                            if (location == null) return ;

                            lat = location.getLatitude();
                            lon = location.getLongitude();

                            LatLng sydney = new LatLng(lat, lon);
                            markerBinding.markerText.setText(placeName);
                            mMap.addMarker(new MarkerOptions().position(sydney).title(placeName)
                                    .icon(BitmapDescriptorFactory.fromBitmap(createDrawableFromView(getApplicationContext(), markView))));
                            mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 30));

                            ...

                        }
                    });
    }

    ...

}

 

이런 정도의 구현으로 fusedLocationClient 을 이용해서 최근 확인된 위치 정보를 가져오고 그것을 이옹해서 지도등에 위치 표시를 하는 용도로 사용해 볼 수 있다. 

 

 

 

사용한 예시는 이렇게 마무리 해 볼 수 있다.

 

반응형