Professional Documents
Culture Documents
Modul
6
Location Based Service
Tujuan
Praktikan diharapkan dapat menggunakan Android Studio untuk membuat program sederhana pada
smartphone/ emulator. Di akhir praktikum ini, praktikan diharapkan dapat:
Persiapan
1. Buku ajar (jika ada)/diktat kuliah/materi dari sumber lain
2. Alat tulis
3. Kertas Buram
4. Lembar jawaban
5. Lembar penilaian (disiapkan oleh asisten)
6. Komputer yang sudah di-install Android Studio & Emulator didalamnya
7. Android Smartphone (Jika tidak menginstall emulator)
Materi Pokok
Praktikum ini mengasumsikan bahwa praktikan telah mempelajari materi tentang Location Based
Service. Agar praktikan dapat mencapai tujuan dalam pertemuan praktikum keenam ini, mahasiswa
harus aktif bertanya dan mencoba mempraktekkan tugas dan latihan dalam praktikum array satu
dimensi ini.
46
Proses
Pada bab ini praktikan harus menerapkan Location Based Service seperti MapBox ke dalam project-
project yang akan dibuat. Pertama bacalah dulu materi tentang MapBox selama kira-kira 10 menit.
Berikan contoh implementasi dari sebuah aplikasi LBS lalu berikutnya berdiskusilah dengan teman
Anda tentang materi yang sudah Anda pelajari tadi, diskusi dilakukan selama 15 menit. Kasus
pertama sebagai latihan dikerjakan dalam waktu 20 menit. Lanjutkan praktikum Anda dengan
menyelesaikan soal pada bagian latihan dengan batasan waktu selama 20 menit. Bagian terakhir
adalah tugas, yaitu project yang harus dikerjakan di rumah dan wajib dikumpulkan pada pertemuan
berikutnya.
Aktivitas
1. Mahasiswa membaca buku ajar (jika ada)/ diktat kuliah/materi dari sumber lain tentang
Location Based Service sebagai materi bab keenam. Temukan bagian penting dalam topik
Location Based Service ini, kemudian tulis sebagai ringkasan hasil belajar.
2. Mahasiswa berdiskusi tentang bagaimana cara membuat program Location Based Service
menggunakan Android Studio. Sebagai bahan diskusi, ikutilah langkah-langkah di bawah ini:
Dependency baru
implementation 'com.google.android.gms:play-services-location:18.0.0'
implementation 'com.google.android.gms:play-services-maps:17.0.0'
Permissions :
● Sekarang buka layout activity_main.xml dan sesuaikan kodenya menjadi seperti ini
activity_main.xml
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="Latitude:"
android:textSize="18sp" />
<TextView
android:id="@+id/latitude_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/latitude"
android:layout_marginLeft="10dp"
android:layout_toRightOf="@+id/latitude"
android:textSize="16sp" />
<TextView
android:id="@+id/longitude"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="Longitude:"
android:layout_marginTop="24dp"
android:textSize="18sp" />
<TextView
android:id="@+id/longitude_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/longitude"
android:layout_marginLeft="10dp"
android:layout_toRightOf="@+id/longitude"
android:textSize="16sp"/>
</RelativeLayout>
● Buka class MainActivity.java dan sesuaikan juga kodenya menjadi seperti ini
MainActivity.java
package com.elreginaldcaesarosan.latihanpertemuan6;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import android.Manifest;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.provider.Settings;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.model.LatLng;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mLatitudeTextView = findViewById((R.id.latitude_textview));
mLongitudeTextView = findViewById((R.id.longitude_textview));
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
mLocationManager = (LocationManager)this
.getSystemService(Context.LOCATION_SERVICE);
checkLocation(); //check whether location service is enable or not in your phone
}
@Override
public void onConnected(Bundle bundle) {
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_COARSE_LOCATION) !=
PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
startLocationUpdates();
mLocation = LocationServices.FusedLocationApi
.getLastLocation(mGoogleApiClient);
if(mLocation == null){
startLocationUpdates();
}
if (mLocation != null) {
// mLatitudeTextView.setText(String.valueOf(mLocation.getLatitude()));
//mLongitudeTextView.setText(String.valueOf(mLocation.getLongitude()));
} else {
Toast.makeText(this, "Location not Detected",
Toast.LENGTH_SHORT).show();
}
}
@Override
public void onConnectionSuspended(int i) {
Log.i(TAG, "Connection Suspended");
mGoogleApiClient.connect();
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
Log.i(TAG, "Connection failed. Error: "
+ connectionResult.getErrorCode());
}
@Override
protected void onStart() {
super.onStart();
if (mGoogleApiClient != null) {
49
mGoogleApiClient.connect();
}
}
@Override
protected void onStop() {
super.onStop();
if (mGoogleApiClient.isConnected()) {
mGoogleApiClient.disconnect();
}
}
@Override
public void onLocationChanged(Location location) {
String msg = "Updated Location: " +
Double.toString(location.getLatitude()) + "," +
Double.toString(location.getLongitude());
mLatitudeTextView.setText(String.valueOf(location.getLatitude()));
mLongitudeTextView.setText(String.valueOf(location.getLongitude() ));
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
// You can now create a LatLng Object for use with maps
LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
}
private boolean checkLocation() {
if(!isLocationEnabled())
showAlert();
return isLocationEnabled();
}
private void showAlert() {
final AlertDialog.Builder dialog = new AlertDialog.Builder(this);
dialog.setTitle("Enable Location")
.setMessage("Your Locations Settings is set to 'Off'.\nPlease Enable Location to " +
"use this app")
.setPositiveButton("Location Settings", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface paramDialogInterface, int paramInt) {
Intent myIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(myIntent);
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface paramDialogInterface, int paramInt) {
}
});
dialog.show();
}
50
● Copy dan simpan token tersebut pada notepad atau aplikasi lainnya.
● Tambahkan dependency baru pada app/gradle yaitu
Dependency baru:
//Mapbox dependencies
implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:8.5.1'
implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-locationlayer:0.5.0'
Permissions baru:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:mapbox="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.mapbox.mapboxsdk.maps.MapView
52
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
● Buka file strings.xml pada folder res/values/ dimana kita akan memasukkan Default Public
Token MapBox yang sudah kita copy sebelumnya.
Sesuaikan kodenya menjadi seperti contoh berikut,
strings.xml
<resources>
<string name="app_name">Latihan Pertemuan 6_2</string>
<string
name="mapbox_access_token">pk.eyJ1IjoidmVsbGlzeW8iLCJhIjoiY2ttNGhqdmt5MDRsNjJ2cnRtd3
MycjB5cyJ9.a0e5Or1vkizrT5XRDmPJQQ</string>
</resources>
● Lalu buka class MainActivity dan sesuaikan juga kodenya menjadi seperti berikut
MainActivity.java
package com.elreginaldcaesarosan.latihanpertemuan6_2;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.PersistableBundle;
import com.mapbox.mapboxsdk.Mapbox;
import com.mapbox.mapboxsdk.maps.MapView;
import com.mapbox.mapboxsdk.maps.MapboxMap;
import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
import com.mapbox.mapboxsdk.maps.Style;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Mapbox.getInstance(this, getString(R.string.mapbox_access_token));
setContentView(R.layout.activity_main);
mapView = (MapView) findViewById(R.id.mapView);
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(@NonNull MapboxMap mapboxMap) {
}
53
});
}
});
}
@Override
protected void onStart() {
super.onStart();
mapView.onStart();
}
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
@Override
protected void onStop() {
super.onStop();
mapView.onStop();
}
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
@Override
public void onLowMemory() {
super.onLowMemory();
mapView.onLowMemory();
}
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
}
54
● Setelah semuanya sudah disesuaikan, jalankan projek aplikasi dan hasilnya akan menjadi
seperti ini
Latihan
Kembangkan aplikasi LBS Mapbox yang sudah dibuat di aktivitas dengan menambahkan "Markers"
didalam aplikasi.
Penutup
Tugas
Buatlah sebuah aplikasi yang menerapkan MapBox didalamnya dan modifikasi aplikasi tersebut
dengan mengimplementasikan berbagai macam style yang telah disediakan oleh MapBox, contoh :
1. Font-Style
2. Street-Style
3. Markers, dll