Sekarang adalah hari jadi Google Maps Platform yang ke-15 - Lihat berita dan pengumuman terbaru

Data Lokasi

Salah satu fitur unik aplikasi seluler adalah kemampuan penentuan lokasi. Pengguna seluler membawa perangkatnya ke mana saja, sehingga menambahkan kemampuan penentuan lokasi pada aplikasi Anda akan memberikan pengalaman yang lebih kontekstual kepada pengguna.

Contoh kode

Repositori ApiDemos di GitHub mencakup contoh yang menunjukkan penggunaan lokasi pada peta:

Menangani data lokasi

Data lokasi yang tersedia untuk perangkat Android berisi lokasi perangkat saat ini, yang ditemukan menggunakan kombinasi berbagai teknologi, rute dan metode gerakan, serta apakah perangkat telah berpindah melintasi batas geografis standar, atau pembatasan wilayah. Bergantung pada kebutuhan aplikasi, Anda dapat memilih beberapa cara untuk menangani data lokasi:

  • Lapisan My Location menyediakan cara sederhana untuk menampilkan lokasi perangkat pada peta. Lapisan ini tidak menyediakan data.
  • Location API layanan Google Play disarankan untuk semua permintaan terprogram atas data lokasi.
  • Antarmuka LocationSource memungkinkan Anda menyediakan penyedia lokasi kustom.

Izin akses lokasi

Jika aplikasi Anda perlu mengakses lokasi pengguna, Anda harus meminta izin dengan menambahkan izin akses lokasi Android yang relevan ke aplikasi Anda.

Android menawarkan dua izin akses lokasi: ACCESS_COARSE_LOCATION dan ACCESS_FINE_LOCATION. Izin yang Anda pilih akan menentukan akurasi lokasi yang ditampilkan oleh API. Anda hanya perlu meminta salah satu izin akses lokasi Android, bergantung pada tingkat akurasi yang Anda perlukan:

  • android.permission.ACCESS_COARSE_LOCATION – Memungkinkan API menggunakan Wi-Fi atau data seluler (atau keduanya) untuk menentukan lokasi perangkat. API menampilkan lokasi dengan akurasi kira-kira setara dengan satu blok kota.
  • android.permission.ACCESS_FINE_LOCATION – Memungkinkan API menentukan lokasi seakurat mungkin dari penyedia lokasi yang tersedia, termasuk Sistem Pemosisi Global (GPS) serta Wi-Fi dan data seluler.

Menambahkan izin ke manifes aplikasi

Tambahkan salah satu dari izin berikut sebagai turunan dari elemen <manifest> dalam manifes Android Anda. Baik berupa izin akses lokasi kasar:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp" >
  ...
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
  ...
</manifest>

Maupun izin akses lokasi halus:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp" >
  ...
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
  ...
</manifest>

Meminta izin waktu proses

Android 6.0 (Marshmallow) memperkenalkan model baru untuk menangani izin, yang menyederhanakan proses menginstal dan mengupgrade versi aplikasi bagi pengguna. Jika aplikasi Anda menargetkan API level 23 atau yang lebih tinggi, model izin baru dapat digunakan.

Jika aplikasi Anda mendukung model izin baru dan perangkat menjalankan Android 6.0 (Marshmallow) atau yang lebih baru, pengguna tidak perlu memberikan izin saat menginstal atau mengupgrade versi aplikasi. Aplikasi harus memeriksa apakah aplikasi memiliki izin yang diperlukan pada waktu proses, dan meminta izin jika tidak memilikinya. Sistem menampilkan dialog kepada pengguna untuk meminta izin.

Demi pengalaman pengguna terbaik, penting untuk meminta izin sesuai konteks. Jika lokasi sangat penting untuk fungsi aplikasi, Anda harus meminta izin akses lokasi saat aplikasi diaktifkan. Cara yang baik untuk melakukannya adalah dengan layar selamat datang yang ramah atau wizard yang menjelaskan kepada pengguna alasan izin tersebut diperlukan.

Jika aplikasi memerlukan izin hanya untuk sebagian fungsinya, Anda harus meminta izin akses lokasi pada saat aplikasi menjalankan tindakan yang memerlukan izin.

Aplikasi harus dapat menangani dengan baik seandainya pengguna tidak memberikan izin. Misalnya, jika izin diperlukan untuk fitur tertentu, aplikasi dapat menonaktifkan fitur tersebut. Jika izin sangat diperlukan agar aplikasi dapat berfungsi, aplikasi dapat menonaktifkan semua fungsinya dan memberi tahu pengguna bahwa mereka perlu memberikan izin.

