Generate QR code Menggunakan ZXing Library

0
5:22 AM
QR Code ( Quick Respon Code )

          QR Code adalah pengembangan dari Barcode yang diciptakan perusahaan Jepang, Denso-Wave tahun 1994. Tidak seperti barcode yang hanya satu sisinya saja yang mengandung data, QR Code mempunyai dua sisi yang berisi data, dan ini membuat QR Code lebih banyak memuat informasi dibandingkan bar code.
          QR Code digunakan untuk menyimpan data teks mengenai informasi produk atau hal lain, SMS, atau informasi kontak yang mengandung nama, nomor telepon, dan alamat.. Kelebihan lainnya dibandingkan barcode adalah kita tidak perlu mesin khusus untuk membaca QR Code.
       QR Code dapat dibaca hanya dengan menggunakan Handphone berkamera yang tentunya sudah diinstall Software QR Code reader , 

download file library di sini

1. buat project baru pada eclipse




2. Tentukan letak project


3. Tentukan icon



4. Tentukan metode create activity



5. Tentukan nama activity name



6. Hal hal yang perlu di perhatikan dalam aplikasi ini




7. Isi kan pada Android_Manifest.XML

<?xml version="1.0" encoding="utf-8"?>

 
    
 
 
 
    
        
            
                
 
                
            
        
    
 


8. isikan pada Activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

 
 
 
 
 
 
  
 
 
 
9.isikan pada QRCodeEncoder.java 

package com.example.qrcode_fariz_using_library;
 
import android.provider.ContactsContract;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.telephony.PhoneNumberUtils;
 
import java.util.Collection;
import java.util.EnumMap;
import java.util.HashSet;
import java.util.Map;
 
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
 
public final class QRCodeEncoder {
    private static final int WHITE = 0xFFFFFFFF;
    private static final int BLACK = 0xFF000000;
 
    private int dimension = Integer.MIN_VALUE;
    private String contents = null;
    private String displayContents = null;
    private String title = null;
    private BarcodeFormat format = null;
    private boolean encoded = false;
 
    public QRCodeEncoder(String data, Bundle bundle, String type, String format, int dimension) {
        this.dimension = dimension;
        encoded = encodeContents(data, bundle, type, format);
    }
 
    public String getContents() {
        return contents;
    }
 
    public String getDisplayContents() {
        return displayContents;
    }
 
    public String getTitle() {
        return title;
    }
 
    private boolean encodeContents(String data, Bundle bundle, String type, String formatString) {
        // Default to QR_CODE if no format given.
        format = null;
        if (formatString != null) {
            try {
                format = BarcodeFormat.valueOf(formatString);
            } catch (IllegalArgumentException iae) {
                // Ignore it then
            }
        }
        if (format == null || format == BarcodeFormat.QR_CODE) {
            this.format = BarcodeFormat.QR_CODE;
            encodeQRCodeContents(data, bundle, type);
        } else if (data != null && data.length() > 0) {
            contents = data;
            displayContents = data;
            title = "Text";
        }
        return contents != null && contents.length() > 0;
    }
 
