Kamis, 10 April 2014

Session Initiation Protocol

Session Initiation Protocol (SIP) adalah protokol signaling komunikasi, banyak digunakan untuk mengendalikan multimedia sesi komunikasi seperti panggilan suara dan video melalui jaringan Internet Protocol (IP).

Protokol mendefinisikan pesan yang dikirim antara peers yang mengatur pembentukan, pemutusan hubungan dan unsur-unsur penting lainnya dari panggilan. SIP dapat digunakan untuk membuat, mengubah dan mengakhiri sesi yang terdiri dari satu atau beberapa media stream. SIP dapat digunakan untuk sesi dua partai (unicast) atau multipartai (multicast). Aplikasi SIP lainnya termasuk video conferencing, distribusi Streaming multimedia, pesan instan, informasi keberadaan, transfer file, fax over IP dan game online.

Awalnya dirancang oleh Henning Schulzrinne dan Mark Handley pada tahun 1996 , SIP telah dikembangkan dan dibakukan dalam RFC 3261 di bawah naungan Internet Engineering Task Force (IETF). Ini adalah sebuah protokol lapisan aplikasi yang dirancang untuk menjadi independen dari lapisan dasar transport; dapat berjalan pada Transmission Control Protocol (TCP), User Datagram Protocol (UDP) atau Streaming Control Transmission Protocol (SCTP ​​). Ini adalah protokol berbasis teks, menggabungkan berbagai elemen dari Hypertext Transfer Protocol (HTTP) dan Simple Mail transfer Protocol (SMTP).

SIP bekerja sama dengan beberapa protokol lapisan aplikasi lain yang mengidentifikasi dan membawa media sesi. Identifikasi dan negosiasi Media dicapai dengan Session Description Protocol (SDP). Untuk transmisi media stream (voice, video) SIP biasanya mempekerjakan Real-time Transport Protocol (RTP) atau Secure Real-time Transport Protocol (SRTP). Untuk transmisi aman dari pesan SIP, protokol dapat dienkripsi dengan Transport Layer Security (TLS).

Android menyediakan API yang mendukung Session Initiation Protocol (SIP). Ini memungkinkan Anda menambahkan fitur telepon internet berbasis SIP untuk aplikasi Anda. Android mencakup SIP stack protokol penuh dan layanan panggilan manajemen terpadu yang memungkinkan aplikasi dengan mudah mengatur panggilan suara keluar dan masuk, tanpa harus mengelola sesi, komunikasi transportasi-tingkat, atau merekam audio atau pemutaran langsung.

Berikut adalah contoh dari jenis aplikasi yang mungkin menggunakan SIP API:


  • Video conferencing. 
  • Instant messaging.


Applications
Pasar untuk konsumen perangkat SIP terus berkembang; ada banyak perangkat seperti SIP Terminal Adapter, SIP Gateway, dan layanan SIP Trunking menyediakan pengganti untuk saluran telepon ISDN.

Banyak perusahaan telepon VoIP memungkinkan pelanggan untuk menggunakan perangkat SIP mereka sendiri, seperti telepon set SIP-capable, atau softphones.

Kamera video surveillance SIP-enabled dapat membuat panggilan untuk mengingatkan pemilik atau operator pada suatu peristiwa yang telah terjadi; misalnya, untuk memberitahu gerak yang telah terdeteksi out-of-hours di kawasan lindung.


SIP digunakan dalam audio over IP untuk aplikasi penyiaran yang mana ia menyediakan sarana interoperable untuk audio interface dari produsen yang berbeda untuk membuat koneksi dengan satu sama lain.


Membuat Manifest
Jika Anda mengembangkan sebuah aplikasi yang menggunakan SIP API, ingat bahwa fitur ini hanya didukung pada Android 2.3 (API level 9) dan versi yang lebih tinggi dari platform. Juga, di antara perangkat yang menjalankan Android (level API 9) 2.3 atau lebih tinggi, tidak semua perangkat akan menawarkan dukungan SIP.

Untuk menggunakan SIP, tambahkan hak akses berikut untuk mewujudkan aplikasi Anda:
  • android.permission.USE_SIP
  • android.permission.INTERNET
