PMO Pertemuan 10 Android location based service

ANDROID LOCATION BASED SERVICE

Location based services adalah layanan berbasis lokasi atau istilah umum yang sering digunakan untuk menggambarkan teknologi yang digunakan untuk menemukan lokasi perangkat yang pengguna gunakan. Layanan ini menggunakan teknologi global positioning service (GPS) dan cell-based location dari Google.

Selain itu, LBS tersebut terdiri dari beberapa komponen di antaranya mobile devices, communication network, position component, dan service and content providerMobile devices merupakan komponen yang sangat penting. Piranti mobile tersebut diantaranya adalah smartphonePDA, dan lainnya yang dapat berfungsi sebagai alat navigasi atau seperti halnya alat navigasi berbasis GPS.

Komponen communication network ini berupa jaringan telekomunikasi bergerak yang memindahkan data pengguna dari perangkat ke penyedia layanan. Position componentyang dimaksud adalah posisi pengguna harus ditentukan. Posisi ini dapat didapatkan dengan jaringan telekomunikasi atau dengan GPS. Sedangkan service and content provider adalah penyedia layanan yang menyediakan layanan berbeda ke pengguna seperti pencarian rute, kalkulasi posisi, dan lainnya.

Sederhananya, dengan layanan LBS kita dapat mengetahui posisi dimana kita berada, posisi teman, dan posisi rumah sakit atau pom bensin yang jaraknya dekat dengan kita. Dalam mengukur posisi, digunakan lintang dan bujur untuk menentukan lokasi geografis. Tetapi, Android menyediakan geocoder yang mendukung forward dan reverse geocodingMenggunakan geocoder, kita dapat mengkonversi nilai lintang bujur menjadi alamat dunia nyata atau sebaliknya.

LBS ini sudah banyak diterapkan oleh banyak aplikasi seperti GO-JEK, GRABBIKE, dan UberMotor. Konsep yang digunakan adalah para konsumen melakukan order dan sistem akan menampilkan driver yang berada dekat dengan konsumen. Selain aplikasi tersebut, banyak para developer yang membangun aplikasi Location Based Servicesseperti aplikasi untuk menemukan kos-kosan terdekat, menemukan restoran terdekat, dan lainnya.

Android mempunyai dua macam jenis lokasi sendiri, yaitu coarse-location dan fine-location. Lokasi coarse/kasar adalah lokasi user yang ditentukan lewat BTS terdekat, mempunyai presisi yang tidak akurat, namun hemat baterai. Sedangkan lokasi fine-location/lokasi halus, adalah lokasi user yang didapatkan melalui GPS yang sekarang sudah umum ada di perangkat Android. Fine-location mempunyai presisi yang lebih tinggi, namun boros baterai.

Pada Android, penentuan lokasi ini semua diatur oleh sebuah kelas yang bernama LocationManager, jadi location manager-lah yang akan menentukan kapan kita harus memakai fine-location, atau coarse-location apabila suatu saat GPS dimatikan. Location Manager juga secara otomatis akan mendeteksi perubahan lokasi yang terjadi, karena dia mempunyai semacam listener class yang bernama LocationListener. Kelas itulah yang akan memantau semua event, seperti perubahan lokasi, provider berubah, dan akan menyesuaikan pendeteksian lokasi sesuai dengan keadaan yang ada.

 

 

Membuat Aplikasi Android

Langkah Deskripsi
1 Anda akan menggunakan Android studio IDE untuk membuat aplikasi Android dan menamainya sebagai Tutorialspoint di bawah paketcom.example.tutorialspoint7.myapplication .
2 tambahkan file src / GPSTracker.java dan tambahkan kode yang diperlukan.
3 Ubah file src / MainActivity.java dan tambahkan kode yang diperlukan seperti yang ditunjukkan di bawah ini untuk mengurus mendapatkan lokasi saat ini dan alamat ekuivalennya.
4 Ubah layout file XML res / layout / activity_main.xml untuk menambahkan semua komponen GUI yang mencakup tiga tombol dan dua tampilan teks untuk menampilkan lokasi / alamat.
5 Ubah res / values ​​/ strings.xml untuk menentukan nilai konstan yang dibutuhkan
6 Modifikasi AndroidManifest.xml seperti gambar di bawah ini
7 Jalankan aplikasi untuk meluncurkan emulator Android dan verifikasi hasil perubahan yang dilakukan pada aplikasi.

Berikut ini adalah konten dari file aktivitas utama yang dimodifikasi MainActivity.java .

package com.example.tutorialspoint7.myapplication;

 

import android.Manifest;

import android.app.Activity;

import android.os.Bundle;

import android.support.v4.app.ActivityCompat;

import android.test.mock.MockPackageManager;

import android.view.View;

import android.widget.Button;