    private void encodeQRCodeContents(String data, Bundle bundle, String type) {
        if (type.equals(Contents.Type.TEXT)) {
            if (data != null && data.length() > 0) {
                contents = data;
                displayContents = data;
                title = "Text";
            }
        } else if (type.equals(Contents.Type.EMAIL)) {
            data = trim(data);
            if (data != null) {
                contents = "mailto:" + data;
                displayContents = data;
                title = "E-Mail";
            }
        } else if (type.equals(Contents.Type.PHONE)) {
            data = trim(data);
            if (data != null) {
                contents = "tel:" + data;
                displayContents = PhoneNumberUtils.formatNumber(data);
                title = "Phone";
            }
        } else if (type.equals(Contents.Type.SMS)) {
            data = trim(data);
            if (data != null) {
                contents = "sms:" + data;
                displayContents = PhoneNumberUtils.formatNumber(data);
                title = "SMS";
            }
        } else if (type.equals(Contents.Type.CONTACT)) {
            if (bundle != null) {
                StringBuilder newContents = new StringBuilder(100);
                StringBuilder newDisplayContents = new StringBuilder(100);
 
                newContents.append("MECARD:");
 
                String name = trim(bundle.getString(ContactsContract.Intents.Insert.NAME));
                if (name != null) {
                    newContents.append("N:").append(escapeMECARD(name)).append(';');
                    newDisplayContents.append(name);
                }
 
                String address = trim(bundle.getString(ContactsContract.Intents.Insert.POSTAL));
                if (address != null) {
                    newContents.append("ADR:").append(escapeMECARD(address)).append(';');
                    newDisplayContents.append('\n').append(address);
                }
 
                Collection uniquePhones = new HashSet(Contents.PHONE_KEYS.length);
                for (int x = 0; x < Contents.PHONE_KEYS.length; x++) {
                    String phone = trim(bundle.getString(Contents.PHONE_KEYS[x]));
                    if (phone != null) {
                        uniquePhones.add(phone);
                    }
                }
                for (String phone : uniquePhones) {
                    newContents.append("TEL:").append(escapeMECARD(phone)).append(';');
                    newDisplayContents.append('\n').append(PhoneNumberUtils.formatNumber(phone));
                }
 
                Collection uniqueEmails = new HashSet(Contents.EMAIL_KEYS.length);
                for (int x = 0; x < Contents.EMAIL_KEYS.length; x++) {
                    String email = trim(bundle.getString(Contents.EMAIL_KEYS[x]));
                    if (email != null) {
                        uniqueEmails.add(email);
                    }
                }
                for (String email : uniqueEmails) {
                    newContents.append("EMAIL:").append(escapeMECARD(email)).append(';');
                    newDisplayContents.append('\n').append(email);
                }
 
                String url = trim(bundle.getString(Contents.URL_KEY));
                if (url != null) {
                    // escapeMECARD(url) -> wrong escape e.g. http\://zxing.google.com
                    newContents.append("URL:").append(url).append(';');
                    newDisplayContents.append('\n').append(url);
                }
 
                String note = trim(bundle.getString(Contents.NOTE_KEY));
                if (note != null) {
                    newContents.append("NOTE:").append(escapeMECARD(note)).append(';');
                    newDisplayContents.append('\n').append(note);
                }
 
                // Make sure we've encoded at least one field.
                if (newDisplayContents.length() > 0) {
                    newContents.append(';');
                    contents = newContents.toString();
                    displayContents = newDisplayContents.toString();
                    title = "Contact";
                } else {
                    contents = null;
                    displayContents = null;
                }
 
            }
        } else if (type.equals(Contents.Type.LOCATION)) {
            if (bundle != null) {
                // These must use Bundle.getFloat(), not getDouble(), it's part of the API.
                float latitude = bundle.getFloat("LAT", Float.MAX_VALUE);
                float longitude = bundle.getFloat("LONG", Float.MAX_VALUE);
                if (latitude != Float.MAX_VALUE && longitude != Float.MAX_VALUE) {
                    contents = "geo:" + latitude + ',' + longitude;
                    displayContents = latitude + "," + longitude;
                    title = "Location";
                }
            }
        }
    }
 
    public Bitmap encodeAsBitmap() throws WriterException {
        if (!encoded) return null;
 
        Map hints = null;
        String encoding = guessAppropriateEncoding(contents);
        if (encoding != null) {
            hints = new EnumMap(EncodeHintType.class);
            hints.put(EncodeHintType.CHARACTER_SET, encoding);
        }
        MultiFormatWriter writer = new MultiFormatWriter();
        BitMatrix result = writer.encode(contents, format, dimension, dimension, hints);
        int width = result.getWidth();
        int height = result.getHeight();
        int[] pixels = new int[width * height];
        // All are 0, or black, by default
        for (int y = 0; y < height; y++) {
            int offset = y * width;
            for (int x = 0; x < width; x++) {
                pixels[offset + x] = result.get(x, y) ? BLACK : WHITE;
            }
        }
 
        Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
        return bitmap;
    }
 
    private static String guessAppropriateEncoding(CharSequence contents) {
        // Very crude at the moment
        for (int i = 0; i < contents.length(); i++) {
            if (contents.charAt(i) > 0xFF) { return "UTF-8"; }
        }
        return null;
    }
 
    private static String trim(String s) {
        if (s == null) { return null; }
        String result = s.trim();
        return result.length() == 0 ? null : result;
    }
 
    private static String escapeMECARD(String input) {
        if (input == null || (input.indexOf(':') < 0 && input.indexOf(';') < 0)) { return input; }
        int length = input.length();
        StringBuilder result = new StringBuilder(length);
        for (int i = 0; i < length; i++) {
            char c = input.charAt(i);
            if (c == ':' || c == ';') {
                result.append('\\');
            }
            result.append(c);
        }
        return result.toString();
    }
}

10. isikan pada GenerateQRCodeActivity.java

package com.example.qrcode_fariz_using_library;
 
import com.google.zxing.BarcodeFormat;
import com.google.zxing.WriterException;
 
 
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Point;
import android.os.Bundle;
import android.util.Log;
import android.view.Display;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
 
public class GenerateQRCodeActivity extends Activity implements OnClickListener{
 