Untuk memastikan bahwa aplikasi Anda hanya dapat diinstal pada perangkat yang mampu mendukung SIP, tambahkan berikut ini untuk mewujudkan aplikasi Anda:
<uses-sdk android:minSdkVersion="9" />Hal ini menunjukkan bahwa aplikasi Anda membutuhkan Android 2.3 atau lebih tinggi. Untuk informasi lebih lanjut, lihat Tingkat API dan dokumentasi untuk elemen <uses-sdk>.

Untuk mengontrol bagaimana aplikasi Anda disaring dari perangkat yang tidak mendukung SIP (misalnya, di Google Play), tambahkan berikut ini untuk mewujudkan aplikasi Anda:
<uses-feature android:name="android.hardware.sip.voip" />
Hal ini menyatakan bahwa aplikasi Anda menggunakan SIP API. Deklarasi tersebut harus mencakup android: atribut yang diperlukan yang menunjukkan apakah Anda ingin aplikasi yang akan disaring dari perangkat yang tidak menawarkan dukungan SIP. Deklarasi <uses-feature> lainnya mungkin juga diperlukan, tergantung pada implementasi Anda. Untuk informasi lebih lanjut, lihat dokumentasi untuk elemen <uses-feature>.

Jika aplikasi Anda dirancang untuk menerima panggilan, Anda juga harus menentukan penerima (BroadcastReceiver subclass) di manifest aplikasi:

  • <receiver android:name=".IncomingCallReceiver" android:label="Call Receiver"/>
Berikut adalah kutipan dari manifest SipDemo:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.android.sip">
  ...
     <receiver android:name=".IncomingCallReceiver" android:label="Call Receiver"/>
  ...
  <uses-sdk android:minSdkVersion="9" />
  <uses-permission android:name="android.permission.USE_SIP" />
  <uses-permission android:name="android.permission.INTERNET" />
  ...
  <uses-feature android:name="android.hardware.sip.voip" android:required="true" />
  <uses-feature android:name="android.hardware.wifi" android:required="true" />
  <uses-feature android:name="android.hardware.microphone" android:required="true" />
</manifest>

Membuat SipManager 
Untuk menggunakan SIP API, aplikasi Anda harus membuat objek SipManager. The SipManager mengurus berikut dalam aplikasi Anda:


  • Memulai sesi SIP. 
  • Memulai dan menerima panggilan. 
  • Mendaftarkan dan unregistering dengan penyedia SIP. 
  • Memverifikasi konektivitas sesi. 
  • Anda instantiate SipManager baru sebagai berikut:

public SipManager mSipManager = null;
...
if(mSipManager == null) {
    mSipManager = SipManager.newInstance(this);
}

Mendaftar SIP Server 
Sebuah aplikasi khas Android SIP melibatkan satu atau lebih pengguna, masing-masing memiliki account SIP. Dalam sebuah aplikasi Android SIP, setiap account SIP diwakili oleh objek SipProfile.

A SipProfile mendefinisikan profil SIP, termasuk account SIP, dan domain dan informasi server. Profil yang terkait dengan akun SIP pada perangkat menjalankan aplikasi yang disebut profil lokal. Profil yang sesi terhubung ke disebut profil sebaya. Ketika Anda log aplikasi SIP ke server SIP dengan SipProfile lokal, ini secara efektif register perangkat sebagai lokasi untuk mengirim SIP panggilan ke alamat SIP Anda.

Bagian ini menunjukkan cara membuat SipProfile, mendaftar dengan server SIP, dan melacak acara pendaftaran.