import android.widget.Toast;

 

public class MainActivity extends Activity {

 

Button btnShowLocation;

private static final int REQUEST_CODE_PERMISSION = 2;

String mPermission = Manifest.permission.ACCESS_FINE_LOCATION;

 

// GPSTracker class

GPSTracker gps;

 

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

 

try {

if (ActivityCompat.checkSelfPermission(this, mPermission)

!= MockPackageManager.PERMISSION_GRANTED) {

 

ActivityCompat.requestPermissions(this, new String[]{mPermission},

REQUEST_CODE_PERMISSION);

 

// If any permission above not allowed by user, this condition will

execute every time, else your else part will work

}

} catch (Exception e) {

e.printStackTrace();

}

 

btnShowLocation = (Button) findViewById(R.id.button);

 

// show location button click event

btnShowLocation.setOnClickListener(new View.OnClickListener() {

 

@Override

public void onClick(View arg0) {

// create class object

gps = new GPSTracker(MainActivity.this);

 

// check if GPS enabled

if(gps.canGetLocation()){

 

double latitude = gps.getLatitude();

double longitude = gps.getLongitude();

 

// \n is for new line

Toast.makeText(getApplicationContext(), “Your Location is – \nLat: ”

+ latitude + “\nLong: ” + longitude, Toast.LENGTH_LONG).show();

}else{

// can’t get location

// GPS or Network is not enabled

// Ask user to enable GPS/network in settings

gps.showSettingsAlert();

}

 

}

});

}

}

Berikut adalah konten dari file aktivitas utama yang dimodifikasi GPSTracker.java .

package com.example.tutorialspoint7.myapplication;

 

import android.app.AlertDialog;

import android.app.Service;

import android.content.Context;

import android.content.DialogInterface;

import android.content.Intent;

import android.location.Location;

import android.location.LocationListener;

import android.location.LocationManager;

import android.os.Bundle;

import android.os.IBinder;

import android.provider.Settings;

import android.util.Log;

 

public class GPSTracker extends Service implements LocationListener {

 

private final Context mContext;

 

// flag for GPS status

boolean isGPSEnabled = false;

 

// flag for network status

boolean isNetworkEnabled = false;

 

// flag for GPS status

boolean canGetLocation = false;

 

Location location; // location

double latitude; // latitude

double longitude; // longitude

 

// The minimum distance to change Updates in meters

private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters

 

// The minimum time between updates in milliseconds

private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute

 

// Declaring a Location Manager

protected LocationManager locationManager;

 

public GPSTracker(Context context) {

this.mContext = context;

getLocation();

}

 

public Location getLocation() {

try {

locationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE);

 

// getting GPS status

isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

 

// getting network status

isNetworkEnabled = locationManager

.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

 

if (!isGPSEnabled && !isNetworkEnabled) {

// no network provider is enabled

} else {

this.canGetLocation = true;

// First get location from Network Provider

if (isNetworkEnabled) {

locationManager.requestLocationUpdates(

LocationManager.NETWORK_PROVIDER,

MIN_TIME_BW_UPDATES,

MIN_DISTANCE_CHANGE_FOR_UPDATES, this);

 

Log.d(“Network”, “Network”);

if (locationManager != null) {

location = locationManager

.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

 

if (location != null) {

latitude = location.getLatitude();

longitude = location.getLongitude();

}

}

}

 

// if GPS Enabled get lat/long using GPS Services

if (isGPSEnabled) {

if (location == null) {

locationManager.requestLocationUpdates(

LocationManager.GPS_PROVIDER,

MIN_TIME_BW_UPDATES,

MIN_DISTANCE_CHANGE_FOR_UPDATES, this);

 

Log.d(“GPS Enabled”, “GPS Enabled”);

if (locationManager != null) {

location = locationManager

.getLastKnownLocation(LocationManager.GPS_PROVIDER);

 

if (location != null) {

latitude = location.getLatitude();

longitude = location.getLongitude();

}

}

}

}

}

 

} catch (Exception e) {

e.printStackTrace();

}

 

return location;

}

 

/**

* Stop using GPS listener

* Calling this function will stop using GPS in your app

* */

 

public void stopUsingGPS(){

if(locationManager != null){

locationManager.removeUpdates(GPSTracker.this);

}

}

 

/**

* Function to get latitude

* */

 

public double getLatitude(){

if(location != null){

latitude = location.getLatitude();

}

 

// return latitude

return latitude;

}

 

/**

* Function to get longitude

* */

 

public double getLongitude(){

if(location != null){

longitude = location.getLongitude();

}

 

// return longitude

return longitude;

}

 

/**

* Function to check GPS/wifi enabled

* @return boolean

* */

 

public boolean canGetLocation() {

return this.canGetLocation;

}

 