 private String LOG_TAG = "GenerateQRCode";
 
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
 
  Button button1 = (Button) findViewById(R.id.button1);
  button1.setOnClickListener(this);
 
 }
 
 public void onClick(View v) {
 
  switch (v.getId()) {
  case R.id.button1:
   EditText qrInput = (EditText) findViewById(R.id.qrInput);
   String qrInputText = qrInput.getText().toString();
   Log.v(LOG_TAG, qrInputText);
 
   //Find screen size
   WindowManager manager = (WindowManager) getSystemService(WINDOW_SERVICE);
   Display display = manager.getDefaultDisplay();
   Point point = new Point();
   display.getSize(point);
   int width = point.x;
   int height = point.y;
   int smallerDimension = width < height ? width : height;
   smallerDimension = smallerDimension * 3/4;
 
   //Encode with a QR Code image
   QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(qrInputText,
             null,
             Contents.Type.TEXT,  
             BarcodeFormat.QR_CODE.toString(),
             smallerDimension);
   try {
    Bitmap bitmap = qrCodeEncoder.encodeAsBitmap();
    ImageView myImage = (ImageView) findViewById(R.id.imageView1);
    myImage.setImageBitmap(bitmap);
 
   } catch (WriterException e) {
    e.printStackTrace();
   }
 
 
   break;
 
   // More buttons go here (if any) ...
 
  }
 }
 
}

11.isikan pada Contents.java

package com.example.qrcode_fariz_using_library;
 
import android.provider.ContactsContract;
 
public final class Contents {
    private Contents() {
    }
 
    public static final class Type {
         
     // Plain text. Use Intent.putExtra(DATA, string). This can be used for URLs too, but string
     // must include "http://" or "https://".
        public static final String TEXT = "TEXT_TYPE";
 
        // An email type. Use Intent.putExtra(DATA, string) where string is the email address.
        public static final String EMAIL = "EMAIL_TYPE";
 
        // Use Intent.putExtra(DATA, string) where string is the phone number to call.
        public static final String PHONE = "PHONE_TYPE";
 
