Minggu, 14 April 2013

Menampilkan Fitur Zoom, Compass dan MyLocation pada Google Map Android Versi 2


Kita teruskan belajar Android Google Map Android V2. Artikel ini lanjutan dari Artikel Membuat Aplikasi Peta dengan Google Map V2. Jika belum pernah membuat aplikasi dengan Android Google Map V2, disarankan untuk membacanya dahulu karena persiapan dan langkah-langkahnya cukup panjang, rumit dan melelahkan :).

Kali ini coba kita kembangkan Project artikel pertama tersebut dan memberi fitur My Locationm Zoom dan Compass. Fitur ini otomatis ada di Google Map Android V2 dan bisa diaktifkan atau dimatikan.

Pertama buat project Peta baru, kalau ingin cepat buka saja project dari artikel pertama sebelumnya. Kemudian pada activity_main.xml buat tampilan seperti ini :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >


    <fragment
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.google.android.gms.maps.SupportMapFragment"
        />
</RelativeLayout>

Kemudian pada MainActivity.java kita ketikkan program berikut :

package com.amijaya.googlemapv2;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.view.Menu;

//http://cariprogram.blogspot.com
//nuramijaya@gmail.com

public class MainActivity extends FragmentActivity {
final int RQS_GooglePlayServices = 1;
private GoogleMap myMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        FragmentManager myFragmentManager = getSupportFragmentManager();
        SupportMapFragment mySupportMapFragment = (SupportMapFragment)myFragmentManager.findFragmentById(R.id.map);
        myMap = mySupportMapFragment.getMap();
        
        LatLng jogja = new LatLng(-7.782939, 110.367050);
        MarkerOptions markerJogja = new MarkerOptions();
        markerJogja.position(jogja);
        markerJogja.title("Tugu Yogyakarta");
        markerJogja.snippet("Tugu Pusat Kota Yogyakarta");
        markerJogja.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
        
        myMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        //myMap.setMapType(GoogleMap.MAP_TYPE_NONE);
        //myMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        //myMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        //myMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
        //myMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
        
        myMap.addMarker(markerJogja);
        
        myMap.getUiSettings().setCompassEnabled(true);
        myMap.getUiSettings().setZoomControlsEnabled(true);
        myMap.getUiSettings().setMyLocationButtonEnabled(true);
        myMap.setMyLocationEnabled(true);
        myMap.setTrafficEnabled(true);
        //myMap.setIndoorEnabled(true);
        
        myMap.animateCamera(CameraUpdateFactory.newLatLngZoom(jogja, 15));
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
    
}

Terakhir pada AndroidManifest.xml tambahkan permission, setting dan jangan lupa masukkan API Key anda sehingga seperti ini :


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.amijaya.googlemapv2"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="16" />
    
    <permission
        android:name="com.amijaya.googlemapv2.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />
        
    <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <uses-feature android:glEsVersion="0x00020000"
        android:required="true" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AIz-Google-APi-Key-Anda" />
        <activity
            android:name="com.amijaya.googlemapv2.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Hasilnya :
Sebagai catatan Compass tidak akan keluar jika arah dari Peta di Device anda benar (dalam hal ini mengarah ke Utara). Jika arahnya melenceng dari Utara baru keluar. Dan Keluarnya kadang cukup lama. Harap bersabar :) Kemudian tanda MyLocation jika diklik akan menggeser peta ke tengan lokasi sesuai GPS. Oh ya jangan lupa mengaktifkan Internet dan GPS.


Project selengkapnya silakan didownload disini, di Google Drive, klik File - Download.

Semoga berguna:)