/**

* Function to show settings alert dialog

* On pressing Settings button will lauch Settings Options

* */

 

public void showSettingsAlert(){

AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);

 

// Setting Dialog Title

alertDialog.setTitle(“GPS is settings”);

 

// Setting Dialog Message

alertDialog.setMessage(“GPS is not enabled. Do you want to go to settings menu?”);

 

// On pressing Settings button

alertDialog.setPositiveButton(“Settings”, new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog,int which) {

Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);

mContext.startActivity(intent);

}

});

 

// on pressing cancel button

alertDialog.setNegativeButton(“Cancel”, new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int which) {

dialog.cancel();

}

});

 

// Showing Alert Message

alertDialog.show();

}

 

@Override

public void onLocationChanged(Location location) {

}

 

@Override

public void onProviderDisabled(String provider) {

}

 

@Override

public void onProviderEnabled(String provider) {

}

 

@Override

public void onStatusChanged(String provider, int status, Bundle extras) {

}

 

@Override

public IBinder onBind(Intent arg0) {

return null;

}

}

Berikut akan menjadi konten file res / layout / activity_main.xml –

<?xml version = “1.0” encoding = “utf-8”?>

<LinearLayout xmlns:android = “http://schemas.android.com/apk/res/android”

android:layout_width = “fill_parent”

android:layout_height = “fill_parent”

android:orientation = “vertical” >

<Button

android:id = “@+id/button”

android:layout_width = “fill_parent”

android:layout_height = “wrap_content”

android:text = “getlocation”/>

</LinearLayout>

Berikut akan menjadi konten res / values ​​/ strings.xml untuk mendefinisikan dua konstanta baru –

<?xml version = “1.0” encoding = “utf-8”?>

<resources>

<string name = “app_name”>Tutorialspoint</string>

</resources>

Berikut adalah konten default AndroidManifest.xml –

<?xml version = “1.0” encoding = “utf-8”?>

<manifest xmlns:android = “http://schemas.android.com/apk/res/android”

package = “com.example.tutorialspoint7.myapplication”>

<uses-permission android:name = “android.permission.ACCESS_FINE_LOCATION” />

<uses-permission android:name = “android.permission.INTERNET” />

<application

android:allowBackup = “true”

android:icon = “@mipmap/ic_launcher”

android:label = “@string/app_name”

android:supportsRtl = “true”

android:theme = “@style/AppTheme”>

<activity android:name = “.MainActivity”>

<intent-filter>

<action android:name = “android.intent.action.MAIN” />

<category android:name = “android.intent.category.LAUNCHER” />

</intent-filter>

</activity>

</application>

</manifest>

Mari coba jalankan aplikasi Tutorialspoint Anda . Saya berasumsi bahwa, Anda telah menghubungkan perangkat Android Mobile Anda yang sebenarnya dengan komputer Anda. Untuk menjalankan aplikasi dari Android Studio, buka salah satu file aktivitas proyek Anda dan klik  ikon Run dari toolbar. Sebelum memulai aplikasi Anda, installer studio Android akan menampilkan jendela berikut untuk memilih opsi di mana Anda ingin menjalankan aplikasi Android Anda.

Sekarang untuk melihat lokasi pilih Get Location Button yang akan menampilkan informasi lokasi sebagai berikut –

Jika menampilkan dimap

 

 

pada map values

<resources>
<!–
TODO: Before you run your application, you need a Google Maps API key.

To get one, follow this link, follow the directions and press “Create” at the end:

https://console.developers.google.com/flows/enableapi?apiid=maps_android_backend&keyType=CLIENT_SIDE_ANDROID&r=F2:93:D6:E5:9D:FA:46:74:96:6A:EF:8A:45:C2:78:57:01:2C:AB:C9%3Bcom.latihanfirebase

You can also add your credentials to an existing key, using these values:

Package name:
F2:93:D6:E5:9D:FA:46:74:96:6A:EF:8A:45:C2:78:57:01:2C:AB:C9

SHA-1 certificate fingerprint:
F2:93:D6:E5:9D:FA:46:74:96:6A:EF:8A:45:C2:78:57:01:2C:AB:C9

Alternatively, follow the directions here:
https://developers.google.com/maps/documentation/android/start#get-key

Once you have your key (it starts with “AIza”), replace the “google_maps_key”
string in this file.
–>
<string name=”google_maps_key” templateMergeStrategy=”preserve” translatable=”false”>AIzaSyCFjfj4Vu50AuFdCBResVpiwNjElMRYhkw</string>
</resources>

 

download file presentasi

Referensi

https://www.tutorialspoint.com/android/android_location_based_services.htm

https://www.twoh.co/2014/08/03/membuat-aplikasi-location-based-services-di-android-menggunakan-maps-api-v2/