Anda membuat objek SipProfile sebagai berikut:
public SipProfile mSipProfile = null;
...
SipProfile.Builder builder = new SipProfile.Builder(username, domain);
builder.setPassword(password);
mSipProfile = builder.build();
Kode berikut kutipan membuka profil lokal untuk membuat panggilan dan / atau menerima panggilan SIP generik. Penelepon dapat membuat panggilan berikutnya melalui mSipManager.makeAudioCall. Kutipan ini juga menetapkan android.SipDemo.INCOMING_CALL tindakan, yang akan digunakan oleh filter maksud bila perangkat menerima panggilan (lihat Menyiapkan filter niat untuk menerima panggilan). Ini adalah langkah pendaftaran:
Intent intent = new Intent();
intent.setAction("android.SipDemo.INCOMING_CALL");
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, Intent.FILL_IN_DATA);
mSipManager.open(mSipProfile, pendingIntent, null);
Akhirnya, kode ini menetapkan SipRegistrationListener pada SipManager. Ini trek apakah SipProfile berhasil terdaftar penyedia layanan SIP Anda:
mSipManager.setRegistrationListener(mSipProfile.getUriString(), new SipRegistrationListener() {
public void onRegistering(String localProfileUri) {
    updateStatus("Registering with SIP Server...");
}
public void onRegistrationDone(String localProfileUri, long expiryTime) {
    updateStatus("Ready");
}
   public void onRegistrationFailed(String localProfileUri, int errorCode,
    String errorMessage) {
    updateStatus("Registration failed.  Please check settings.");
}
Bila aplikasi Anda dilakukan dengan menggunakan profil, harus menutupnya untuk membebaskan benda-benda yang terkait ke dalam memori dan unregister perangkat dari server. Sebagai contoh:
public void closeLocalProfile() {
    if (mSipManager == null) {
       return;
    }
    try {
       if (mSipProfile != null) {
          mSipManager.close(mSipProfile.getUriString());
       }
     } catch (Exception ee) {
       Log.d("WalkieTalkieActivity/onDestroy", "Failed to close local profile.", ee);
     }
}

Membuat Panggilan Audio 
Untuk membuat panggilan audio, Anda harus memiliki berikut ini:


  • Sebuah SipProfile yang membuat panggilan ("profil lokal"), dan alamat SIP yang valid untuk menerima panggilan ("profil peer"). 
  • Sebuah benda SipManager. 

Untuk membuat panggilan audio, Anda harus menyiapkan SipAudioCall.Listener. Sebagian besar interaksi klien dengan SIP tumpukan terjadi melalui pendengar. Dalam potongan ini, Anda melihat bagaimana SipAudioCall.Listener menetapkan hal-hal setelah panggilan didirikan:
SipAudioCall.Listener listener = new SipAudioCall.Listener() {
  
   @Override
   public void onCallEstablished(SipAudioCall call) {
      call.startAudio();
      call.setSpeakerMode(true);
      call.toggleMute();
         ...
   }
   
   @Override
   public void onCallEnded(SipAudioCall call) {
      // Do something.
   }
};
Setelah Anda menyiapkan SipAudioCall.Listener, Anda dapat membuat panggilan. The SipManager Metode makeAudioCall mengambil parameter berikut:


  • Sebuah profil SIP lokal (pemanggil). 
  • Sebuah profil rekan SIP (user yang dipanggil). 
  • Sebuah SipAudioCall.Listener untuk mendengarkan peristiwa panggilan dari SipAudioCall. Hal ini dapat null, tapi seperti yang ditunjukkan di atas, pendengar digunakan untuk mengatur hal-hal begitu panggilan didirikan. 
  • Nilai timeout, dalam hitungan detik. 

Sebagai contoh:
 call = mSipManager.makeAudioCall(mSipProfile.getUriString(), sipAddress, listener, 30);

Menerima Panggilan
Untuk menerima panggilan, aplikasi SIP harus menyertakan subclass dari BroadcastReceiver yang memiliki kemampuan untuk menanggapi maksud menunjukkan bahwa ada panggilan masuk. Dengan demikian, Anda harus melakukan hal berikut dalam aplikasi Anda:


  • Dalam AndroidManifest.xml , menyatakan <receiver>. Dalam SipDemo, ini <receiver android:name=".IncomingCallReceiver" android:label="Call Receiver"/>.
  • Melaksanakan penerima , yang merupakan subclass dari BroadcastReceiver . Dalam SipDemo, ini adalah IncomingCallReceiver.
  • Inisialisasi profil lokal ( SipProfile ) dengan maksud tertunda bahwa kebakaran receiver Anda ketika seseorang panggilan profil lokal.
  • Mengatur filter yang menyaring dengan maksud aksi yang mewakili panggilan masuk. Dalam SipDemo, tindakan ini adalah android.SipDemo.INCOMING_CALL.

Subclassing BroadcastReceiver
Untuk menerima panggilan, aplikasi SIP Anda harus subclass BroadcastReceiver. Sistem Android menangani panggilan SIP masuk dan siaran yang "masuk panggilan" niat (seperti yang didefinisikan oleh aplikasi) ketika menerima panggilan. Berikut adalah kode BroadcastReceiver subclassed dari SipDemo. Untuk melihat contoh lengkap, pergi ke SipDemo sampel, yang termasuk dalam sampel SDK. Untuk informasi tentang men-download dan menginstal sampel SDK, lihat Mendapatkan Sampel.
/*** Listens for incoming SIP calls, intercepts and hands them off to WalkieTalkieActivity.
 */
public class IncomingCallReceiver extends BroadcastReceiver {
    /**
     * Processes the incoming call, answers it, and hands it over to the
     * WalkieTalkieActivity.
     * @param context The context under which the receiver is running.
     * @param intent The intent being received.
     */
    @Override
    public void onReceive(Context context, Intent intent) {
        SipAudioCall incomingCall = null;
        try {
            SipAudioCall.Listener listener = new SipAudioCall.Listener() {
                @Override
                public void onRinging(SipAudioCall call, SipProfile caller) {
                    try {
                        call.answerCall(30);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            };
            WalkieTalkieActivity wtActivity = (WalkieTalkieActivity) context;
            incomingCall = wtActivity.mSipManager.takeAudioCall(intent, listener);
            incomingCall.answerCall(30);
            incomingCall.startAudio();
            incomingCall.setSpeakerMode(true);
            if(incomingCall.isMuted()) {
                incomingCall.toggleMute();
            }
            wtActivity.call = incomingCall;
            wtActivity.updateStatus(incomingCall);
        } catch (Exception e) {
            if (incomingCall != null) {
                incomingCall.close();
            }
        }
    }
}

Menyiapkan filter untuk menerima panggilan 
Ketika layanan SIP menerima panggilan baru, ia akan mengirimkan dengan maksud tindakan string yang disediakan oleh aplikasi. Dalam SipDemo, aksi string ini adalah android.SipDemo.INCOMING_CALL.

Kutipan kode dari SipDemo ini menunjukkan bagaimana objek SipProfile akan dibuat dengan maksud tertunda didasarkan pada tindakan tali android.SipDemo.INCOMING_CALL. Objek PendingIntent akan melakukan broadcast ketika SipProfile menerima panggilan:
public SipManager mSipManager = null;
public SipProfile mSipProfile = null;
...
Intent intent = new Intent(); 
intent.setAction("android.SipDemo.INCOMING_CALL"); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, Intent.FILL_IN_DATA); 
mSipManager.open(mSipProfile, pendingIntent, null);
Siaran akan dicegat oleh maksud filter, yang kemudian akan api penerima (IncomingCallReceiver). Anda dapat menentukan filter niat dalam file manifest aplikasi Anda, atau melakukannya dalam kode seperti di OnCreate () metode sampel aplikasi SipDemo Kegiatan aplikasi:
public class WalkieTalkieActivity extends Activity implements View.OnTouchListener {
...
    public IncomingCallReceiver callReceiver;
    ...

    @Override
    public void onCreate(Bundle savedInstanceState) {

       IntentFilter filter = new IntentFilter();
       filter.addAction("android.SipDemo.INCOMING_CALL");
       callReceiver = new IncomingCallReceiver();
       this.registerReceiver(callReceiver, filter);
       ...
    }
    ...
}

Testing Aplikasi SIP 
Untuk menguji aplikasi SIP, Anda memerlukan berikut ini:

  • Sebuah perangkat mobile yang menjalankan Android 2.3 atau lebih tinggi. SIP berjalan lebih nirkabel, sehingga Anda harus menguji pada perangkat yang sebenarnya. Pengujian pada AVD tidak akan bekerja. 
  • Sebuah account SIP. Ada banyak penyedia SIP yang berbeda yang menawarkan account SIP. 
  • Jika Anda menempatkan panggilan, itu juga harus ke account SIP yang valid. 

Untuk menguji aplikasi SIP:

  1. Pada perangkat Anda, terhubung ke wireless (Settings> Wireless & networks> Wi-Fi> Setelan Wi-Fi) 
  2. Mengatur perangkat mobile Anda untuk pengujian, seperti yang dijelaskan dalam Mengembangkan pada Device a. 
  3. Jalankan aplikasi Anda pada perangkat mobile Anda, seperti yang dijelaskan dalam Mengembangkan pada Device a. 
  4. Jika Anda menggunakan Eclipse, Anda dapat melihat output log aplikasi di Eclipse menggunakan LogCat (Window> Show View> Lainnya> Android> LogCat).


Sumber: http://developer.android.com/guide/topics/connectivity/sip.html

Jumat, 28 Maret 2014

Cara Membuat Aplikasi GPS pada Android Menggunakan Google Maps

Google Maps adalah salah satu dari banyak paket aplikasi dengan platform Android. Selain hanya menggunakan aplikasi Maps, Anda juga dapat menanamkan ke dalam aplikasi Anda sendiri dan membuatnya melakukan beberapa hal yang sangat keren. Pada artikel ini, saya akan menunjukkan cara menggunakan Google Maps dalam aplikasi Android Anda dan bagaimana pemrograman melakukan hal berikut:

  • Mengubah pandangan Google Maps 
  • Mendapatkan garis lintang dan bujur lokasi di Google Maps
Membuat Proyek
Menggunakan Eclipse, membuat proyek dan nama GoogleMaps Android baru seperti yang ditunjukkan pada Gambar 1.

Gambar 1 Membuat proyek yang baru menggunakan Eclipse


Memperoleh Maps API key
Dimulai dengan Android SDK, Anda perlu mengajukan permohonan untuk Google Maps API key gratis sebelum Anda dapat mengintegrasikan Google Maps ke dalam aplikasi Android Anda. Untuk menerapkan kunci, Anda harus mengikuti serangkaian langkah-langkah yang dijelaskan di bawah. Anda juga dapat merujuk ke dokumentasi rinci Google pada proses di  http://code.google.com/android/toolbox/apis/mapkey.html.

Pertama , jika Anda menguji aplikasi pada emulator Android, cari SDK debug certificate terletak di folder default " C : \ Documents and Settings \ <username> \ Local Settings \ Application Data \ Android ". Nama file dari keystore debug debug.keystore. Untuk menyebarkan ke perangkat Android nyata, mengganti file debug.keystore dengan berkas keystore Anda sendiri.
Untuk mempermudah, copy file ini ( debug.keystore ) ke folder di C : \ ( misalnya, membuat sebuah folder bernama " C : \ Android " ) .

Menggunakan keystore debug, Anda perlu untuk mengambil MD5 finger print menggunakan aplikasi Keytool.exe disertakan dengan instalasi JDK Anda. Sidik jari ini diperlukan untuk mengajukan permohonan Google Maps key gratis. Anda biasanya dapat menemukan Keytool.exe dari folder " C : \ Program Files \ Java \ <JDK_version_number> \ bin ".

Mengeluarkan perintah berikut ( lihat juga Gambar 2 ) untuk mengekstrak fingerprint MD5.

keytool.exe -list -alias androiddebugkey -keystore "C:\android\debug.keystore" -storepass android -keypass android


copy MD5 finger print certificate dan arahkan web browser Anda ke: http://code.google.com/android/maps-api-signup.html. Ikuti petunjuk pada halaman tersebut untuk melengkapi aplikasi dan dapatkan kunci Google Maps.

Gambar 2 Mendapatkan MD5 finger print dari debug keystore 
Untuk menggunakan Google Maps dalam aplikasi Android Anda, Anda perlu memodifikasi file AndroidManifest.xml Anda dengan menambahkan elemen <uses-library> bersama-sama dengan izin INTERNET:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="net.learn2develop.GoogleMaps"
      android:versionCode="1"
      android:versionName="1.0.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
 
    <uses-library android:name="com.google.android.maps" />  
 
        <activity android:name=".MapsActivity"
                  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>
 
    <uses-permission android:name="android.permission.INTERNET" />
 
</manifest>
</xml>

Menampilkan Map
Untuk menampilkan Google Maps dalam aplikasi Android Anda, modifikasi file main.xml yang terletak di folder res / layout. Anda harus menggunakan elemen <com.google.android.maps.MapView> untuk menampilkan Google Maps dalam aktivitas Anda. Selain itu, mari kita gunakan elemen <RelativeLayout> posisi peta dalam activity:

package net.learn2develop.GoogleMaps;
 
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import android.os.Bundle;
 
public class MapsActivity extends MapActivity 
{    
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
 
    @Override
    protected boolean isRouteDisplayed() {
        return false;
    }
}
Perhatikan bahwa jika class Anda memperluas class MapActivity, Anda perlu mengganti metode isRouteDisplayed (). Anda hanya dapat melakukannya dengan menetapkan metode untuk return false. 

Itu saja! Itu saja yang perlu Anda lakukan untuk menampilkan Google Maps dalam aplikasi Anda. Tekan F11 di Eclipse untuk menyebarkan aplikasi ke sebuah emulator Android. Gambar 3 menunjukkan peta Google dalam segala kemuliaan.

Gambar 3 Google Maps dalam aplikasi anda
Pada saat ini, perhatikan beberapa rincian pemecahan masalah. Jika program Anda tidak berjalan (yaitu crash), maka kemungkinan Anda lupa untuk menempatkan pernyataan berikut dalam file AndroidManifest.xml Anda:

    <uses-library android:name="com.google.android.maps" />
Jika aplikasi Anda berhasil memuat tetapi Anda tidak dapat melihat peta (semua yang Anda lihat adalah grid), maka sangat mungkin Anda tidak memiliki kunci Peta yang valid, atau bahwa Anda tidak menentukan izin INTERNET:

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

Menampilkan Zoom View
Bagian sebelumnya menunjukkan bagaimana Anda dapat menampilkan Google Maps pada perangkat Android Anda. Anda dapat menarik peta untuk setiap lokasi yang diinginkan dan akan diperbarui dengan cepat. Namun, amati bahwa tidak ada cara untuk memperbesar atau memperkecil suatu lokasi tertentu. Dengan demikian, dalam bagian ini, Anda akan belajar bagaimana Anda dapat membiarkan pengguna tampilannya masuk atau keluar dari peta.

Pertama, tambahkan elemen <LinearLayout> ke file main.xml seperti berikut:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent">
 
    <com.google.android.maps.MapView 
        android:id="@+id/mapView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:enabled="true"
        android:clickable="true"
        android:apiKey="0l4sCTTyRmXTNo7k8DREHvEaLar2UmHGwnhZVHQ"
        />
 
    <LinearLayout android:id="@+id/zoom" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_alignParentBottom="true" 
        android:layout_centerHorizontal="true" 
        /> 
 
</RelativeLayout>
Anda akan menggunakan elemen <LinearLayout> untuk memegang dua kontrol zoom di Google Maps (Anda akan melihat ini segera). 

Dalam file MapsActivity.java, tambahkan impor berikut:

import com.google.android.maps.MapView.LayoutParams;  
import android.view.View;
import android.widget.LinearLayout;
dan tambahkan kode berikut setelah baris setContentView (R.layout.main);

        mapView = (MapView) findViewById(R.id.mapView);
        LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom);  
        View zoomView = mapView.getZoomControls(); 
 
        zoomLayout.addView(zoomView, 
            new LinearLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, 
                LayoutParams.WRAP_CONTENT)); 
        mapView.displayZoomControls(true);
File MapsActivity.java lengkap diberikan di bawah ini:

package net.learn2develop.GoogleMaps;
 
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.MapView.LayoutParams;  
 
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;
 
public class MapsActivity extends MapActivity 
{    
    MapView mapView; 
 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
 
        mapView = (MapView) findViewById(R.id.mapView);
        LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom);  
        View zoomView = mapView.getZoomControls(); 
 
        zoomLayout.addView(zoomView, 
            new LinearLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, 
                LayoutParams.WRAP_CONTENT)); 
        mapView.displayZoomControls(true);
 
    }
 
    @Override
    protected boolean isRouteDisplayed() {
        // TODO Auto-generated method stub
        return false;
    }
}

