Buku Panduan Android.pdf

September 12, 2017 | Author: David Heriawanto | Category: N/A
Share Embed Donate


Short Description

panduan ini adalah untuk membuat android...

Description

Kata Pengantar Puji syukur penulis penjatkan kehadirat Allah SWT, yang atas rahmat-Nya maka penulis dapat menyelesaikan penyusunan buku yang berjudul “Kumpulan Project Aplikasi Android Untuk Pemula”. Penulisan buku adalah merupakan salah satu tugas dan persyaratan untuk menyelesaikan mata kuliah pemrogaman lanjut di jurusan teknik informatika PENS. Dalam Penulisan buku ini penulis merasa masih banyak kekurangan-kekurangan baik pada teknis penulisan maupun materi, mengingat akan kemampuan yang dimiliki penulis. Untuk itu kritik dan saran dari semua pihak sangat penulis harapkan demi penyempurnaan pembuatan buku ini.

2

Daftar Isi Contents Kata Pengantar............................................................................. 2 Daftar Isi ...................................................................................... 3 Pengenalan Android ..................................................................... 6 Bab 1............................................................................................ 7 1. Melakukan Konfigurasi Android SDK pada Eclipse IDE .......... 8 2. Membuat Project Baru ....................................................... 12 3. First Android App................................................................ 16 Bab 2.......................................................................................... 21 1. Basic Layout-Membuat Simple Date Button ........................ 21 2. Basic Layout-UI Hierarcy ..................................................... 23 3. Basic Layout-Table Layout .................................................. 26 4. Basic Layout-Relative Layout............................................... 28 5. Basic Layout Absolute Layout ............................................. 30 6. Basic Widget-Radio Button ................................................. 31 7. Creating Layout without xml ............................................... 34 8. Advanced Layout-ScrollView............................................... 37 Bab 3.......................................................................................... 41 1. Selection Widget-ListView .................................................. 41 2. Selection Widget-Spinner ................................................... 43 3

3. Selection Widget-GridView ................................................ 46 Bab 4 ......................................................................................... 50 1. Adding List Data ................................................................. 51 2. Adding Spinner Data .......................................................... 55 3. Adding List with AutoComplete.......................................... 60 Bab 5 ......................................................................................... 67 1. Date And Time Widget ....................................................... 67 2. Tab Menu .......................................................................... 71 3. Slide Drawer ...................................................................... 74 4. Contoh Aplikasi Order Pizza ............................................... 79 5. Aplikasi Currency Dan Hitung Volume Balok Menggunakan Tabbed Menu ........................................................................ 85 Bab 6 ......................................................................................... 93 1. Option And Context Menu ................................................. 93 2. Advanced Option And Context Menu ................................. 98 3. Intent ...............................................................................104 Bab 7 ........................................................................................117 1. Android Bundles ...............................................................117 2. Intent Using Other Java Class ............................................126 Bab 8 ........................................................................................134 1. Android Persistency-Preferences ......................................134 2. Android Persistency-Files ..................................................140 4

Bab 9........................................................................................ 148 1. Membuat Aplikasi TODO List ............................................ 148 Bab 10...................................................................................... 159 1. Internet Feeders Using RSS ............................................... 159 Bab 11...................................................................................... 169 1. Location Manager-GPS Service ......................................... 169 2. Location Manager-Location Based Service ........................ 176 Bab 12...................................................................................... 183 1. Intent Filters ..................................................................... 183 Bab 13...................................................................................... 189 Bab 14...................................................................................... 207 1. App Cycles ........................................................................ 207 Bab 15...................................................................................... 216 List Gambar Dan Sumber Materi .............................................. 217

5

Pengenalan Android Android adalah sistem operasi yang berbasis Linux untuk telepon seluler seperti telepon pintar dan komputer tablet. Android menyediakan platform terbuka bagi para pengembang untuk menciptakan aplikasi mereka sendiri untuk digunakan oleh bermacam peranti bergerak. Awalnya, Google Inc. membeli Android Inc., pendatang baru yang membuat peranti lunak untuk ponsel. Kemudian untuk mengembangkan Android, dibentuklah Open Handset Alliance, konsorsium dari 34 perusahaan peranti keras, peranti lunak, dan telekomunikasi, termasuk Google, HTC, Intel, Motorola, Qualcomm, T-Mobile, dan Nvidia. Pada saat perilisan perdana Android, 5 November 2007, Android bersama Open Handset Alliance menyatakan mendukung pengembangan standar terbuka pada perangkat seluler. Di lain pihak, Google merilis kode–kode Android di bawah lisensi Apache, sebuah lisensi perangkat lunak dan standar terbuka perangkat seluler. Di dunia ini terdapat dua jenis distributor sistem operasi Android. Pertama yang mendapat dukungan penuh dari Google atau Google Mail Services (GMS) dan kedua adalah yang benar–benar bebas distribusinya tanpa dukungan langsung Google atau dikenal sebagai Open Handset Distribution (OHD).

6

Bab 1 Petunjuk Instalasi Android

Sebelum memulai pemrogaman android, terlebih dahulu kita harus menyiapkan developers tools yang berupa:

- Android SDK di http://developer.android.com/sdk/index.html - JDK (Jika Belum Tersedia) di http://java.sun.com/javase/downloads/index.jsp - Eclipse IDE di http://www.eclipse.org/downloads/ - ADT Plugin http://developer.android.com/sdk/eclipse-adt.html Setelah semua file pada link diatas kita download. Selanjutnya lakukan instalasi JDK terlebih dahulu. Untuk melakukan instalasi JDK cukup klik dua kali pada file setup JDK dan klik next hingga instalasi selesai. Setelah JDK terinstall maka kita bisa langsung melanjutkan step berikutnya dalam memulai pemrogaman android. Sekilas muncuk pertanyaan, mengapa harus menginstall JDK?? Ya, karena dasar pemrogaman android adalah java. Sehingga kita perlu menginstall JDK terlebih dahulu.

