Pengambilan Lokasi Terakhir di Android dengan Google Play Services Location API (Android Studio+Gradle)

Update Feb 2016: ada perubahan dalam coding, ini updatenya: https://docs.google.com/document/d/1f6S7imWd0jFsRgl0KMvskTR-tHBzDlVH8h6_q_U4L-o/edit?usp=sharing

Update 21 Nov 2015: mulai dari Android 6 (API 23),  ijin  ACCESS_COARSE_LOCATION and ACCESS_FINE_LOCATION menjadi bagian dari Android 6 runtime permission system. Sehingga diberikan bukan lagi saat instalasi, tapi saat runtime. Kode dibawah sudah diupdate untuk ini. Atau alternatifnya, turunkan targetSdkVersion ke bawah 23. Gambar bawah adalah contoh runtime permission saat app ini pertama kali dijalankan (Android 6):

runtime_permission

Dalam tutorial ini, kita akan membuat app yang mengambil lokasi terakhir dari device memanfaatkan Google Play Service dengan Android Studio+Gradle (berbeda dengan tutorial sebelumnya yang masih menggunakan Eclipse).  Tutorial ini bersumber dari https://developer.android.com/training/location/retrieve-current.html

Langkah pertama adalah  menginstall komponen Google Play Service SDK.  Pilih Tools → Android → SDK Manager. Pilih tab SDK tools, lalu pastikan komponen  Google Play Service tercheck warna biru (gambar bawah).

sdk

Klik Apply, mungkin akan ditanyakan bahwa sistem akan keluar dari Android Studio, jawab saja Yes.

Buat project baru, pilih blank activity. Pada MainActivity, tambahkan dua larget text view (gambar bawah) untuk mengeluarkan hasil koordinat latitude dan longitude. Beri nama tvLat dan tvLong

textview

Selanjutnya kita akan menambahkan library playservice pada project. Buka build.gradle menggunakan project explorer (gambar bawah), pilih build.gradle untuk module app bukan build.gradle untuk project.

gradle

Tambahkan dibagian dependencies kode sebagai berikut:

dependencies {
   compile 'com.google.android.gms:play-services:7.8.0'
}

Lakukan sync, lakukan update dan install komponen jika diperlukan (seperti gambar di bawah). Jika muncul dialog seperti dibawah, klik “Install Repository and sync project”

sync_gradle

Proses ini akan memakan waktu cukup lama (pastikan punya koneksi internet yang bagus), tapi hanya untuk pertama kali.

Untuk mengakses lokasi, diperlukan update permission. Menggunakan project explorer, buka Manifest→ AndroidManifest.xml Tambahkan kode sebagai berikut di dalam tag  <manifest>:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>;

Sekarang kita mulai coding, buka MainActivity.java, tambahkan untuk kelas MainActivity agar mengimplement ConnectionCallbacks dan OnConnectionFailedListener (kode dibawah)

public class MainActivity extends AppCompatActivity
       implements GoogleApiClient.ConnectionCallbacks,
                  GoogleApiClient.OnConnectionFailedListener {

 

Tekan alt enter untuk menambahkan impor dan tekan lagi alt enter untuk menambahkan method yang dibutuhkan (setelah enter, pilih menu “Implements method”). Secara otomatis akan ditambahkan method onConnected, onConnectionSuspended, onConnectionFailed. Method onConnected akan dipanggil setelah app terhubung dengan Google Play Service, sedangkan onConnectionSuspended dipanggil jika koneksi terputus.

Selanjutnya tambahkan variabel berikut (code bawah). GoogleApiClient adalah objek untuk melakukan pemanggilan fungsi-fungsi API yang disediakan Google Play Service. Sedangkan lastLocation untuk menyimpan lokasi terakhir.
Konstanta MY_PERMISSION_REQUEST dan ijin adalah untuk menangani runtime permission di Android 6.

    private static final int MY_PERMISSIONS_REQUEST = 99 ; //integer bebas, tapi maks 1 byte
    boolean ijin = false; //sudah mendapat ijin untuk mengakses lokasi
    GoogleApiClient mGoogleApiClient ;
    Location mLastLocation;
    TextView mLatText;
    TextView mLongText;

Tambahkan method berikut untuk menginisasi objek GoogleApiClient:

   protected synchronized void buildGoogleApiClient() {
       mGoogleApiClient = new GoogleApiClient.Builder(this)
               .addConnectionCallbacks(this)
               .addOnConnectionFailedListener(this)
               .addApi(LocationServices.API)
               .build();
   }

Selanjutnya pada onCreate tambahkan kode untuk memulai hubungan dengan Google API client.

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mLatText =  (TextView) findViewById(R.id.tvLat);
        mLongText =  (TextView) findViewById(R.id.tvLong);

        //cek permission
        //mulai dari Android 6: API 23, persmission dilakukan secara dinamik (tidak diawal lagi saat install)
        //untuk jenis2 persmisson tertentu, termasuk lokasi

        if (ContextCompat.checkSelfPermission(this,
                //hati2, jika konstanta tidak cocok, tidak ada runtimeerror
                Manifest.permission.ACCESS_COARSE_LOCATION)
                != PackageManager.PERMISSION_GRANTED) {

            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},
                    MY_PERMISSIONS_REQUEST);
                    // MY_PERMISSIONS_REQUEST adalah konstanta, nanti digunakan di  onRequestPermissionsResult

        } else {
            //sudah diijinkan
            ijin = true;
            buildGoogleApiClient();
        }
    }

    //setelah muncul dialog dan user memberikan ijin (allow atau deny), method ini akan dipanggil
    @Override
    public void onRequestPermissionsResult(int requestCode,
                                           String permissions[], int[] grantResults) {

        if (requestCode == MY_PERMISSIONS_REQUEST) {
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                //permission diberikan, mulai ambil lokasi
                buildGoogleApiClient();
                ijin = true;
            } else {
                //permssion tidak diberikan, tampilkan pesan
                AlertDialog ad = new AlertDialog.Builder(this).create();
                ad.setMessage("Tidak mendapat ijin, tidak dapat mengambil lokasi");
                ad.show();
            }
            return;
        }
    }

Pada method onConnected, onStart dan onStop tambahkan kode berikut

@Override
public void onConnected(Bundle bundle) {
   mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
           mGoogleApiClient);
   if (mLastLocation != null) {
       mLatText.setText("Latitude:"+String.valueOf(mLastLocation.getLatitude()));
       mLongText.setText("Longitude:"+String.valueOf(mLastLocation.getLongitude()));
   }
}

@Override
protected void onStart() {
        super.onStart();
        if (ijin) {
            mGoogleApiClient.connect();
        }
}

@Override
protected void onStop() {
        if (ijin) {
            mGoogleApiClient.disconnect();
        }
        super.onStop();
}

Source code lengkap tutorial ini: https://github.com/yudiwbs/LokasiSekarang

Jalankan dan app akan menampilkan lokasi terakhir. Lanjutkan dengan tutorial untuk mendapatkan update lokasi secara terus menerus.

 

2 comments on “Pengambilan Lokasi Terakhir di Android dengan Google Play Services Location API (Android Studio+Gradle)

  1. Saya masukkan
    dependencies {
    compile ‘com.google.android.gms:play-services:7.8.0’
    }

    kok gagal ya bro? Mohon bantuannya

    • Sudah terkoneksi dengan internet? Kalau ada error, biasanya karena SDK, maka ada pesan untuk sync project, nah lakukan itu.

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.