        // An SMS type. Use Intent.putExtra(DATA, string) where string is the number to SMS.
        public static final String SMS = "SMS_TYPE";
 
         
  //  A contact. Send a request to encode it as follows:
  //  

// import android.provider.Contacts; //

// Intent intent = new Intent(Intents.Encode.ACTION); intent.putExtra(Intents.Encode.TYPE, // CONTACT); Bundle bundle = new Bundle(); bundle.putString(Contacts.Intents.Insert.NAME, // "Jenny"); bundle.putString(Contacts.Intents.Insert.PHONE, "8675309"); // bundle.putString(Contacts.Intents.Insert.EMAIL, "jenny@the80s.com"); // bundle.putString(Contacts.Intents.Insert.POSTAL, "123 Fake St. San Francisco, CA 94102"); // intent.putExtra(Intents.Encode.DATA, bundle); public static final String CONTACT = "CONTACT_TYPE"; // A geographic location. Use as follows: // Bundle bundle = new Bundle(); // bundle.putFloat("LAT", latitude); // bundle.putFloat("LONG", longitude); // intent.putExtra(Intents.Encode.DATA, bundle); public static final String LOCATION = "LOCATION_TYPE"; private Type() { } } public static final String URL_KEY = "URL_KEY"; public static final String NOTE_KEY = "NOTE_KEY"; // When using Type.CONTACT, these arrays provide the keys for adding or retrieving multiple // phone numbers and addresses. public static final String[] PHONE_KEYS = { ContactsContract.Intents.Insert.PHONE, ContactsContract.Intents.Insert.SECONDARY_PHONE, ContactsContract.Intents.Insert.TERTIARY_PHONE }; public static final String[] PHONE_TYPE_KEYS = { ContactsContract.Intents.Insert.PHONE_TYPE, ContactsContract.Intents.Insert.SECONDARY_PHONE_TYPE, ContactsContract.Intents.Insert.TERTIARY_PHONE_TYPE }; public static final String[] EMAIL_KEYS = { ContactsContract.Intents.Insert.EMAIL, ContactsContract.Intents.Insert.SECONDARY_EMAIL, ContactsContract.Intents.Insert.TERTIARY_EMAIL }; public static final String[] EMAIL_TYPE_KEYS = { ContactsContract.Intents.Insert.EMAIL_TYPE, ContactsContract.Intents.Insert.SECONDARY_EMAIL_TYPE, ContactsContract.Intents.Insert.TERTIARY_EMAIL_TYPE }; }


import kan file library 




Jalankan pada Emulator 





Baca SelengkapnyaGenerate QR code Menggunakan ZXing Library

0 komentar:

Session Initiation Protocol (SIP)

0
7:50 AM
SIP adalah peer-to-peer signaling protokol,dikembangkan oleh Internet Engineering TaskForce (IETF), yang mengijinkan endpoint-nya untuk memulai dan mengakhiri sessionkomunikasiProtokol ini didefinisikan pada RFC2543 dan menyertakan elemen protokol lain yang dikembangkan IETF, mencakup Hypertext Transfer Protokol (HTTP) yang diuraikan pada RFC 2068,Simple Mail Transfer Protokol (SMTP) yangdiuraikan pada RFC 2821, dan Session Description Protokol (SDP) yang diuraikan pada RFC 2327.
Arsitektur dari SIP terdiri dari dua komponen yaitu user agent dan servers. User agent merupakan endpoint dari sistem dan memuat dua sub sistem yaitu user agent client (UAC) yang membangkitkanrequests, dan user agent server (UAS) yangmerespon requests. SIP server adalah kesatuan fungsi logic, dimana tidak perlu memisahkan alat secara fisik. Fungsi dari empat server tersebut yaitu :


1. 
Proxy Server : merupakan host jaringan yang berperan sebagai server yang meroutingkan request ke tujuan dan juga membuat kebijakanseperti meyakinkan bahwa pemakai tertentu diijinkan untuk melakukan panggilan. Proxy harus bertindak sebagai server dan client, diaharus mengarahkan SIP request pada user agent server, dan mengarahkan SIP response pada user agent client.

2. 
Redirect Server: merupakan server logika yang mengarahkan suatu klien pada perangkat pengganti dari Uniform Resource Indicators(URIs) untuk menyelesaikan tugas request.

3. 
Registrar Server: menerima dan memproses pesan pendaftaran yang mengijinkan lokasi dari suatu end point dapat diketahui keberadaannya.

4. 
Location Server: menyediakan service untuk data base abstrak yangberfungsi mentranslasikan alamat dengan data  atau keterangan yang ada pada domain jaringan.

Format Messages pada SIP didefinisikandalam dua format :
  • request, dikirim dari client ke server, yang berisitentang operasi yang diminta oleh client tersebut.
  • responses, dikirim dari server ke client, yang berisiinformasi mengenai status dari apa yang dimintaoleh client.
Ada enam tipe dari request messages :
1. 
INVITE : menunjukan bahwa user atau service mengundang untuk bergabung dalam session.
2. 
ACK : mengkonfirmasi bahwa client telah menerima suatu final response
3. 
OPTION : digunakan untuk query suatu server tentang kemampuan yang dimilikinya.
4. 
BYE : dikirim oleh user agent client untuk mengakhiri session.
5. 
CANCEL : digunakan untuk membatalkansuatu request.
6. 
REGISTER : digunakan oleh client untuk mendaftarkan informasi kontak. Response messages berisi status kode dan keterangan tentang kondisi dari request tersebut.
Nilai-nilai dari kode status yang serupa dengan penggunaan pada HTTP, dibagi dalam enam katagori :
  1. 1xx: Provisional, request telah diterima dan sedang melanjutkan proses.
  2. 2xx: Success, tindakan dengan sukses diterima,dipahami dan disetujui.
  3. 3xx: Redirection, tindakan lebih lanjutdiperlukan untuk memproses permintaan ini.
  4. 4xx: Client Error, permintaan berisi sintak yang salah dan tidak bisa dikenali oleh server sehingga server tidak dapat memprosesnya.
  5. 5xx: Server Error, server gagal untuk memproses suatu permintaan yang sah.
  6. 6xx: Global Failure, permintaan tidak dapat dipenuhi oleh server manapun.

Protokol Yang Terlibat Dalam SIP
SIP menggabungkan beberapa macam protokol baik itu dari standar yang dikeluarkan oleh IETF sendiri maupun oleh ITU-T di antaranya:

- Session Description Protocol (SDP)
- Session Announcement Protocol (SAP)
- Real-Time Transport Protocol (RTP)
- Real-Time Control Protocol (RTCP)
- G.723.1, G711, G.728, dan G.729 untuk audio.
- Transmission Control Protocol (TCP)
- User Datagram Protocol (UDP)


Teknologi yang menggunakan SIP adalah Voice over Internet Protocol (juga disebut VoIP, IP Telephony, Internet telephony atau Digital Phone). VoIP adalah teknologi yang memungkinkan percakapan suara jarak jauh melalui media internet. Data suara diubah menjadi kode digital dan dialirkan melalui jaringan yang mengirimkan paket-paket data, dan bukan lewat sirkuit analog telepon biasa. Definisi VoIP adalah suara yang dikirim melalui protokol internet (IP).
Voice over IP telah diimplementasikan dalam berbagai macam jalan menggunakan hak milik dan standar serta protokol terbuka. Contoh protokol jaringan yang digunakan untuk mengimplementasikan VoIP meliputi:
-H.323
-Media Gateway Control Protocol (MGCP)
-Session Initiation Protocol (SIP)
-Real-time Transport Protocol (RTP)
-Session Description Protocol (SDP)
-Inter-Asterisk eXchange (IAX)

Protokol H.323 adalah salah satu dari Protokol VoIP yang penerapannya ditemukan secara luas untuk lalulintas jarak jauh, seperti layanan Jaringan Area Lokal (LAN). Namun, karena perkembangan baru, protokol yang lebih kompleks seperti MGCP dan SIP, H.323 penyebaran semakin terbatas untuk membawa jarak jauh yang ada lalu lintas jaringan. Secara khusus, Session Initiation Protocol (SIP) telah mendapatkan penetrasi pasar luas VoIP.





Penerapan VoIP dalam android

Beberapa aplikasi VoIP tersedia pada play store, beberapa di antaranya yang terkenal adalah aplikasi Skype, namun pada artikel ini kami mencoba berbagi kepada anda aplikasi lain selain Skype, sebuah aplikasi VoIP untuk android yang bernama viber.

Apa itu viber?


Viber adalah sebuah aplikasi berbasis VoIP yang cukup terkenal di kalangan pengguna iOS. Yang unik dari aplikasi ini, anda tidakperlu membuat account atau menambah teman, karena viber menggunakan nomor handphone anda sendiri. Selain itu, nomor teman yang anda simpan di kontak, akan otomatis tercantum pada kontak viber seperti halnya dengan whatsapp.


Kelebihan menggunakan viber :

1.Dapat mengirim pesan singkat (sms) yang tersusun dalam bentuk chat. 
2.Dapat menelepon pengguna viber lain dengan kualitas suara yang cukup baik dan jernih (tergantung koneksi jaringan yang anda dapatkan). 
3.Lebih ringan dan ramah sehingga tidak terlalu membebani kinerja system dan tidak terlalu menguras baterai. 
4.Kelebihan utama dari aplikasi ini adalah free alias gratis.

Dibanding messenger lain seperti Skype, GTalk,  atau Yahoo Messenger, Viber lah yang paling mendekati fitur sms dan telepon sesungguhnya. Yang membedakannya Viber menggunakan jaringan GSM atau 3G sebagai ganti pulsa utama yang sering dicap mahal oleh pihak operator.  Dengan paket internet yang cukup murah, anda sudah bisa menikmati layanan telekomunikasidengan menggunakan viber. Jika anda menggunakan dial up viber, maka viber akan otomatis terhubung, dan jika anda menggunakan dial up biasa, maka yang terhubung adalah fungsi telepon biasa.


Bagaimana cara menggunakan viber?

Penggunaan viber tidaklah terlalu sulit. Pada dasarnya sama seperti kita ingin menelepon atau sms seperti biasa. Jika teman anda menanyakanakun viber anda, maka anda cukup memberi nomor handphone anda karena nomor handphone anda adalah nomor viber anda.

Untuk menggunakannya, anda dapat mengikuti langkah-langkah berikut ini:

1.Download dan install aplikasi tersebut dari Google Play.
2.Masuk ke aplikasi viber dan klik continue 



3.Viber akan meminta akses ke kontakmu untuk mendapatkan list siapa saja teman anda yang menggunakan aplikasi ini atau dengan kata lain akan ter sync dengan kontak anda. Pada pilihan ini klik OK



4.Setelah itu pilih regional dan masukkan nomor handphone anda dan klik continue



5.Setelah itu klik approve untuk verifikasi nomor handphone anda via sms.



6.Setelah mendapat sms dari viber, kemudian masukkan 4 digit angka untuk aktifasi viber anda
7.Anda telah sukses terdaftar pada viber dan selamat menikmati fasilitas VoIP

Tambahan:
-Sebenarnya tidak 100% VoIP dikatakan gratis, namun lebih tepatnya lebih murah dibanding menggunakan cara konvensional, karena beberapa operator pada VoIP anda hanya memperkenankan agar anda membayar jalur data saja yang relatif murah

-Jika anda ingin mencoba aplikasi VoIP untuk android selain SKYPE dan VIBER anda dapat klik disini

Sumber :  
http://standardisasi.wordpress.com/2009/04/24/jaringan-sipsession-initiation-protocol/
http://maxiandroid.blogspot.com/2012_06_01_archive.html





Baca SelengkapnyaSession Initiation Protocol (SIP)

0 komentar:

Belajar Android - Membuat Marker dan Info Window di google map

0
3:03 AM
Pada tutorial sebelumnya kita telah mempelajari tentang Pengenalan Google Map di android,  selanjutnya kita akan mengobati rasa penasaran kita diakhir tutorial sebelumnya, sekarang mari kita belajar membuat marker dan infowindow di google map android.
Sebelum melangkah lebih jauh saya coba jelaskan definisi dari marker dan infowindow
Marker, kalau anda pernah pakai google map dan coba search suatu lokasi tentunya anda akan melihat tanda balon merah  kecil  pada map, nah itulah marker.  untuk marker selain gambar balon merah kecil, kita juga bisa menggunakan gambar lainnya, seperti misalnya untuk menandakan lokasi suatu toko, kita bisa gunakan gambar yang melambangkan toko.
Info Window, pada marker digoogle map cobalah and klik, maka akan mucul popup windoww kecil yang berisi informasi nama tempat tersebut dan alamatnya.  pada infowindow informasinya tidak harus nama dan alamat, tetapi juga bisa informasi lainnya.
Bagaimana sudah mengertikan apa itu marker dan infowindow ?
Sekarang kita kembali ke hobi kita coding. coding untuk membuat marker dan infowindow pada google map di android
1. Buka kembali project Belajar GoogleMap yang kita buat pada tutorial sebelumnya.
2. Siapkan gambar marker  yang akan kita gunakan, taruh filenya directory res/drawable, seperti telihat pada gambar dibawah
3. Buat Class baru dengan nama MapsOverlay dengan super class com.google.andorid.maps.ItemizedOverlay dan centangConstructors from superclass
package com.agus;

import java.util.ArrayList;

import android.content.Context;
import android.graphics.drawable.Drawable;

import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.OverlayItem;

public class MapsOverlay extends ItemizedOverlay {
	private ArrayList mOverlays = new ArrayList();
	private Context mContext ;
	public MapsOverlay(Drawable defaultMarker) {
		super(boundCenterBottom(defaultMarker));

		// TODO Auto-generated constructor stub
	}
	public MapsOverlay(Drawable defaultMarker, Context context) {
		  super(boundCenterBottom(defaultMarker));
		  mContext = context;
	}
	@Override
	protected OverlayItem createItem(int i) {
		// TODO Auto-generated method stub
		return mOverlays.get(i);
	}