7

1. Melakukan Konfigurasi Android SDK pada Eclipse IDE Sekarang saatnya kita untuk memulai pemrogaman android. Pertama tama kita letakkan semua file yang didownload pada halaman sebelumnya pada satu folder yang sama agar mudah dicari. 1. Jalankan aplikasi Eclipse IDE

Gambar 1 Loading screen Eclipse IDE

2. Extract isi archive file android SDK yang telah didownload

Gambar 2 Hasil extract file archive android SDK

8

3. Jika muncul notifikasi untuk menentukan lokasi workspace, anda bisa tentukan lokasi workspace terserah anda atau membiarkannya default. Workspace adalah tempat dimana nantinya project yang anda buat akan disimpan. Jika telah masuk ke tampilan utama Eclipse pilih menu Help install New Software.

Gambar 3 Menu Pilihan Install New Software

4. Klik add

Gambar 4 Kotak Dialog Install New Software

9

5. Pilih archive dan cari lokasi dimana tadinya anda mendownload file ADT. Kemudian pilih file tersebut dan beri nama lalu klik OK.

Gambar 5 Kotak Dialog Add Site

6. Maka Akan muncul tampilan sebagai berikut, jika ingin menginstall ADT dan Android SDK secara online masukkan link berikut https://dlssl.google.com/android/eclipse/

Gambar 6 File ADT setelah ditambahkan

10

7. Lalu beri centang pada Developer Tools dan klik next. Kemudian lakukan proses installasi dengan mengikuti petunjuk yang ada hingga selesai. 8. Setelah ADT terinstall lakukan konfigurasi SDK dengan membuka menu WindowPreferences.

Gambar 7 Menu Preferences

9. Kemudian pilih menu android dan klik browse. Cari lokasi dimana folder Android SDK yang telah anda ekstrak tadi. Kemudian Klik OK. Jika konfigurasi berhasil maka akan muncul seperti pada gambar

Gambar 8 Lokasi SDK telah dikonfigurasi

11

Sekarang anda sudah bisa memulai untuk mendevelop aplikasi android. Jumlah SDK yang muncul pada menu preferences sebelumnya bergantung pada berapa banya versi SDK yang anda download.

2. Membuat Project Baru Setelah proses konfigurasi selesai kini kita akan melanjutkan ke tahap selanjutnya yaitu membuat project baru/project pertama kita. 1. Buka Eclipse IDE, kemudian pilih FileNewAndroid Project

Gambar 9 Membuat project baru

12

2. Beri nama project kemudian klik next

Gambar 10 Memberi nama project

3. Pilih SDK yang akan digunakan

Gambar 11 Memilih SDK yang akan digunakan

13

4. Isi package name sesuai dengan keinginan anda. Pada contoh dalam buku ini package yang digunakan sesuai dengan yang tertera pada Source Code

Gambar 12 Memberi nama Package

5. Dan project baru pun selesai dibuat

Gambar 13 Source First Project

14

6. Untuk menjalankan project dibutuhkan emulator. Untuk membuat emulator. Pilih menu WindowsAVD Manager kemudian pilih new

Gambar 14 Tampilan window AVD Manager

7. Isi nama,tipe SDK dan Size SD Card kemudian klik Create AVD

Gambar 15 Create AVD

15

Nah sekarang kita bisa menjalankan project android yang baru saja kita baru tadi dengan klik kanan pada project dan pilih Run As Android Application.

3. First Android App Sekarang saatnya untuk membuat aplikasi android pertama kita, silahkan dimulai dengan mengikuti langkah langkah berikut: 1. Buat project baru dengan kriteria -Project Name= coba -SDK= Android 2.1 -Application Name= coba -Package Name=com.tes.coba -Create Activity=cobaActivity

2. Buka folder coba/res/layout/main.xml kemudian replace

dengan kode dibawah

3. Maka tampilan pada tab graphical layout akan menjadi seperti ini

Gambar 16 Graphical Layout

17

4. Buat class baru pada coba/src/com.tes.coba dengan nama Restaurant.java. kemudian isi dengan kode dibawah

Gambar 17 Membuat Class baru

package com.eepis.basicForm; public class Restaurant { private String name = ""; private String address = ""; public String getName() { return (name); } public void setName(String name) { this.name = name; }

18

public String getAddress() { return (address); } public void setAddress(String address) { this.address = address; } }

5. Pada class cobaActivity isi dengan kode berikut package com.tes.coba; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class BasicActivity extends Activity { /** Called when the activity is first created. */ Restaurant r=new Restaurant(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button save=(Button) findViewById(R.id.save); save.setOnClickListener(onSave); } private View.OnClickListener onSave=new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub EditText name=(EditText)findViewById(R.id.name); EditText address=(EditText)findViewById(R.id.addr);

19

TextView textNama=(TextView)findViewById(R.id.textnama); TextView textAddress=(TextView)findViewById(R.id.textaddress); r.setName(name.getText().toString()); r.setAddress(address.getText().toString()); textNama.setText(r.getName()); textAddress.setText(r.getAddress()); } }; }

6. Kemudian jalan aplikasi dengan cara klik kanan pada project dan pilih Run AsAndroid Application. Hasilnya adalah sebagai berikut

Gambar 18 First Android Project

20

Bab 2 Design Layout Pada Aplikasi Android

