Pokaż moją lokalizację

Ten przykład pokazuje, jak włączyć warstwę Moja lokalizacja i jak za pomocą przycisku Moja lokalizacja wyświetlić na mapie bieżącą pozycję urządzenia, oznaczoną niebieskim punktem.

Więcej informacji znajdziesz w dokumentacji.

Rozpocznij

Zanim spróbujesz użyć przykładowego kodu, musisz skonfigurować środowisko programistyczne. Więcej informacji znajdziesz w przykładach kodu Maps SDK na Androida.

Wyświetlanie kodu

Kotlin

class MyLocationDemoActivity : SamplesBaseActivity(),     OnMyLocationButtonClickListener,     OnMyLocationClickListener, OnMapReadyCallback,     OnRequestPermissionsResultCallback {     /**      * Flag indicating whether a requested permission has been denied after returning in      * [.onRequestPermissionsResult].      */     private var permissionDenied = false     private lateinit var map: GoogleMap     override fun onCreate(savedInstanceState: Bundle?) {         super.onCreate(savedInstanceState)         setContentView(R.layout.my_location_demo)         val mapFragment =             supportFragmentManager.findFragmentById(R.id.map) as SupportMapFragment?         mapFragment?.getMapAsync(this)         applyInsets(findViewById<View?>(R.id.map_container))     }      override fun onMapReady(googleMap: GoogleMap) {         map = googleMap         googleMap.setOnMyLocationButtonClickListener(this)         googleMap.setOnMyLocationClickListener(this)         enableMyLocation()     }      /**      * Enables the My Location layer if the fine location permission has been granted.      */     @SuppressLint("MissingPermission")     private fun enableMyLocation() {          // 1. Check if permissions are granted, if so, enable the my location layer         if (ContextCompat.checkSelfPermission(                 this,                 Manifest.permission.ACCESS_FINE_LOCATION             ) == PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(                 this,                 Manifest.permission.ACCESS_COARSE_LOCATION             ) == PackageManager.PERMISSION_GRANTED         ) {             map.isMyLocationEnabled = true             return         }          // 2. If if a permission rationale dialog should be shown         if (ActivityCompat.shouldShowRequestPermissionRationale(                 this,                 Manifest.permission.ACCESS_FINE_LOCATION             ) || ActivityCompat.shouldShowRequestPermissionRationale(                 this,                 Manifest.permission.ACCESS_COARSE_LOCATION             )         ) {             PermissionUtils.RationaleDialog.newInstance(                 LOCATION_PERMISSION_REQUEST_CODE, true             ).show(supportFragmentManager, "dialog")             return         }          // 3. Otherwise, request permission         ActivityCompat.requestPermissions(             this,             arrayOf(                 Manifest.permission.ACCESS_FINE_LOCATION,                 Manifest.permission.ACCESS_COARSE_LOCATION             ),             LOCATION_PERMISSION_REQUEST_CODE         )     }      override fun onMyLocationButtonClick(): Boolean {         Toast.makeText(this, "MyLocation button clicked", Toast.LENGTH_SHORT)             .show()         // Return false so that we don't consume the event and the default behavior still occurs         // (the camera animates to the user's current position).         return false     }      override fun onMyLocationClick(location: Location) {         Toast.makeText(this, "Current location:\n$location", Toast.LENGTH_LONG)             .show()     }      override fun onRequestPermissionsResult(         requestCode: Int,         permissions: Array<String>,         grantResults: IntArray     ) {         if (requestCode != LOCATION_PERMISSION_REQUEST_CODE) {             super.onRequestPermissionsResult(                 requestCode,                 permissions,                 grantResults             )             return         }          if (isPermissionGranted(                 permissions,                 grantResults,                 Manifest.permission.ACCESS_FINE_LOCATION             ) || isPermissionGranted(                 permissions,                 grantResults,                 Manifest.permission.ACCESS_COARSE_LOCATION             )         ) {             // Enable the my location layer if the permission has been granted.             enableMyLocation()         } else {             // Permission was denied. Display an error message             // ...         }     }      override fun onResumeFragments() {         super.onResumeFragments()         if (permissionDenied) {             // Permission was not granted, display error dialog.             showMissingPermissionError()             permissionDenied = false         }     }      /**      * Displays a dialog with error message explaining that the location permission is missing.      */     private fun showMissingPermissionError() {         newInstance(true).show(supportFragmentManager, "dialog")     }      companion object {         /**          * Request code for location permission request.          *          * @see .onRequestPermissionsResult          */         private const val LOCATION_PERMISSION_REQUEST_CODE = 1     } }        

Java

public class MyLocationDemoActivity extends SamplesBaseActivity     implements     OnMyLocationButtonClickListener,     OnMyLocationClickListener,     OnMapReadyCallback,     ActivityCompat.OnRequestPermissionsResultCallback {      /**      * Request code for location permission request.      *      * @see #onRequestPermissionsResult(int, String[], int[])      */     private static final int LOCATION_PERMISSION_REQUEST_CODE = 1;      /**      * Flag indicating whether a requested permission has been denied after returning in {@link      * #onRequestPermissionsResult(int, String[], int[])}.      */     private boolean permissionDenied = false;      private GoogleMap map;      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(com.example.common_ui.R.layout.my_location_demo);          SupportMapFragment mapFragment =             (SupportMapFragment) getSupportFragmentManager().findFragmentById(com.example.common_ui.R.id.map);         mapFragment.getMapAsync(this);         applyInsets(findViewById(com.example.common_ui.R.id.map_container));     }      @Override     public void onMapReady(@NonNull GoogleMap googleMap) {         map = googleMap;         map.setOnMyLocationButtonClickListener(this);         map.setOnMyLocationClickListener(this);         enableMyLocation();     }      /**      * Enables the My Location layer if the fine location permission has been granted.      */     @SuppressLint("MissingPermission")     private void enableMyLocation() {         // 1. Check if permissions are granted, if so, enable the my location layer         if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)             == PackageManager.PERMISSION_GRANTED             || ContextCompat.checkSelfPermission(this, permission.ACCESS_COARSE_LOCATION)             == PackageManager.PERMISSION_GRANTED) {             map.setMyLocationEnabled(true);             return;         }          // 2. Otherwise, request location permissions from the user.         PermissionUtils.requestLocationPermissions(this, LOCATION_PERMISSION_REQUEST_CODE, true);     }      @Override     public boolean onMyLocationButtonClick() {         Toast.makeText(this, "MyLocation button clicked", Toast.LENGTH_SHORT).show();         // Return false so that we don't consume the event and the default behavior still occurs         // (the camera animates to the user's current position).         return false;     }      @Override     public void onMyLocationClick(@NonNull Location location) {         Toast.makeText(this, "Current location:\n" + location, Toast.LENGTH_LONG).show();     }      @Override     public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,         @NonNull int[] grantResults) {         if (requestCode != LOCATION_PERMISSION_REQUEST_CODE) {             super.onRequestPermissionsResult(requestCode, permissions, grantResults);             return;         }          if (PermissionUtils.isPermissionGranted(permissions, grantResults,             Manifest.permission.ACCESS_FINE_LOCATION) || PermissionUtils             .isPermissionGranted(permissions, grantResults,                 Manifest.permission.ACCESS_COARSE_LOCATION)) {             // Enable the my location layer if the permission has been granted.             enableMyLocation();         } else {             // Permission was denied. Display an error message             // ...         }     }      @Override     protected void onResumeFragments() {         super.onResumeFragments();         if (permissionDenied) {             // Permission was not granted, display error dialog.             showMissingPermissionError();             permissionDenied = false;         }     }      /**      * Displays a dialog with error message explaining that the location permission is missing.      */     private void showMissingPermissionError() {         PermissionUtils.PermissionDeniedDialog             .newInstance(true).show(getSupportFragmentManager(), "dialog");     }  }        

Klonowanie i uruchamianie próbek

Aby uruchomić ten przykład lokalnie, musisz mieć zainstalowany Git. To polecenie klonuje przykładowe repozytorium aplikacji.

git clone [email protected]:googlemaps-samples/android-samples.git

Zaimportuj przykładowy projekt do Android Studio:

  1. W Android Studio kliknij Plik > Nowy > Importuj projekt.
  2. Otwórz lokalizację, w której zapisano repozytorium, i wybierz katalog projektu Kotlin lub Java:

    • Kotlin: PATH-REPO/android-samples/ApiDemos/kotlin
    • Java: PATH-REPO/android-samples/ApiDemos/java
  3. Wybierz Otwórz. Android Studio kompiluje projekt za pomocą narzędzia do kompilacji Gradle.
  4. Utwórz pusty plik secrets.properties w tym samym katalogu, w którym znajduje się plik local.properties projektu. Więcej informacji o tym pliku znajdziesz w artykule Dodawanie klucza interfejsu API do projektu.
  5. Uzyskaj klucz interfejsu API z projektu z włączonym pakietem SDK Map Google na Androida.
  6. Dodaj ten ciąg do pliku secrets.properties, zastępując YOUR_API_KEY wartością klucza API:

    MAPS_API_KEY=YOUR_API_KEY
  7. Uruchom aplikację.