Pada dasarnya, Anda mendapatkan contoh MapView tentang activity, mendapatkan kontrol zoom dan kemudian menambahkannya ke elemen LinearLayout Anda tambahkan ke aktivitas sebelumnya. Dalam kasus di atas, kontrol zoom akan ditampilkan di bagian bawah layar. Bila Anda sekarang tekan F11 di Eclipse, Anda akan melihat kontrol zoom ketika Anda menyentuh peta (lihat Gambar 4).

Gambar 4 Menggunakan kontrol zoom di Google Maps
Menggunakan kontrol zoom, Anda dapat memperbesar atau keluar dari lokasi hanya dengan menyentuh tombol "+" atau "-" pada layar. 

Atau, Anda juga bisa memrograma memperbesar atau keluar dari peta menggunakan Zoomin () dan zoomOut () metode dari kelas MapController:

package net.learn2develop.GoogleMaps;
 
//...
import android.os.Bundle;
import android.view.KeyEvent;
 
public class MapsActivity extends MapActivity 
{    
    MapView mapView; 
 
    public boolean onKeyDown(int keyCode, KeyEvent event) 
    {
        MapController mc = mapView.getController(); 
        switch (keyCode) 
        {
            case KeyEvent.KEYCODE_3:
                mc.zoomIn();
                break;
            case KeyEvent.KEYCODE_1:
                mc.zoomOut();
                break;
        }
        return super.onKeyDown(keyCode, event);
    }    
 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        //...
    }
 
    @Override
    protected boolean isRouteDisplayed() {
        // TODO Auto-generated method stub
        return false;
    }
}
Dalam kode di atas, bila pengguna menekan angka 3 pada keyboard peta akan memperbesar ke tingkat berikutnya. Menekan nomor 1 akan memperkecil satu tingkat.