Pada android untuk melakukan design layout atau tampilan aplikasi kita cukup dimudahkan dengan menggunakan xml file. Ditambah lagi tersedianya layout designer yang WYSIWYG(what you see is what you get) tentu saja amat memudahkan para developer android dalam mendevelop aplikasinya.

1. Basic Layout-Membuat Simple Date Button Kita akan membuat sebuah button pada aplikasi android kita yang nantinya jika kita klik maka akan muncul tanggal dan waktu saat ini. 1. Buat project baru dengan kriteria sebagai berikut: Project Name Package SDK version

:SimpleDateButton :com.eepis.android :Android 2.1

2. Ketik kode berikut pada main.xml

21

3. Ketik kode berikut pada SimpleDateButton.java(Main Class) package com.eepis.android; import java.util.Date; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button;; public class SimpleDateButton extends Activity { /** Called when the activity is first created. */ Button btn; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btn =(Button) findViewById(R.id.myButton); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { updateTime(); } }); } public void updateTime(){ btn.setText(new Date().toString()); } }

22

4. Hasil tampilan program ketika dijalankan

Gambar 19 Simple Date Button

2. Basic Layout-UI Hierarcy UI Hierarcy merupakan aturan peletakan dan pengurutan dalam layout android. Untuk lebih jelasnya bisa dilihat pada project berikut 1. Buat project baru dengan kriteria sebagai berikut: Project Name Package SDK version

:UIHierarcy :com.eepis.android :Android 2.1

23

2. Ketik kode berikut pada main.xml

3. Ketik kode berikut pada UIHierarcy.java(Main Class) package com.eepis.android; import import import import import import

java.util.Date; android.app.Activity; android.os.Bundle; android.view.View; android.view.View.OnClickListener; android.widget.Button;;

public class UIHierarcy extends Activity { /** Called when the activity is first created. */ Button btn1; Button btn2; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main2); btn1 = (Button) findViewById(R.id.Button01);

25

btn1.setOnClickListener(null); btn2 = (Button) findViewById(R.id.Button02); btn2.setOnClickListener(null); } }

4. Hasil tampilan program ketika dijalankan

Gambar 20 UI Hierarcy

3. Basic Layout-Table Layout Tabel merupakan design layout yang umum digunakan terutama dalam android. Karena layout android berbasi xml file yang dimana mirip dalam desain layout web yang juga menggunakan xml dan css. 1. Buat project baru dengan kriteria sebagai berikut: Project Name Package SDK version

26

:TableLayout :com.eepis.android :Android 2.1

2. Ketik kode berikut pada main.xml 3. Tak perlu melakukan modifikasi pada file java. Dan jika dijalankan maka tampilannya akan seperti berikut

Gambar 21 Tabel Layout

27

4. Basic Layout-Relative Layout Relative layout juga termasuk seringkali digunakan dalam desain layout android. Dikarena penentuan posisi layout objek yang cukup mudah. Dimana pada layout ini objek yang kita buat mengacu pada objek atau bagian pada screen. 1. Buat project baru dengan kriteria sebagai berikut: Project Name Package SDK version

:RelativeLayout :com.eepis.android :Android 2.1

2. Ketik kode berikut pada main.xml

3. Tak perlu melakukan modifikasi pada file java. Dan jika dijalankan maka tampilannya akan seperti berikut

Gambar 22 Relative Layout

29

5. Basic Layout Absolute Layout Absolute layout pada android memungkinkan kita untuk meletakkan object sesuai yang kita inginkan pada posisi yang sudah kita tentukan secara absolute. Jadi kita harus benar benar tahu berapa posisi koordinat untuk mengatur posisi sebuah object pada layout android. 1. Buat project baru dengan kriteria sebagai berikut: Project Name Package SDK version

:AbsoluteLayout :com.eepis.android :Android 2.1

2. Ketik kode berikut pada main.xml

3. Tak perlu melakukan modifikasi pada file java. Dan jika dijalankan maka tampilannya akan seperti berikut

30

Gambar 23 Absolute Layout

6. Basic Widget-Radio Button Radio button adalah sebuah selection widget berupa pilihan yang bisa dipilih salah satu. 1. Buat project baru dengan kriteria sebagai berikut: Project Name Package SDK version

:RadioButton :com.eepis.android :Android 2.1

2. Ketik kode berikut pada main.xml

3. Ketik kode berikut pada RadioButton.java package com.eepis.android; import import import import import import import

32

android.app.Activity; android.os.Bundle; android.view.View; android.widget.Button; android.widget.EditText; android.widget.RadioButton; android.widget.RadioGroup;

public class RadioButton extends Activity { /** Called when the activity is first created. */ Restaurant r = new Restaurant(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button save = (Button) findViewById(R.id.save); save.setOnClickListener(onSave); } private View.OnClickListener onSave = new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub EditText name = (EditText) findViewById(R.id.name); EditText address = (EditText) findViewById(R.id.addr); r.setName(name.getText().toString()); r.setAddress(address.getText().toString()); RadioGroup type = (RadioGroup) findViewById(R.id.types); switch (type.getCheckedRadioButtonId()) { case R.id.sit_down: r.setTypes("sit_down"); break; case R.id.take_out: r.setTypes("take_out");

33

break; case R.id.delivery: r.setTypes("delivery"); break; } } }; }

4. Hasil tampilan program ketika dijalankan

Gambar 24 Radio Button Widget

7. Creating Layout without xml Di android umumnya developer mendesain menggunakan xml layout. Namun android juga menyediakan opsi mendesain layout tanpa xml. Cukup menggunakan kode dari file java. 1. Buat project baru dengan kriteria sebagai berikut:

34

Project Name Package SDK version

:Noxml :com.eepis.android :Android 2.1

2. Ketik kode berikut pada Noxml.java package com.eepis.androud import import import import import import import