Contoh kode berikut memeriksa izin menggunakan Support Library sebelum mengaktifkan lapisan My Location:

if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
        == PackageManager.PERMISSION_GRANTED) {
    if (mMap != null) {
        mMap.setMyLocationEnabled(true);
    }
} else {
    // Permission to access the location is missing. Show rationale and request permission
    PermissionUtils.requestPermission(this, LOCATION_PERMISSION_REQUEST_CODE,
        Manifest.permission.ACCESS_FINE_LOCATION, true);
}

Contoh berikut menangani hasil permintaan izin dengan menerapkan ActivityCompat.OnRequestPermissionsResultCallback dari Support Library:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (requestCode != LOCATION_PERMISSION_REQUEST_CODE) {
        return;
    }

    if (PermissionUtils.isPermissionGranted(permissions, grantResults, Manifest.permission.ACCESS_FINE_LOCATION)) {
        // Enable the my location layer if the permission has been granted.
        enableMyLocation();
    } else {
        // Permission was denied. Display an error message
        // ...
    }
}

Agar dapat mengetahui contoh kode lainnya dan praktik terbaik untuk izin waktu proses Android, lihat dokumentasi untuk model izin Android.

Lapisan My Location

Anda dapat menggunakan lapisan My Location dan tombol Lokasiku untuk menunjukkan kepada pengguna posisinya saat ini pada peta. Panggil mMap.setMyLocationEnabled() untuk mengaktifkan lapisan My Location pada peta.

Contoh berikut menunjukkan penggunaan sederhana lapisan My Location:

public class MyLocationDemoActivity extends FragmentActivity
    implements OnMyLocationButtonClickListener,
        OnMyLocationClickListener,
        OnMapReadyCallback {

  private GoogleMap mMap;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_location_demo);

    SupportMapFragment mapFragment =
        (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
  }

  @Override
  public void onMapReady(GoogleMap map) {
    mMap = map;
    // TODO: Before enabling the My Location layer, you must request
    // location permission from the user. This sample does not include
    // a request for location permission.
    mMap.setMyLocationEnabled(true);
    mMap.setOnMyLocationButtonClickListener(this);
    mMap.setOnMyLocationClickListener(this);
  }

  @Override
  public void onMyLocationClick(@NonNull Location location) {
    Toast.makeText(this, "Current location:\n" + location, Toast.LENGTH_LONG).show();
  }

  @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;
  }
}

Jika lapisan My Location diaktifkan, tombol Lokasiku akan muncul di sudut kanan atas peta. Saat pengguna mengklik tombol tersebut, kamera akan menempatkan lokasi perangkat saat ini, jika diketahui, di bagian tengah peta. Lokasi ditunjukkan pada peta dengan titik biru kecil jika perangkat tidak bergerak, atau dengan tanda V jika perangkat sedang bergerak.

Screenshot berikut menunjukkan tombol Lokasiku di kanan atas dan titik biru Lokasiku di tengah peta:

Anda dapat mencegah tombol Lokasiku muncul dengan memanggil UiSettings.setMyLocationButtonEnabled(false).

Aplikasi Anda dapat merespons peristiwa berikut:

Dari Persyaratan Layanan kami

Lindungi privasi pengguna,
terus berikan informasi kepada mereka

Selalu berikan informasi terkait penggunaan data pengguna dan pastikan agar pengguna perorangan tidak dapat dikenali. Dapatkan izin pengguna sebelum menggunakan lokasinya, dan biarkan mereka mencabut izin kapan saja.

Pelajari Lebih Lanjut

Google Play services Location API

Location API dari layanan Google Play adalah metode yang disarankan untuk menambahkan kemampuan penentuan lokasi ke aplikasi Android Anda. API ini mencakup fungsi yang memungkinkan Anda:

  • Menentukan lokasi perangkat.
  • Memantau perubahan lokasi.
  • Menentukan moda transportasi, jika perangkat sedang bergerak.
  • Membuat dan memantau wilayah geografis yang sudah ditetapkan sebelumnya, yang dikenal sebagai pembatasan wilayah.

Location API memudahkan Anda membuat aplikasi yang hemat daya dan memiliki kemampuan penentuan lokasi. Seperti Maps SDK for Android, Location API didistribusikan sebagai bagian dari SDK layanan Google Play. Untuk mendapatkan informasi lebih lanjut tentang Location API, lihat kelas pelatihan Android yang berjudul Membuat Aplikasi Anda Mampu Menentukan Lokasi atau Referensi Location API. Contoh kode disertakan sebagai bagian dari SDK layanan Google Play.