Mengubah View Map
Secara default, Google Maps akan menampilkan dalam mode peta. Jika Anda ingin menampilkan peta dalam tampilan satelit, Anda dapat menggunakan setSatellite () metode class MapView, seperti ini:

   mapView.setSatellite(true);
Anda juga dapat menampilkan peta dalam tampilan jalan, menggunakan setStreetView (metode):

   mapView.setStreetView(true);

Gambar 5 menunjukkan Google Maps ditampilkan dalam tampilan satelit dan jalan.

Gambar 5 Menampilkan Google Maps dalam pandangan satelit dan jalan

Menampilkan lokasi Tertentu
Menjadi default, Google Maps menampilkan peta Amerika Serikat ketika pertama kali dimuat. Namun, Anda juga dapat mengatur Google Maps untuk menampilkan lokasi tertentu. Dalam hal ini, Anda dapat menggunakan animateTo() metode class MapController.

Kode berikut menunjukkan bagaimana hal ini dilakukan:

package net.learn2develop.GoogleMaps;
 
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.MapView.LayoutParams;
 
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;
 
public class MapsActivity extends MapActivity 
{    
    MapView mapView; 
    MapController mc;
    GeoPoint p;
 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        mapView = (MapView) findViewById(R.id.mapView);
        LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom);  
        View zoomView = mapView.getZoomControls(); 
 
        zoomLayout.addView(zoomView, 
            new LinearLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, 
                LayoutParams.WRAP_CONTENT)); 
        mapView.displayZoomControls(true);
 
        mc = mapView.getController();
        String coordinates[] = {"1.352566007", "103.78921587"};
        double lat = Double.parseDouble(coordinates[0]);
        double lng = Double.parseDouble(coordinates[1]);
 
        p = new GeoPoint(
            (int) (lat * 1E6), 
            (int) (lng * 1E6));
 
        mc.animateTo(p);
        mc.setZoom(17); 
        mapView.invalidate();
    }
 
    @Override
    protected boolean isRouteDisplayed() {
        // TODO Auto-generated method stub
        return false;
    }
}
Dalam kode di atas, Anda pertama kali mendapatkan controller dari contoh MapView dan menetapkan ke objek MapController (mc). Anda menggunakan objek GeoPoint untuk mewakili lokasi geografis. Perhatikan bahwa untuk kelas ini garis lintang dan bujur dari lokasi diwakili dalam derajat mikro. Ini berarti bahwa mereka disimpan sebagai nilai-nilai integer. Untuk nilai lintang 40.747778, Anda perlu kalikan dengan 1E6 untuk memperoleh 40.747.778. 

Untuk menavigasi peta untuk lokasi tertentu, Anda dapat menggunakan animateTo () metode kelas MapController (sebuah contoh yang diperoleh dari objek MapView). The setZoom () metode memungkinkan Anda untuk menentukan tingkat zoom di mana peta ditampilkan. Gambar 6 menunjukkan Google Maps menampilkan peta Singapura.

Gambar 6 Menavigasi ke lokasi tertentu di peta
Ringkasan 
Pada artikel ini, kita telah belajar beberapa trik untuk Google Maps di Android. Menggunakan Google Maps, ada banyak proyek yang menarik yang Anda dapat kerjakan, seperti geo-tagging, geo-pelacakan, dll Jika Anda memiliki ide-ide keren untuk membangun layanan berbasis lokasi keren, berbagi dengan kami di kotak komentar di bawah ini. Have fun!