android.app.Activity; android.os.Bundle; android.view.View; android.widget.Button; android.widget.EditText; android.widget.RadioButton; android.widget.RadioGroup;

public class Noxml extends Activity { Restaurant r = new Restaurant(); RadioButton rb; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button save = (Button) findViewById(R.id.save); save.setOnClickListener(onSave); rb=new RadioButton(getBaseContext()); rb.setText("Wrapped"); } private View.OnClickListener onSave = new View.OnClickListener() { public void onClick(View v) { EditText name = (EditText) findViewById(R.id.name); EditText address = (EditText) findViewById(R.id.addr);

35

r.setName(name.getText().toString()); r.setAddress(address.getText().toString()); RadioGroup types=(RadioGroup) findViewById(R.id.types); types.addView(rb); switch (types.getCheckedRadioButtonId()) { case R.id.sit_down: r.setTypes("sit_dawn"); break; case R.id.take_out: r.setTypes("take_out"); break; case R.id.delivery: r.setTypes("delivery"); break; } } }; }

3. Hasil tampilan program ketika dijalankan

36

Gambar 25 Membuat Layout tanpa xml

8. Advanced Layout-ScrollView ScrollView pada android digunakan untuk menampilkan layout yang memanjang baik ke samping atau kebawah. Fungsi cukup sama ketika kita membuka sebuah web page. 1. Buat project baru dengan kriteria sebagai berikut: Project Name Package SDK version

:ScrollView :com.eepis.android :Android 2.1

2. Ketik kode berikut pada main.xml

37



3. Ketik kode berikut pada ScrollView.java package com.eepis.android;

38

import import import import import import import

android.app.Activity; android.os.Bundle; android.view.View; android.widget.Button; android.widget.EditText; android.widget.RadioButton; android.widget.RadioGroup;

public class ScrollView extends Activity { Restaurant r = new Restaurant(); RadioButton rb,rt,rs,rc; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button save = (Button) findViewById(R.id.save); save.setOnClickListener(onSave); rb=new RadioButton(getBaseContext()); rb.setText("Wrapped"); rt=new RadioButton(getBaseContext()); rt.setText("Wrapped"); rs=new RadioButton(getBaseContext()); rs.setText("Wrapped"); rc=new RadioButton(getBaseContext()); rc.setText("Wrapped"); } private View.OnClickListener onSave = new View.OnClickListener() { public void onClick(View v) { EditText name = (EditText) findViewById(R.id.name); EditText address = (EditText) findViewById(R.id.addr); r.setName(name.getText().toString()); r.setAddress(address.getText().toString()); RadioGroup types=(RadioGroup) findViewById(R.id.types);

39

types.addView(rb); types.addView(rt); types.addView(rs); types.addView(rc); switch (types.getCheckedRadioButtonId()) { case R.id.sit_down: r.setTypes("sit_dawn"); break; case R.id.take_out: r.setTypes("take_out"); break; case R.id.delivery: r.setTypes("delivery"); break; } } }; }

4. Hasil tampilan program ketika dijalankan

Gambar 26 ScrollView

40

Bab 3 Selection Widget

Selection widget adalah widget yang digunakan untuk melakukan pemilihan fungsi apa yang ingin dijalankan. Pada contoh project yang akan kita buat adalah ListView,Spinner dan GridView.

1. Selection Widget-ListView ListView merupakan widget pada android untuk menampilkan pilihan dalam bentuk list baik berurutan maupun tidak. Dan setiap pilihan dalam list bisa diberi fungsi sendiri sendiri. 1. Buat project baru dengan kriteria sebagai berikut: Project Name Package SDK version

:ListView :com.eepis.android :Android 2.1

2. Ketik Kode berikut pada main.xml 3. Ketik kode berikut pada ListView.java package com.eepis.android; import android.app.ListActivity; import android.os.Bundle; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; public class ListView extends ListActivity { /** Called when the activity is first created. */ TextView selection; String[] items = {"this","is","a","really","really2", "really3","really4","really5","silly","list"}; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); setListAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, items)); selection= (TextView) findViewById(R.id.selection);

42

} protected void onListItemClick(ListView l,View v, int position,long id){ super.onListItemClick(l, v, position, id); String text = "position:"+position+""+items[position]; selection.setTag(text); } } 4. Hasil tampilan program ketika dijalankan

Gambar 27 Simple ListView

2. Selection Widget-Spinner Spinner bisa dikatakan mirip dengan dropdown menu, dimana untuk memilih kita harus klik terlebih dahulu pada widget tersebut untuk memunculkan pilihan.

43

1. Buat project baru dengan kriteria sebagai berikut: Project Name Package SDK version

:Spinner :com.eepis.android :Android 2.1

2. Ketik kode berikut pada main.xml

3. Ketik kode berikut pada spinner.java package com.eepis.android; import import import import

44

android.app.Activity; android.os.Bundle; android.view.View; android.widget.ArrayAdapter;

import android.widget.AdapterView; import android.widget.Spinner; import android.widget.TextView; public class Spinner extends Activity implements AdapterView.OnItemSelectedListener{ /** Called when the activity is first created. */ TextView selection; String[] items = {"this","is","a","really","really2", "really3","really4","really5","silly","list "}; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); selection= (TextView) findViewById(R.id.selection); Spinner spin=(Spinner) findViewById(R.id.spinner); spin.setOnItemSelectedListener(this); ArrayAdapter aa=new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_it em,items); aa.setDropDownViewResource(android.R.layout.simpl e_spinner_dropdown_item); spin.setAdapter(aa); } @Override public void onItemSelected(AdapterView parent, View v, int position, long id) { // TODO Auto-generated method stub

45

selection.setText(items[position]); } @Override public void onNothingSelected(AdapterView parent) { // TODO Auto-generated method stub selection.setText(""); } }

4. Hasil tampilan program ketika dijalankan

Gambar 28 Spinner

3. Selection Widget-GridView GridView merupakan selection widget dengan tampilan berupa grid. Yaitu mirip dengan tampilan tile icons pada windows.

46

1. Buat project baru dengan kriteria sebagai berikut: Project Name Package SDK version

:GridView :com.eepis.android :Android 2.1

2. Ketik kode berikut pada main.xml 3. Ketik kode berikut pada GridView.java package com.eepis.android;

47

import import import import import import import

android.app.Activity; android.os.Bundle; android.view.View; android.widget.ArrayAdapter; android.widget.AdapterView; android.widget.GridView; android.widget.TextView;

public class GridView extends Activity implements AdapterView.OnItemClickListener{ /** Called when the activity is first created. */ TextView selection; String[]items={ "this","is","a","really","really2","really3","rea lly4","really5","silly","list"}; @Override Public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); selection= (TextView) findViewById(R.id.selection); GridView gv=(GridView) findViewById(R.id.grid); ArrayAdapter aa=new ArrayAdapter(this, android.R.layout.simple_list_item_1,items); gv.setAdapter(aa); gv.setOnItemClickListener(this); } @Override public void onItemClick(AdapterView parent, View v, int position, long id) { // TODO Auto-generated method stub

48

selection.setText(items[position]); } } 4. Hasil tampilan program ketika dijalankan

Gambar 29 GridView

49

Bab 4 Selection Widget-Advanced

Kali ini kita akan membahas lebih lanjut tentang selection widget. Khusus untuk bab ini ada class khusus yang digunakan pada setiap percobaan. Berikut class tersebut: Restaurant.java package com.coba.tes; public class Restaurant { private String name = ""; private String address = ""; private String type=""; public String getName() { return (name); } public String getType(){ return(type); } public void setType(String type){ this.type=type; } public void setName(String name) { this.name = name; } public String getAddress() { return (address); } public void setAddress(String address) { this.address = address; } public String toString(){ return(getName());

50

} }

1. Adding List Data Kita akan mencoba untuk menambah data ke dalam list selection widget yang telah kita buat. 1. Buat project baru dengan kriteria sebagai berikut: Project Name Package SDK version

:AddingList :com.eepis.android :Android 2.1

2. Ketik kode berikut pada main.xml

3. Ketik kode berikut pada AddingList.java package com.eepis.android;

52

import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.RadioGroup; public class AddingList extends Activity { /** Called when the activity is first created. */ List model = new ArrayList(); ArrayAdapter adapter = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button save = (Button) findViewById(R.id.save); save.setOnClickListener(onSave); ListView list = (ListView) findViewById(R.id.restaurants); adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, model); list.setAdapter(adapter); } private View.OnClickListener onSave = new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub

53

Restaurant r = new Restaurant(); EditText name = (EditText) findViewById(R.id.name); EditText address = (EditText) findViewById(R.id.addr); r.setName(name.getText().toString()); r.setAddress(address.getText().toString()); RadioGroup types = (RadioGroup) findViewById(R.id.types); switch (types.getCheckedRadioButtonId()) { case R.id.sit_down: r.setType("sit_down"); break; case R.id.take_out: r.setType("take_out"); break; case R.id.delivery: r.setType("delivery"); break; } adapter.add(r); } }; }

4. Hasil tampilan program ketika dijalankan

54

Gambar 30 Adding List Item

2. Adding Spinner Data Untuk menambahkan data pada Spinner hampir mirip dengan penambahan data pada ListView. Jadi cermati baik baik. 1. Buat project baru dengan kriteria sebagai berikut: Project Name Package SDK version

:AddingListSpinner :com.eepis.android :Android 2.1

2. Ketik kode berikut pada main.xml

55



56



3. Ketik kode berikut pada AddingListSpinner.java package com.eepis.android; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Adapter; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button;

57

import android.widget.EditText; import android.widget.ListView; import android.widget.RadioGroup; import android.widget.Spinner; import android.widget.TextView; public class AddingListSpinner extends Activity implements AdapterView.OnItemSelectedListener{ /** Called when the activity is first created. */ List model = new ArrayList(); ArrayAdapter aa = null; TextView selection; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); selection= (TextView) findViewById(R.id.selection); Button save = (Button) findViewById(R.id.save); save.setOnClickListener(onSave); Spinner spin=(Spinner) findViewById(R.id.spinner); spin.setOnItemSelectedListener(this); aa=new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item,model); aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdo wn_item); spin.setAdapter(aa); } private View.OnClickListener View.OnClickListener() { @Override public void onClick(View v) {

58

onSave

=

new

// TODO Auto-generated method stub Restaurant r = new Restaurant(); EditText name = (EditText) findViewById(R.id.name); EditText

address

=

(EditText)

findViewById(R.id.addr); r.setName(name.getText().toString()); r.setAddress(address.getText().toString()); RadioGroup types = (RadioGroup) findViewById(R.id.types); switch (types.getCheckedRadioButtonId()) { case R.id.sit_down: r.setType("sit_down"); break; case R.id.take_out: r.setType("take_out"); break; case R.id.delivery: r.setType("delivery"); break; } aa.add(r); } }; @Override public void onItemSelected(AdapterView parent, View v, int position, long id) { selection.setText(model.get(position).toString()); } @Override public void onNothingSelected(AdapterView arg0) {

59

// TODO Auto-generated method stub selection.setText(""); } }

4. Hasil tampilan program ketika dijalankan

Gambar 31 Adding Spinner Data

3. Adding List with AutoComplete AutoComplete merupakan fitur yang memberikan kemudahan dengan menebak teks yang akan diinputkan user. Kali ini kita akan menggabungkkan dengan percobaan Adding List.

60

1. Buat project baru dengan kriteria sebagai berikut: Project Name Package SDK version

:AutoComplete :com.eepis.android :Android 2.1

2. Ketik kode berikut pada main.xml

61



62

3. Ketik kode berikut pada AutoComplete.java package com.eepis.android; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.view.View; import android.widget.Adapter; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.AutoCompleteTextView; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.RadioGroup; import android.widget.Spinner; import android.widget.TextView; public class AutoComplete extends Activity implements AdapterView.OnItemSelectedListener,TextWatcher{ /** Called when the activity is first created. */ List model = new ArrayList(); ArrayAdapter aa = null; String[] items = {"this","is","a","really","really2", "really3","really4","really5","silly","list"}; TextView selection; AutoCompleteTextView name; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

63

setContentView(R.layout.main); selection= (TextView) findViewById(R.id.selection); Button save = (Button) findViewById(R.id.save); save.setOnClickListener(onSave); Spinner spin=(Spinner) findViewById(R.id.spinner); spin.setOnItemSelectedListener(this); aa=new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item,model); aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdo wn_item); spin.setAdapter(aa); name = (AutoCompleteTextView) findViewById(R.id.name); name.addTextChangedListener(this); name.setAdapter(new ArrayAdapter(this, android.R.layout.simple_dropdown_item_1line,items)); } private View.OnClickListener onSave = new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Restaurant r = new Restaurant(); EditText address = (EditText) findViewById(R.id.addr); r.setName(name.getText().toString()); r.setAddress(address.getText().toString()); RadioGroup types = (RadioGroup) findViewById(R.id.types); switch (types.getCheckedRadioButtonId()) { case R.id.sit_down:r.setType("sit_down"); break; case R.id.take_out: r.setType("take_out"); break; case R.id.delivery: r.setType("delivery");

64

break; } //model.listIterator().previous().toString(); aa.add(r); } }; @Override public void onItemSelected(AdapterView parent, View v, int position,long id) { selection.setText(model.get(position).toString()); } @Override public void onNothingSelected(AdapterView arg0) { selection.setText(""); } @Override public void afterTextChanged(Editable s) { } @Override public void beforeTextChanged(CharSequence s, int start, int count,int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } }

65

4. Hasil tampilan program ketika dijalankan

Gambar 32 AutoComplete

66

Bab 5 Advanced Layout

Saatnya kita beralih ke design layout lebih lanjut. Setelah kita mempelajarai dasar dasar layout pada bab selanjutkan kini kita akan memasuki tahap layout lanjutan.

1. Date And Time Widget 1. Buat project baru dengan kriteria sebagai berikut: Project Name Package SDK version

:DateTime :com.eepis.android :Android 2.1

2. Ketik kode berikut pada main.xml

3. Ketik kode berikut pada DateTime.java package com.eepis.android; import android.app.Activity; import android.os.Bundle; import android.app.DatePickerDialog; import android.app.TimePickerDialog; import android.view.View; import android.widget.Button; import android.widget.DatePicker; import android.widget.TimePicker; import android.widget.TextView; import java.text.DateFormat; import java.util.Calendar; public class DateTime extends Activity { /** Called when the activity is first created. */ DateFormat fmtDateAndTime = DateFormat.getDateTimeInstance(); TextView lblDateAndTime; Calendar myCalendar = Calendar.getInstance(); DatePickerDialog.OnDateSetListener d = new DatePickerDialog.OnDateSetListener() { @Override

68

public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { myCalendar.set(Calendar.YEAR, year); myCalendar.set(Calendar.MONTH, monthOfYear); myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth); updateLabel(); } }; TimePickerDialog.OnTimeSetListener t = new TimePickerDialog.OnTimeSetListener() { public void onTimeSet(TimePicker view, int hourOfDay, int minute) { myCalendar.set(Calendar.HOUR_OF_DAY, hourOfDay); myCalendar.set(Calendar.MINUTE, minute); updateLabel(); } }; private void updateLabel() { lblDateAndTime.setText(fmtDateAndTime.format(myCalendar.g etTime())); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); lblDateAndTime = (TextView) findViewById(R.id.lblDateAndTime); Button btnDate = (Button) findViewById(R.id.btnDate); btnDate.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { new DatePickerDialog(dateandtime.this, d, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),

69

myCalendar.get(Calendar.DAY_OF_MONTH)).show(); } }); Button btnTime = (Button) findViewById(R.id.btnTime); btnTime.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { new TimePickerDialog(dateandtime.this, t, myCalendar.get(Calendar.HOUR_OF_DAY), myCalendar.get(Calendar.MINUTE), true).show(); } }); updateLabel(); }// onCreate }

4. Hasil tampilan program ketika dijalankan

Gambar 33 Date and Time Picker

70

2. Tab Menu Tab menu merupakan fitur layout untuk membagi tampilan menjadi bagian dari tab tab sebanyak yang kita butuhkan. 1. Buat project baru dengan kriteria sebagai berikut: Project Name Package SDK version

:TabMenu :com.eepis.android :Android 2.1

2. Ketik kode berikut pada main.xml

71



3. Ketik kode berikut pada TabMenu.java package com.eepis.android; import android.app.Activity;

72