	@Override
	public int size() {
		// TODO Auto-generated method stub
		return mOverlays.size();

	}

	public void addOverlay(OverlayItem overlay) {
	    mOverlays.add(overlay);
	    populate();
	}

}

Pada class MapsOverlay inilah yang akan membantu menangani menggambar sesuatu diatas map.
4. Untuk menampilkan / menggambar marker dimap, buka kembali class TampilkanMap.java pada baris akhirnya tambahkan kode berikut
List mapOverlays = mapView.getOverlays();
Drawable drawable = this.getResources().getDrawable(R.drawable.marker);
MapsOverlay itemizedoverlay = new MapsOverlay(drawable, this);
OverlayItem overlayitem = new OverlayItem(point, "Halo, Apa kabar!", "I'm in Jakarta!");
itemizedoverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedoverlay);
sehingga code pada TampilkanMap.java adalah sebagai berikut
package com.agus;

import java.util.List;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;

import android.graphics.drawable.Drawable;
import android.os.Bundle;

public class TampilkanMap extends MapActivity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        MapView mapView = (MapView) findViewById(R.id.mapView);
        mapView.setBuiltInZoomControls(true);
        double lat = -6.2532592788520005;
        double lng = 106.853239291777;
        GeoPoint point = new GeoPoint((int) (lat *1E6),(int) (lng * 1E6));
        mapView.getController().animateTo(point);
        mapView.getController().setZoom(15);
        List mapOverlays = mapView.getOverlays();
        Drawable drawable = this.getResources().getDrawable(R.drawable.marker);
        MapsOverlay itemizedoverlay = new MapsOverlay(drawable, this);
        OverlayItem overlayitem = new OverlayItem(point, "Halo, Apa Kabar!", "I'm in Jakarta!");
        itemizedoverlay.addOverlay(overlayitem);
        mapOverlays.add(itemizedoverlay);
    }

    @Override
    protected boolean isRouteDisplayed() {
        return false;
    }
}
Kemudian kita run project, hasilnya marker terlihat ada ditengah layar.
Marker sudah berhasil ditampilkan selanjutnya yang ingin kita buat adalah apabila marker diklik maka akan muncul info window yang berisi informasi dari marker tersebut.
5. Buka kembali class MapsOverlay.java, tambahkan satu method untuk menangkap marker yang diklik dan menampilkan informasi dari marker tersebut dalam bentuk dialog window
@Override
	protected boolean onTap(int index) {
	  OverlayItem item = mOverlays.get(index);
	  AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
	  dialog.setTitle(item.getTitle());
	  dialog.setMessage(item.getSnippet());
	  dialog.setPositiveButton("Close", new OnClickListener() {
			@Override
			public void onClick(DialogInterface arg0, int arg1) {
				arg0.dismiss();
			}
	    });
	  dialog.show();
	  return true;
	}
