Saturday, March 19, 2016

Cara Menampilkan Lokasi Sekitar User Google Maps Android

Google Maps adalah sebuah peta navigasi milik google yang membantu si user (pengguna) mencari ,melihat  dan menemukan lokasi tempat tinggal dan tempat yang ingin dituju di seluruh dunia.Google Maps bukan hanya tersedia di Web , namun juga terdapat di Aplikasi mobile khususnya Android.Nah Google menyediakan sebuah API yang digunakan untuk para developer Android , mengembangkan Aplikasi peta navigasi mereka yang disebut Google Maps API



Pada tutorial sebelumnya saya telah membahas, tutorial tentang bagaimana cara menampilkan Google Map API Android. Pada tutorial belajar android kali ini kita akan menggunakan salah satu fitur dari Google Maps API, yaitu  menampilkan area lokasi sekitar user (pengguna), yang ditandai dengan marker pada layar Google Maps. Sebelum memulai kalian harus baca terlebih dahulu tutorial sebelumnya :

1.Manifest 
Pertama pada project Android Studio kalian di folder manifest >AndroidManifest.xml

tambahkan user permission berikut ke dalam file AndroidManifest.xml

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


AndroidManifest.xml
DATA HOSTED WITH ♥ BY PASTEBIN.COM - DOWNLOAD RAW - SEE ORIGINAL
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3.           package="com.okedroid.googlemaps">
  4.     <!--
  5.          The ACCESS_COARSE/FINE_LOCATION permissions are not required to use
  6.          Google Maps Android API v2, but you must specify either coarse or fine
  7.          location permissions for the 'MyLocation' functionality.
  8.     -->
  9.     <uses-permission android:name="android.permission.INTERNET" />
  10.     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  11.     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
  12.     <application
  13.         android:allowBackup="true"
  14.         android:icon="@mipmap/ic_launcher"
  15.         android:label="@string/app_name"
  16.         android:supportsRtl="true"
  17.         android:theme="@style/AppTheme">
  18.         <!--
  19.              The API key for Google Maps-based APIs is defined as a string resource.
  20.              (See the file "res/values/google_maps_api.xml").
  21.              Note that the API key is linked to the encryption key used to sign the APK.
  22.              You need a different API key for each encryption key, including the release key that is used to
  23.              sign the APK for publishing.
  24.              You can define the keys for the debug and release targets in src/debug/and src/release/.
  25.         -->
  26.         <meta-data
  27.             android:name="com.google.android.geo.API_KEY"
  28.             android:value="@string/google_maps_key"/>
  29.         <activity
  30.             android:name=".MapsActivity"
  31.             android:label="@string/title_activity_maps">
  32.             <intent-filter>
  33.                 <action android:name="android.intent.action.MAIN"/>
  34.                 <category android:name="android.intent.category.LAUNCHER"/>
  35.             </intent-filter>
  36.         </activity>
  37.     </application>
  38. </manifest>


2.Layout
Setelah itu pada bagian file layout activity_maps.xml 

Pastikan baris intruksi( codingann) seperti ini :

activity_maps.xml 

DATA HOSTED WITH ♥ BY PASTEBIN.COM - DOWNLOAD RAW - SEE ORIGINAL
  1. <?xml version="1.0" encoding="utf-8"?><!--
  2.      Copyright (C) 2012 The Android Open Source Project
  3.      Licensed under the Apache License, Version 2.0 (the "License");
  4.      you may not use this file except in compliance with the License.
  5.      You may obtain a copy of the License at
  6.           http://www.apache.org/licenses/LICENSE-2.0
  7.      Unless required by applicable law or agreed to in writing, software
  8.      distributed under the License is distributed on an "AS IS" BASIS,
  9.      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10.      See the License for the specific language governing permissions and
  11.      limitations under the License.
  12. -->
  13. <!-- This can go anywhere in your layout (see other demos for some examples). -->
  14. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  15.              android:layout_width="match_parent"
  16.              android:layout_height="match_parent"
  17.              android:id="@+id/layout">
  18.     <fragment
  19.         android:id="@+id/map"
  20.         class="com.google.android.gms.maps.SupportMapFragment"
  21.         xmlns:android="http://schemas.android.com/apk/res/android"
  22.         android:layout_width="match_parent"
  23.         android:layout_height="match_parent" />
  24. </FrameLayout>


3. Activity

Pada file java MainActivity.java 

Salin  baris intruksi( codingann) di bawah:

MainActivity.java 

DATA HOSTED WITH ♥ BY PASTEBIN.COM - DOWNLOAD RAW - SEE ORIGINAL
  1. package com.okedroid.googlemaps;
  2. import android.Manifest;
  3. import android.content.Context;
  4. import android.content.pm.PackageManager;
  5. import android.location.Criteria;
  6. import android.location.Location;
  7. import android.location.LocationListener;
  8. import android.location.LocationManager;
  9. import android.location.LocationProvider;
  10. import android.support.v4.app.FragmentActivity;
  11. import android.os.Bundle;
  12. import android.util.Log;
  13. import com.google.android.gms.maps.CameraUpdateFactory;
  14. import com.google.android.gms.maps.GoogleMap;
  15. import com.google.android.gms.maps.OnMapReadyCallback;
  16. import com.google.android.gms.maps.SupportMapFragment;
  17. import com.google.android.gms.maps.model.BitmapDescriptorFactory;
  18. import com.google.android.gms.maps.model.CameraPosition;
  19. import com.google.android.gms.maps.model.CircleOptions;
  20. import com.google.android.gms.maps.model.LatLng;
  21. import com.google.android.gms.maps.model.Marker;
  22. import com.google.android.gms.maps.model.MarkerOptions;
  23. public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, LocationListener {
  24.     private GoogleMap mMap;
  25.     private LocationManager mLocationManager = null;
  26.     private String provider = null;
  27.     private Marker mCurrentPosition = null;
  28.     @Override
  29.     protected void onCreate(Bundle savedInstanceState) {
  30.         super.onCreate(savedInstanceState);
  31.         setContentView(R.layout.activity_maps);
  32.         // Obtain the SupportMapFragment and get notified when the map is ready to be used.
  33.         SupportMapFragment mapFragment = (SupportMapFragment)getSupportFragmentManager()
  34.                 .findFragmentById(R.id.map);
  35.         mapFragment.getMapAsync(this);
  36.     }
  37.     @Override
  38.     public void onMapReady(GoogleMap googleMap) {
  39.         mMap = googleMap;
  40.         mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
  41.         if (isProviderAvailable() && (provider != null)) {
  42.             locateCurrentPosition();
  43.         }
  44.     }
  45.     private void locateCurrentPosition() {
  46.         int status =getPackageManager().checkPermission(Manifest.permission.ACCESS_COARSE_LOCATION,
  47.                 getPackageName());
  48.         if (status == PackageManager.PERMISSION_GRANTED) {
  49.             Location location = mLocationManager.getLastKnownLocation(provider);
  50.             updateWithNewLocation(location);
  51.             //  mLocationManager.addGpsStatusListener(this);
  52.             long minTime = 5000;// ms
  53.             float minDist = 5.0f;// meter
  54.             mLocationManager.requestLocationUpdates(provider, minTime, minDist,
  55.                     this);
  56.         }
  57.     }
  58.     private boolean isProviderAvailable() {
  59.         mLocationManager = (LocationManager) getSystemService(
  60.                 Context.LOCATION_SERVICE);
  61.         Criteria criteria = new Criteria();
  62.         criteria.setAccuracy(Criteria.ACCURACY_COARSE);
  63.         criteria.setAltitudeRequired(false);
  64.         criteria.setBearingRequired(false);
  65.         criteria.setCostAllowed(true);
  66.         criteria.setPowerRequirement(Criteria.POWER_LOW);
  67.         provider = mLocationManager.getBestProvider(criteria, true);
  68.         if (mLocationManager
  69.                 .isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
  70.             provider = LocationManager.NETWORK_PROVIDER;
  71.             return true;
  72.         }
  73.         if (mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
  74.             provider = LocationManager.GPS_PROVIDER;
  75.             return true;
  76.         }
  77.         if (provider != null) {
  78.             return true;
  79.         }
  80.         return false;
  81.     }
  82.     private void updateWithNewLocation(Location location) {
  83.         if (location != null && provider != null) {
  84.             double lng = location.getLongitude();
  85.             double lat = location.getLatitude();
  86.             addBoundaryToCurrentPosition(lat, lng);
  87.             CameraPosition camPosition = new CameraPosition.Builder()
  88.                     .target(new LatLng(lat, lng)).zoom(10f).build();
  89.             if (mMap != null)
  90.                 mMap.animateCamera(CameraUpdateFactory
  91.                         .newCameraPosition(camPosition));
  92.         } else {
  93.             Log.d("Location error", "Something went wrong");
  94.         }
  95.     }
  96.     private void addBoundaryToCurrentPosition(double lat, double lang) {
  97.         MarkerOptions mMarkerOptions = new MarkerOptions();
  98.         mMarkerOptions.position(new LatLng(lat, lang));
  99.         mMarkerOptions.icon(BitmapDescriptorFactory
  100.                 .fromResource(R.drawable.marker));
  101.         mMarkerOptions.anchor(0.5f, 0.5f);
  102.         CircleOptions mOptions = new CircleOptions()
  103.                 .center(new LatLng(lat, lang)).radius(10000)
  104.                 .strokeColor(0x110000FF).strokeWidth(1).fillColor(0x110000FF);
  105.         mMap.addCircle(mOptions);
  106.         if (mCurrentPosition != null)
  107.             mCurrentPosition.remove();
  108.         mCurrentPosition = mMap.addMarker(mMarkerOptions);
  109.     }
  110.     @Override
  111.     public void onLocationChanged(Location location) {
  112.         updateWithNewLocation(location);
  113.     }
  114.     @Override
  115.     public void onProviderDisabled(String provider) {
  116.         updateWithNewLocation(null);
  117.     }
  118.     @Override
  119.     public void onProviderEnabled(String provider) {
  120.     }
  121.     @Override
  122.     public void onStatusChanged(String provider, int status, Bundle extras) {
  123.         switch (status) {
  124.             case LocationProvider.OUT_OF_SERVICE:
  125.                 break;
  126.             case LocationProvider.TEMPORARILY_UNAVAILABLE:
  127.                 break;
  128.             case LocationProvider.AVAILABLE:
  129.                 break;
  130.         }
  131.     }
  132. }


(i) Pada bagian  .fromResource(R.drawable.marker)); jika erorr bewarna merah pastikan kalian sudah menyiapkan marker lalu simpan di lokasi resource>drawable>marker.png

seperti pada gambar dibawah :

Lokasi Marker Gambar  Sekitar User Google Maps Android Studio
Lokasi Marker 

4. Menjalankan Aplikasi

Setelah semua selesai dibuat mari kita coba uji coba Aplikasinya

Dengan cara menjalankan Aplikasinya di Android Studio

Hasilnya kurang lebih akan tampak seperti ini :

Hasil Tampilan  Lokasi Sekitar User Google Maps Android
Hasil Tampilan  Lokasi Sekitar User Google Maps

No comments:

Post a Comment