import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TabHost; public class TabMenu extends Activity { @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); TabHost tabs = (TabHost) findViewById(R.id.tabhost); tabs.setup(); TabHost.TabSpec spec; spec = tabs.newTabSpec("tag1"); spec.setContent(R.id.tab1); spec.setIndicator("1-Clock"); tabs.addTab(spec); spec = tabs.newTabSpec("tag2"); spec.setContent(R.id.tab2); spec.setIndicator("2-Login"); tabs.addTab(spec); tabs.setCurrentTab(0); Button btnGo = (Button) findViewById(R.id.btnGo); btnGo.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { EditText txtPerson = (EditText) findViewById(R.id.txtPerson); String theUser = txtPerson.getText().toString(); txtPerson.setText("Hola " + theUser); } }); } }

73

4. Hasil tampilan program ketika dijalankan

Gambar 34 Tab Menu

3. Slide Drawer Slide drawer merupakan sub menu yang akan muncul jika kita klik drawer button di screen. Fitur ini miri dengan ketika kita membuka menu di android 1. Buat project baru dengan kriteria sebagai berikut: Project Name Package SDK version

:SlideDrawer :com.eepis.android :Android 2.1

2. Ketik kode berikut pada main.xml

76

3. Ketik kode berikut pada SlideDrawer.java package com.eepis.android; import java.util.Date; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.*; public class SlideDrawer extends Activity { Button btn1; Button btn2; TextView label1; TextView label2; TextView label3; SlidingDrawer myDrawer; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); myDrawer = (SlidingDrawer) findViewById(R.id.drawer); btn1 = (Button) findViewById(R.id.btn1); btn2 = (Button) findViewById(R.id.btn2); label1 = (TextView) findViewById(R.id.label1); label2 = (TextView) findViewById(R.id.label2); label3 = (TextView) findViewById(R.id.label3); btn1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Date dt = new Date(); String now = dt.toLocaleString(); label1.setText("111 - Hola amigos " + now);

77

label2.setText("222 - Hola amigos " + now); label3.setText("333 - Hola amigos " + now); } }); btn2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { myDrawer.animateClose(); } }); } // onCreate } // class

4. Hasil tampilan program ketika dijalankan

Gambar 35 Slide Drawer Widget

78

4. Contoh Aplikasi Order Pizza Sekarang saat mengaplikasikan percobaan percobaan yang telah dilakukan. Kita akan menerapkannya pada aplikasi order pizza yang akan kita buat berikut ini: 1. Buat project baru dengan kriteria sebagai berikut: Project Name Package SDK version

:AppOrder :com.eepis.android :Android 2.1

2. Ketik kode berikut pada main.xml

80



3. Ketik kode berikut pada AppOrder.java package com.eepis.android;

81

import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.Toast; import android.view.View.*;; public class Main extends Activity { /** Called when the activity is first created. */ EditText name; EditText phone; RadioGroup group1; RadioGroup group2; RadioButton keju; RadioButton keju2; RadioButton none; RadioButton square; RadioButton round; CheckBox pep; CheckBox mus; CheckBox veg; CheckBox anc; Button sms; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); name = (EditText) findViewById(R.id.txtName); phone = (EditText) findViewById(R.id.txtPhone); group1 = (RadioGroup) findViewById(R.id.group1); group2 = (RadioGroup) findViewById(R.id.group2);

82

keju = (RadioButton) findViewById(R.id.keju); keju2 = (RadioButton) findViewById(R.id.keju2); none = (RadioButton) findViewById(R.id.noKeju); square = (RadioButton) findViewById(R.id.square); round = (RadioButton) findViewById(R.id.round); pep = (CheckBox) findViewById(R.id.pep); mus = (CheckBox) findViewById(R.id.mus); veg = (CheckBox) findViewById(R.id.veg); anc = (CheckBox) findViewById(R.id.anc); sms = (Button) findViewById(R.id.butsms); sms.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if(pep.isChecked()==false && mus.isChecked() == false && veg.isChecked() ==false && anc.isChecked() ==false ){ Toast.makeText(appOrder.this, "harap Pilih jenis Pizza", 1).show(); } String msg=""; msg=msg+" Topping="; int radio1= group1.getCheckedRadioButtonId(),radio2=group2.getCheckedRadioBut tonId(); if (keju.getId()==radio1){ msg=msg+"keju "; } else if (keju2.getId()==radio1){ msg=msg+"2xkeju "; } else if (none.getId()==radio1){ msg=msg+"tanpa keju "; } msg=msg+" Bentuk="; if (square.getId()==radio2){ msg=msg+"bentuk kotak "; }

83

else if (round.getId()==radio2){ msg=msg+"bentuk bundar "; } msg=msg+" jenis="; if (pep.isChecked()){ msg=msg+"peperoni "; } if (mus.isChecked()){ msg=msg+"mushroom "; } if (veg.isChecked()){ msg=msg+"Veggie "; } if (anc.isChecked()){ msg=msg+"anchoives "; } Toast.makeText(appOrder.this, "Nama="+name.getText().toString()+ " No="+ phone.getText().toString()+ ""+msg, 1).show(); } }); } }

4. Hasil tampilan program ketika dijalankan

84

Gambar 36 Aplikasi Order Pizza

5. Aplikasi Currency Dan Hitung Volume Balok Menggunakan Tabbed Menu Tabbed menu memiliki banyak sekali kegunaan. Salah satunya menggabungkan 2 aplikasi dengan fungsi berbeda seperti yang akan kita coba berikut ini 1. Buat project baru dengan kriteria sebagai berikut: Project Name Package SDK version

:TabApp :com.eepis.android :Android 2.1

85

2. Ketik kode berikut pada Main.xml

87



