Android API v2 용 Google지도에 내 위치를 표시하는 방법
나는 이것에 대한 대답을 위해 높고 낮게 보였으며 포럼 질문에서 아무도 도울 수 없었습니다. 튜토리얼을 검색했습니다. API 가이드는 말한다 :
내 위치 버튼은 내 위치 레이어가 활성화 된 경우에만 화면 오른쪽 상단에 나타납니다.
그래서 저는이 내 위치 레이어를 찾고 있었지만 아무것도 찾을 수 없었습니다. Google지도에 내 위치를 어떻게 표시합니까?
API 가이드에는 모든 것이 잘못되었습니다 (정말 Google?). Maps API v2에서는 자신을 표시하기 위해 레이어를 활성화 할 필요가 없습니다.지도로 만든 GoogleMaps 인스턴스에 대한 간단한 호출이 있습니다.
Google이 제공하는 실제 문서가 답을 제공합니다. 당신은 단지
Kotlin을 사용하는 경우
// map is a GoogleMap object
map.isMyLocationEnabled = true
Java를 사용하는 경우
// map is a GoogleMap object
map.setMyLocationEnabled(true);
마법이 일어나는 것을 지켜보십시오.
위치 권한이 있고 API 레벨 23 (M) 이상 에서 런타임시 요청 했는지 확인하세요.
자바 코드 :
public class MapActivity extends FragmentActivity implements LocationListener {
GoogleMap googleMap;
LatLng myPosition;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map);
// Getting reference to the SupportMapFragment of activity_main.xml
SupportMapFragment fm = (SupportMapFragment)
getSupportFragmentManager().findFragmentById(R.id.map);
// Getting GoogleMap object from the fragment
googleMap = fm.getMap();
// Enabling MyLocation Layer of Google Map
googleMap.setMyLocationEnabled(true);
// Getting LocationManager object from System Service LOCATION_SERVICE
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
// Creating a criteria object to retrieve provider
Criteria criteria = new Criteria();
// Getting the name of the best provider
String provider = locationManager.getBestProvider(criteria, true);
// Getting Current Location
Location location = locationManager.getLastKnownLocation(provider);
if (location != null) {
// Getting latitude of the current location
double latitude = location.getLatitude();
// Getting longitude of the current location
double longitude = location.getLongitude();
// Creating a LatLng object for the current location
LatLng latLng = new LatLng(latitude, longitude);
myPosition = new LatLng(latitude, longitude);
googleMap.addMarker(new MarkerOptions().position(myPosition).title("Start"));
}
}
}
activity_map.xml :
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:id="@+id/map"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
class="com.google.android.gms.maps.SupportMapFragment"/>
현재 위치는 파란색 원으로 표시됩니다.
안드로이드 6.0에서 사용자 권한을 확인해야합니다. 사용 GoogleMap.setMyLocationEnabled(true)
하려면 Call requires permission which may be rejected by user
오류가 발생합니다.
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
mMap.setMyLocationEnabled(true);
} else {
// Show rationale and request permission.
}
자세한 내용은 Google지도 문서를 확인하세요.
"내 위치"버튼을 표시하려면 전화를 걸어야합니다.
map.getUiSettings().setMyLocationButtonEnabled(true);
GoogleMap 개체에.
을 호출 GoogleMap.setMyLocationEnabled(true)
하고 Activity
다음 2 줄 코드를에 추가합니다 Manifest
.
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
내 위치 레이어를 활성화하기 전에 사용자에게 위치 권한을 요청해야합니다. 이 샘플에는 위치 권한 요청이 포함되어 있지 않습니다.
To simplify, in terms of lines of code, the request for the location permit can be made using the library EasyPermissions.
Then following the example of the official documentation of The My Location Layer my code works as follows for all versions of Android that contain Google services.
- Create an activity that contains a map and implements the interfaces
OnMyLocationClickListener
yOnMyLocationButtonClickListener
. - Define in app/build.gradle
implementation 'pub.devrel:easypermissions:2.0.1'
Forward results to EasyPermissions within method
onRequestPermissionsResult()
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
Request permission and operate according to the user's response with
requestLocationPermission()
- Call
requestLocationPermission()
and set the listeners toonMapReady()
.
MapsActivity.java
public class MapsActivity extends FragmentActivity implements
OnMapReadyCallback,
GoogleMap.OnMyLocationClickListener,
GoogleMap.OnMyLocationButtonClickListener {
private final int REQUEST_LOCATION_PERMISSION = 1;
private GoogleMap mMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
requestLocationPermission();
mMap.setOnMyLocationButtonClickListener(this);
mMap.setOnMyLocationClickListener(this);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// Forward results to EasyPermissions
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}
@SuppressLint("MissingPermission")
@AfterPermissionGranted(REQUEST_LOCATION_PERMISSION)
public void requestLocationPermission() {
String[] perms = {Manifest.permission.ACCESS_FINE_LOCATION};
if(EasyPermissions.hasPermissions(this, perms)) {
mMap.setMyLocationEnabled(true);
Toast.makeText(this, "Permission already granted", Toast.LENGTH_SHORT).show();
}
else {
EasyPermissions.requestPermissions(this, "Please grant the location permission", REQUEST_LOCATION_PERMISSION, perms);
}
}
@Override
public boolean onMyLocationButtonClick() {
Toast.makeText(this, "MyLocation button clicked", Toast.LENGTH_SHORT).show();
return false;
}
@Override
public void onMyLocationClick(@NonNull Location location) {
Toast.makeText(this, "Current location:\n" + location, Toast.LENGTH_LONG).show();
}
}
ReferenceURL : https://stackoverflow.com/questions/15142089/how-to-display-my-location-on-google-maps-for-android-api-v2
'IT TIP' 카테고리의 다른 글
인스트루먼트 할당은 사용자 정의 클래스의 객체 할당 및 할당 해제를 추적합니다. (0) | 2020.12.27 |
---|---|
Django에서 "미디어"파일에 액세스 (0) | 2020.12.27 |
'System.Web.Security.SqlMembershipProvider'에는 스키마 버전 '1'과 호환되는 데이터베이스 스키마가 필요합니다. (0) | 2020.12.27 |
varchar가 숫자인지 확인 (TSQL) (0) | 2020.12.27 |
for-in 문 (0) | 2020.12.27 |