Kode lengkap untuk MapsOverlay.java adalah :
package com.agus;

import java.util.ArrayList;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.graphics.drawable.Drawable;
import android.widget.Toast;

import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.OverlayItem;

public class MapsOverlay extends ItemizedOverlay {
	private ArrayList mOverlays = new ArrayList();
	private Context mContext ;
	public MapsOverlay(Drawable defaultMarker) {
		super(boundCenterBottom(defaultMarker));

		// TODO Auto-generated constructor stub
	}

	public MapsOverlay(Drawable defaultMarker, Context context) {
		super(boundCenterBottom(defaultMarker));
		mContext = context;
	}
	@Override
	protected OverlayItem createItem(int i) {
		// TODO Auto-generated method stub
		return mOverlays.get(i);
	}

	@Override
	public int size() {
		// TODO Auto-generated method stub
		return mOverlays.size();

	}

	public void addOverlay(OverlayItem overlay) {
	    mOverlays.add(overlay);
	    populate();
	}

	@Override
	protected boolean onTap(int index) {
	  OverlayItem item = mOverlays.get(index);
	  AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
	  dialog.setTitle(item.getTitle());
	  dialog.setMessage(item.getSnippet());
	  dialog.setPositiveButton("Close", new OnClickListener() {
			@Override
			public void onClick(DialogInterface arg0, int arg1) {
				arg0.dismiss();
			}
	    });
	  dialog.show();
	  return true;
	}

}
Mari kita run lagi projectnya dan klik markernya,maka akan muncul infowindownya
Mudahkan membuat marker dengan infowindownya digoogle map. Contoh diataskan cuma satu marker, bagaiaman juga kita ingin menambah marker yang tampil. Tenang kode yang kita buat diatas sudah support untuk itu. Buka kembali class TampilkanMap.java sebelum code mapOverlays.add(itemizedoverlay); tambahkan code ini (koordinat baru yang akan diberi marker)
lat = -6.2432592788520005;
lng = 106.853239291777;
point = new GeoPoint((int) (lat *1E6),(int) (lng * 1E6));
overlayitem = new OverlayItem(point, "Halo, Juga!", "Saya di jakarta juga!");
itemizedoverlay.addOverlay(overlayitem);
Kalau kita run project kita hasilnya