3. Ketik Kode berikuta pada TabApp.java package com.eepis.android; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.*; import android.widget.Button; import android.widget.EditText; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.TabHost; import android.widget.Toast; import android.widget.RadioGroup.OnCheckedChangeListener; public class TabApp extends Activity {

89

EditText rupiah; EditText dollar; EditText panjang; EditText lebar; EditText tinggi; Button convert; Button hitung; RadioGroup group; RadioButton rtod; RadioButton dtor; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); TabHost tabs = (TabHost) findViewById(R.id.tabhost); tabs.setup(); TabHost.TabSpec spec; // Tab 1 spec = tabs.newTabSpec("tag1"); spec.setContent(R.id.tab1); spec.setIndicator("Converter"); tabs.addTab(spec); // Tab 2 spec = tabs.newTabSpec("tag2"); spec.setContent(R.id.tab2); spec.setIndicator("Box Calcu"); tabs.addTab(spec); tabs.setCurrentTab(0); //identifier rupiah = (EditText) findViewById(R.id.txtRupiah); dollar = (EditText) findViewById(R.id.txtDollar); panjang = (EditText) findViewById(R.id.txtPanjang); lebar = (EditText) findViewById(R.id.txtLebar); tinggi = (EditText) findViewById(R.id.txtTingga); convert = (Button) findViewById(R.id.btnConvert); hitung = (Button) findViewById(R.id.btnHitung);

90

group = (RadioGroup) findViewById(R.id.group); rtod = (RadioButton) findViewById(R.id.rupitodol); dtor = (RadioButton) findViewById(R.id.doltorupi); rupiah.clearFocus(); rupiah.setEnabled(false); dollar.setEnabled(false); group.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { int radioid=group.getCheckedRadioButtonId(); if (rtod.getId()==radioid){ rupiah.setEnabled(true); dollar.setEnabled(false); }else if (dtor.getId()==radioid){ dollar.setEnabled(true); rupiah.setEnabled(false); } } }); convert.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { int radioid=group.getCheckedRadioButtonId(); if (rtod.getId()==radioid){ dollar.setText(""+Float.parseFloat(rupiah.getText().toString())/9 000); rupiah.setEnabled(true); dollar.setEnabled(true); }else if (dtor.getId()==radioid){ rupiah.setText(""+Float.parseFloat(dollar.getText().toString())*9 000); dollar.setEnabled(true); rupiah.setEnabled(true);

91

} } }); hitung.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { int hasil=0,panjangBox,lebarBox,tinggiBox; panjangBox=Integer.parseInt(panjang.getText().toString()); lebarBox=Integer.parseInt(lebar.getText().toString()); tinggiBox=Integer.parseInt(tinggi.getText().toString()); hasil=panjangBox*lebarBox*tinggiBox; Toast.makeText(CurrencyAndBox.this, "volumenya adalal="+hasil, 1).show(); } }); } }

4. Hasil tampilan program ketika dijalankan

Gambar 37 Aplikasi dalam Tab Menu

92

Bab 6 Menu dan Intent

Pada bab ini kita akan mempelajari apa itu intent, option menu dan context menu. Intent sendiri adalah sebuah proses dimana ketika activity dijalankan maka akan dipanggil. Sedangkan option menu ada menu yang muncul ketika kita menekan dan menahan tombol menu. Context menu adalah menu yang muncul ketika kita menekan dan menahan objek di screen.

1. Option And Context Menu 1. Buat project baru dengan kriteria sebagai berikut: Project Name Package SDK version

:Menu :com.eepis.android :Android 2.1

2. Ketik kode berikut pada main.xml 3. Ketik kode berikut pada Menu.java package com.eepis.android; import android.app.Activity; import android.os.Bundle; import android.text.Html; import android.text.Spanned; import android.view.ContextMenu; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ContextMenu.ContextMenuInfo; import android.widget.EditText; import android.widget.PopupWindow; public class Menu extends Activity { /** Called when the activity is first created. */ EditText etMessage1; EditText etMessage2; Integer[] arrayPointSize= {10, 20, 30, 40, 50}; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

94

setContentView(R.layout.main); etMessage1=(EditText)findViewById(R.id.etMessage1); etMessage2=(EditText)findViewById(R.id.etMessage2); registerForContextMenu(etMessage1); registerForContextMenu(etMessage2); } @Override public boolean onCreateOptionsMenu(Menu menu){ PopulateMyFirstMenu(menu); return super.onCreateOptionsMenu(menu); } @Override public void onCreateContextMenu(ContextMenu menu,View v, ContextMenuInfo menuInfo){ super.onCreateContextMenu(menu, v, menuInfo); if (v.getId() == etMessage1.getId()) PopulateMyFirstMenu(menu); if (v.getId() == etMessage2.getId()) PopulateMySecondMenu(menu); } private void PopulateMyFirstMenu(Menu menu) { int groupId=0,order=0; menu.add(groupId,1,1,"10 points"); menu.add(groupId,2,2,"20 points"); menu.add(groupId,3,3,"30 points"); menu.add(groupId,4,4,"40 points"); menu.add(groupId,5,5,"50 points"); menu.add(groupId, 6, 8, "Red text"); menu.add(groupId, 7, 7, "Green Text"); menu.add(groupId, 8, 6, "Blue text"); } private void PopulateMySecondMenu(ContextMenu menu) { int groupId= 0,order= 0; //arguments: groupId, optionId, order, title menu.add(groupId, 9, 1, "Bold");

95

menu.add(groupId, 10, 2, "Italic"); menu.add(groupId, 11, 3, "Normal"); } public boolean onContextItemSelected(MenuItem item){ return (applyMenuOption(item)); } public boolean onOptionsItemSelected(MenuItem item){ return (applyMenuOption(item)); } private boolean applyMenuOption(MenuItem item) { int menuItemId= item.getItemId(); // 1, 2, 3, ...11 String strMsg2 = etMessage2.getText().toString(); if(menuItemId
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF