
앱을 만들다 보면, 간혹 지도에 현재 나의 위치를 표시해야 하는 경우가 생긴다. 그래서 간단하게 그 기능을 만들어 보도록 하겠다.
먼저 위치 정보를 수집하기 위해서 권한을 등록해야 한다. 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 을 이용해서 최근 확인된 위치 정보를 가져오고 그것을 이옹해서 지도등에 위치 표시를 하는 용도로 사용해 볼 수 있다.
사용한 예시는 이렇게 마무리 해 볼 수 있다.
댓글 없음:
댓글 쓰기