Jobsheet - Google Maps - Current Location
Jobsheet - Google Maps - Current Location
Location
Setelah menampilkan lokasi sesuai dengan koordinat yang kita tentukan, pada praktikum
kedua ini kita akan mencoba mendapatkan lokasi pengguna saat mengakses aplikasi (current
location)
Menggunakan LocationRequest
LocationRequest digunakan untuk mendapatkan kualitas layanan untuk update lokasi
pengguna. Misalnya jika aplikasi kita ingin mendapatkan lokasi pengguna dengan akurasi
yang tinggi, maka harus dibuat location request dengan SetsetPriority(int) diset menjadi
PRIORITY_HIGH_ACCURACY dan setInterval(long) diset menjadi 5 detik. Pengaturan ini akan
sesuai untuk memetakan aplikasi yang menunjukkan lokasi pengguna secara real-time.
1. Buka MapsActivity.java
2. Instansiasi LocationRequest di bagian atas class: LocationRequest mLocationRequest;
3. Tambahkan potongan kode berikut pada fungsi onMapReady
4. mLocationRequest = LocationRequest.create();
5. mLocationRequest.setInterval(120000);
6. mLocationRequest.setFastestInterval(120000);
7. mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA));
mCurrLocationMarker = mMap.addMarker(markerOptions);
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 11));
}
}
};
Setting Permission
1. Requesting Location Permission Sejak Android 6.0 Marshmallow, aplikasi tidak akan
diberikan izin apapun pada saat instalasi. Sebaliknya, aplikasi harus meminta izin kepada
pengguna satu per satu pada saat runtime. Jadi tambahkan kode berikut di fungsi
checkLocationPermission untuk meminta izin akses lokasi pada pengguna:
2. if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
3. != PackageManager.PERMISSION_GRANTED) {
4.
5. if (ActivityCompat.shouldShowRequestPermissionRationale(this,
6. Manifest.permission.ACCESS_FINE_LOCATION)) {
7.
8. new AlertDialog.Builder(this)
9. .setTitle("Location Permission Needed")
10. .setMessage("This app needs the Location permission, please accept to use
location functionality")
11. .setPositiveButton("OK", new DialogInterface.OnClickListener() {
12. @Override
13. public void onClick(DialogInterface dialogInterface, int i) {
14. ActivityCompat.requestPermissions(MapsActivity.this,
15. new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
16. MY_PERMISSIONS_REQUEST_LOCATION );
17. }
18. })
19. .create()
20. .show();
21. } else {
22. ActivityCompat.requestPermissions(this,
23. new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
24. MY_PERMISSIONS_REQUEST_LOCATION );
25. }
Jadi ketika aplikasi pertama dijalankan, akan muncul kotak dialog untuk meminta izin pada
pengguna utntuk mengakses lokasinya.
26. Handle respon dari permission request Dialog box akan muncul setiap kali Aplikasi meminta
izin. Saat pengguna merespons, sistem memanggil metode onRequestPermissionsResult()
dan aplikasi meneruskannya sebagai respons pengguna. Metode ini digunakan untuk
mengetahui apakah izin itu diberikan. Tambahkan kode di bawah ini pada fungsi
onRequestPermissionsResult
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_LOCATION: {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission granted
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
mFusedLocationClient.requestLocationUpdates(mLocationRequest,
mLocationCallback, Looper.myLooper());
mMap.setMyLocationEnabled(true);
}
} else {
// permission denied
Toast.makeText(this, "permission denied", Toast.LENGTH_LONG).show();}
return;
}
}