Setelah belajar tutorial ini diharapkan para pembaca dapat membuat aplikasi android yang memanfaatkan GPS dan Google Map.
Baca SelengkapnyaBelajar Android - Membuat Marker dan Info Window di google map

0 komentar:

Belajar Android - Pengenalan Google Map

1
1:57 AM
Pada tutorial sebelumnya kita telah mempelajari tentang Mendapatkan koordinat dari GPS. Nah koordinat itu tidak akan berarti lebih apabila tidak kita tampilkan dalam MAP.  Untuk Android Map yang dipakai biasanya adalah Google MAP.
Agar Emulator kita dapat menampilkan MAP Google MAP ada beberapa hal yang harus dilakukan (saya ambi dari http://mobiforge.com/developing/story/using-google-maps-android) :
1. Pada Android SDK harus sudah terinstall Google APIs by Google Inc, Android API
2. Masih dari Android SDK, buat Android Virtual Device baru untuk yang kana digunakan untuk emulator yang memnggunakan Fitur Google API. Caranya, klik Virtual Device, lalu klik tombol New akan muncul jendela  “Create New Android Virtual Device”  Isikan seperti gambar dibawah, lalu klik Create AVD
3. Untuk memanfaat kan fitur Google Map ini, kita memerlukan Map API Key, tanpa ini kita tidak akan dapat menampilkan MAP di Android. Bagian inilah yang sering dilupakan, sehingga banyak yang bingung, mendapatkan Map nya tidak tampil.
4. Kalau anda pakai Windows XP cari file debug.keystore, biasanya terletak di directory C:\Documents and Settings\Local Settings\Application Data\Android
5. Copykan file debug.keystore ke directory c:\android
6. Kita buat MD5 FingerPrint dengan menggunakan command keytool.exe yang ada pada java SDK, biasanya terletak di “C:\Program Files\Java\\bin”
7. Dari command promt masuk kedirectory tesebut lalu jalankan ketikkan “keytool.exe -list -alias androiddebugkey -keystore "C:\android\debug.keystore" -storepass android -keypass android”lalu tekan enter
8. MD5 FingerPrint ini digunakan untuk membuat Key Goggle Map. Sekarang kita buka browser masuk ke “https://developers.google.com/maps/documentation/android/v1/maps-api-signup” ikuti petunjuk yang ada.
9. Selamat anda telah sukses mendapatkan Key Google Map. Simpanlah key ini. Jangan sampai hilang, karena akan kita pakai untuk develop menggunankan Google Map di android.
Persiapan Sudah selesai, sekarang kita masuk ke pembuatan Aplikasinya, berikut langkah langkahnya.
1. Seperti biasa, buat New Android Project
2. Pada saat project pertama kali dibuat ada 3 file penting yang langsung dibuat, yaitu
  • main.xml
  • string.xml
  • TampilkanMap.java
3. Edit file main.xml, ketikkan kode seperti dibawah ini
<?xml version="1.0" encoding="utf-8"?>


    


Disini untuk menampilkan MAPnya kita menggunakan tag com.google.android.maps.MapView sedangkan untuk Layoutnya adalah RelativeLayout. Untuk android:apiKey, isi dengan key Google Map yang telah kita buat tadi
4. Untuk dapat melakukan menampilan Map Google Map kita perlu menambahkan  com.google.android.maps dan  INTERNET nya melalui file AndroidManifest.xml , buka file AndroidManifest.xml lalu ketikkan seperti kode berikut
<?xml version="1.0" encoding="utf-8"?>

 
  
  
   
    
    
   
  

 
 
 

5. Edit file TampilkanMap.java dan ketikkan kode dibawah ini
package com.agus;

import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import android.os.Bundle;

public class TampilkanMap 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;
    }
}
Pada kode diatas class TampilkanMap meng extends class MapActivity, agar class ini dapat menampilkan map.
7. Sekarang mari kita coba run Project BelajarGoogleMap, maka hasilnya akan seperti ini
8. Horee, We can do that J, Alhamdulillah akhirnya MAPnya tampil. 9. Map diatas rasanya masih kurang karena belum ada tombol (navigasi) untuk pengaturan zoom view nya. Untuk itu tambahkan kode berikut pada baris terakhir method onCreate
MapView mapView = (MapView) findViewById(R.id.mapView); mapView.setBuiltInZoomControls(true);
Kalau kita run project kita sekarang, lalu kita klik salah satu bagian map, maka akan muncul zoom controlnya
10.  Kita dapat mengatur (map) peta mana yang ingin kita tampilkan dilayar caranya dengan menentukan koordianat latitude dan longitudenya. Untuk kodenya adalah
double lat = -6.2532592788520005; double lng = 106.853239291777; GeoPoint point = new GeoPoint((int) (lat *1E6),(int) (lng * 1E6)); mapView.getController().animateTo(point); mapView.getController().setZoom(15);
point adalah koordinat yang kita tentukan, mapView.getController().animateTo(point); akan membuat map yang ditampilkan adalah map yang koordinat dtitik tengahnya adalah point mapView.getController().setZoom(15); akan menset zoom level map nya adalah 15
Sehingga kode lengkap dari TampilkanMap.java adalah
package com.agus;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import android.os.Bundle;

public class TampilkanMap extends MapActivity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        MapView mapView = (MapView) findViewById(R.id.mapView);
        mapView.setBuiltInZoomControls(true);

        double lat = -6.2532592788520005;
        double lng = 106.853239291777;
        GeoPoint point = new GeoPoint((int) (lat *1E6),(int) (lng * 1E6));
        mapView.getController().animateTo(point);
        mapView.getController().setZoom(15);

    }

    @Override
    protected boolean isRouteDisplayed() {
        return false;
    }
}
sekarang mari kita run projectnya, maka tampilannya akan seperti ini
Sekarang yang muncul adalah peta jakarta, hal ini terjadi karena kita menset koordinat latitude dan langitudeny adalah salah satu titik lokasi dijakarta
Makin seru saja kan android, setelah berhasil dalam tutorial ini, tentunya kita makin semangat dan selanjutnya akan timbul pertanyaan Bagaimana cara membuat marker dan info window pada google map di android ? Untuk tutoial marker dan info window akan diposting pada tutorial selanjutnya.

Terima Kasih. :)

- andre -

Sumber : http://agusharyanto.net/wordpress/?p=269
Baca SelengkapnyaBelajar Android - Pengenalan Google Map

1 komentar: