IT TIP

Android API v2 용 Google지도에 내 위치를 표시하는 방법

itqueen 2020. 12. 27. 20:35
반응형

Android API v2 용 Google지도에 내 위치를 표시하는 방법


나는 이것에 대한 대답을 위해 높고 낮게 보였으며 포럼 질문에서 아무도 도울 수 없었습니다. 튜토리얼을 검색했습니다. API 가이드는 말한다 :

내 위치 버튼은 내 위치 레이어가 활성화 된 경우에만 화면 오른쪽 상단에 나타납니다.

그래서 저는이 내 위치 레이어를 찾고 있었지만 아무것도 찾을 수 없었습니다. Google지도에 내 위치를 어떻게 표시합니까?


API 가이드에는 모든 것이 잘못되었습니다 (정말 Google?). Maps API v2에서는 자신을 표시하기 위해 레이어를 활성화 할 필요가 없습니다.지도로 만든 GoogleMaps 인스턴스에 대한 간단한 호출이 있습니다.

Google 문서

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.

  1. Create an activity that contains a map and implements the interfaces OnMyLocationClickListener y OnMyLocationButtonClickListener.
  2. Define in app/build.gradle implementation 'pub.devrel:easypermissions:2.0.1'
  3. Forward results to EasyPermissions within method onRequestPermissionsResult()

    EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);

  4. Request permission and operate according to the user's response with requestLocationPermission()

  5. Call requestLocationPermission() and set the listeners to onMapReady().

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();
    }
}

Source

ReferenceURL : https://stackoverflow.com/questions/15142089/how-to-display-my-location-on-google-maps-for-android-api-v2

반응형