PEMROGRAMAN MOBILE 2 - stekom.ac.id

71
DIKTAT PEMROGRAMAN MOBILE 2 Oleh : Rohmad Abidin, S.Kom, M.Kom STEKOM SEMARANG TAHUN 2018

Transcript of PEMROGRAMAN MOBILE 2 - stekom.ac.id

Page 1: PEMROGRAMAN MOBILE 2 - stekom.ac.id

DIKTAT

PEMROGRAMAN MOBILE 2

Oleh :

Rohmad Abidin, S.Kom, M.Kom

STEKOM SEMARANG

TAHUN 2018

Page 2: PEMROGRAMAN MOBILE 2 - stekom.ac.id

KATA PENGANTAR

Puji syukur kehadirat Allah SWT atas segala rahmat-NYA sehingga Diktat

Pemrograman Mobile-2 ini dapat tersusun hingga selesai . Tidak lupa kami

juga mengucapkan banyak terimakasih atas bantuan dari pihak yang telah

berkontribusi dengan memberikan sumbangan baik materi maupun

pikirannya.

Harapan kami semoga diktat ini dapat menambah pengetahuan dan

pengalaman bagi para mahasiswa, Untuk ke depannya dapat memperbaiki

bentuk maupun menambah isi diktat agar menjadi lebih baik lagi.

Karena keterbatasan pengetahuan maupun pengalaman penyusun, Kami

yakin masih banyak kekurangan dalam diktat ini, Oleh karena itu penyusun

sangat mengharapkan saran dan kritik yang membangun dari pembaca demi

kesempurnaan diktat ini.

Semarang, April 2018

Penyusun

Page 3: PEMROGRAMAN MOBILE 2 - stekom.ac.id

iii

DAFTAR ISI

HALAMAN JUDUL

KATA PENGANTAR

BAB I INTENT ................................................................................ 1

1.1 Panggil Activity ............................................................ 2

1.2 Share Data .................................................................... 5

1.3 Short Message Service ................................................. 7

BAB II SERVICE ........................................................................... 8

2.1 Background Service ...................................................... 8

2.2 Telepon Service ............................................................ 12

BAB III DATA STORAGE ............................................................ 15

3.1 Membaca data ponsel dan sim ..................................... 15

3.2 Shared preference ........................................................ 17

3.3 Internal dan External Storage ...................................... 21

3.4 Sqlite ............................................................................ 27

BAB IV ANDROID WEB ............................................................. 34

4.1 Link .............................................................................. 34

4.2 Web View ..................................................................... 36

BAB V LOCATION BASED SERVICE ........................................ 40

5.1 GPS ............................................................................... 40

5.2 Mendapatkan nilai Longitude dan Latitude .................. 41

5.3 Permintaan Alamat ....................................................... 42

5.4 Marker .......................................................................... 43

Page 4: PEMROGRAMAN MOBILE 2 - stekom.ac.id

BAB VI ANDROID CLIENT SERVER ......................................... 45

6.1 Koneksi dan Jaringan ................................................... 45

6.2 JSON Format ................................................................ 48

6.3 Pertukaran Data Client-Server ...................................... 52

BAB VII PUBLIKASI APLIKASI .................................................. 58

7.1 Rilis Aplikasi ................................................................ 58

7.2 Distribusi Aplikasi ........................................................ 63

Page 5: PEMROGRAMAN MOBILE 2 - stekom.ac.id

1

BAB I

INTENT

Tujuan Pembelajaran :

Setelah mempelajari ini materi intent mahasiswa dapat mengetahui dasar

mekanisme menjalankan dan bertukar data antara yang menjadi dasar

pengembangan aplikasi android.

Intent adalah sebuah mekanisme yang digunakan untuk menjalankan dan

bertukar data antara Activity satu dengan activity lainnya maupun

berinteraksi dengan berbagai komponen pada aplikasi android. Intent

merupakan inti dari sebuah aplikasi android. Sebuah intent dapat terdiri atas

berbagai aksi seperti view, edit, dial dan lain sebagainya.

Jenis intent :

a. Intent Eksplisit

Dalam intent Eksplisit, komponen yang harus dipanggil telah ditentukan

secara jelas.

Kode 1.1

Pada kode diatas, intent digunakan untuk membuat object panggil untuk

menjalankan ActivityKedua. Komponen yang akan dijalankan ditulis

secara jelas.

Page 6: PEMROGRAMAN MOBILE 2 - stekom.ac.id

b. Intent Implisit

Intent Implisit tidak memiliki definisi yang jelas mengenai komponen

yang akan dijalankan, melainkan definisi “aksi yang akan dijalankan”.

Kode 1.2

Pada contoh diatas, browseIntent adalah Intent Implisit yang berguna

ketika ingin membuka halaman web http://www.stekom.ac.id melalui

aplikasi browser internet. Android akan menentukan komponen yang

yang akan menangani Intent tersebut berdasarkan informasi aksi,

kategori, data dan jenis MIME yang cocok.Untuk mengetahui komponen

mana yang cocok menggunakan Intent Filter pada AndroidManifest.xml.

Kode 1.3

Berikut ini beberapa pengaplikasian dari intent :

1.1 Panggil Activity

Normalnya setiap activity menampilkan satu buah user interface

kepada pengguna. Misalnya sebuah activity menampilkan daftar

Page 7: PEMROGRAMAN MOBILE 2 - stekom.ac.id

3

menu minuman, kemudian pengguna dapat memilih satu jenis minuman.

Contoh lainnya pada aplikasi sms, dimana satu activity digunakan

untuk menulis pesan,activity berikutnya untuk menampilkan nomor

kontak tujuan, atau activity lainnya digunakan untuk menampilkan

pesan-pesan lama. Meskipun activity-activity diatas terdapat dalam

satu aplikasi sms, namun masing-masing activity berdiri sendiri.

Untuk pindah dari satu activity ke activity lainnya dapat

melakukan suatu event misalnya tombol diklik atau melalui trigger

tertentu.

Gambar : 1.1 Panggil Intent

Kode 1.4

<Button

android:id="@+id/bInfo"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

Page 8: PEMROGRAMAN MOBILE 2 - stekom.ac.id

android:gravity="center"

android:onClick="keInfo"

android:text="Informasi"/>

Kode 1.5

//mendaftarkan bInfo untuk diberikan aksi

Button btninfo = (Button) findViewById(R.id.bInfo);

//objek btninfo melakukan aksi saat di lakukan klik

btninfo.setOnClickListener(new View.OnClickListener() {

@Override

publicvoid onClick(View v) {

Intent info = newIntent(getApplicationContext(),

HalInfo.class);

startActivity(info);

}

});

Agar android dapat mengenali activity yang dimaksud maka activity

yangharusdidaftarkan pada AndroidManifest.xml jika tidak akan

terjadi force closepada aplikasi. Tambahkan listing kode berikut ini

pada AndroidManifest.xml

Kode 1.6

<activity android:name="HalInfo"

android:label="Info Pengembang">

<intent-filter>

<actionandroid:name="com.panggilactivity.HalInfo"/>

<categoryandroid:name="android.intent.category.DEFAULT"/>

Page 9: PEMROGRAMAN MOBILE 2 - stekom.ac.id

5

</intent-filter>

</activity>

1.2 Sharing Data

Intent dapat digunakan untuk mengirim data dari satu activity ke activity

lainnya atau dari satu aplikasi ke aplikasi lainnya.

a) Share antar activity

Untuk mengirimkan data dalam satu aplikasi (antar activity)

menggunakan metode objekIntent.putExtra (“namavariabel”,data);

Sedangkan untuk mengambil nilai kiriman melalui Intent

menggunakan Bundle extras = getIntent().getExtras();

Kode 1.7

String username=”rohmad”;

String password=”qwerty”;

Intent i = newIntent(getApplicationContext(),

Login.class);

i.putExtra("user", username);

i.putExtra("pass", password);

startActivity(i);

Kode 1.8

String user=””;

String password=””;

Bundle extras = getIntent().getExtras();

if (extras != null) {

user = extras.getString("user");

password = extras.getString("pass");

}

Tugas 1.1 :

Buatlah layout untuk hal1.xml yang berisi EditText nama, alamat dan

nomor telpon kemudian hasilnya ditampilkan pada hal2.xml.

Page 10: PEMROGRAMAN MOBILE 2 - stekom.ac.id

b) Share antar aplikasi

Intent dapat digunakan untuk membungkus data kemudian

membawa data tersebut ke aplikasi lain. Selanjutnya dapat diolah

lebih lanjut seperti pengiriman melalui media sosial atau sharing

data menggunakan Bluetooth.

Fungsi Intent untuk mengirimkan data adalah ACTION_SEND.

Sebelum data dikirimkan diperlukan pemilihan aplikasi yang akan di

gunakan untuk share data menggunakan fungsi createChooser().

Kode 1.9

Intent sharingData = newIntent(Intent.ACTION_SEND);

sharingData.setType("text/html");

sharingData.putExtra(android.content.Intent.EXTRA_

TEXT, Html.fromHtml("<p> Share Data

<br>Rohmad Abidin </p>"));

startActivity(Intent.createChooser(sharingData,

"Share via"));

Gambar 1.3 Share antar aplikasi

Page 11: PEMROGRAMAN MOBILE 2 - stekom.ac.id

7

1.3 Short Message Service (SMS)

Untuk menggunakan SMS dengan Intent, aplikasi tidak diharuskan

menyerakan ijin khusus. Aplikasi dapat menggunakan Fungsi

ACTION_SENDTO dengan melewatkan parameter nomor telepon yang

akan menerima pesan dengan bentuk sms:[nomor yang dituju]. Data

pesan yang akan dikirimkan dimasukkan ke dalam data ekstra Intent.

Kode 1.120

privatevoid sendSMS(String string)

{

Intent intentSms=newIntent(Intent.ACTION_SENDTO,

Uri.parse("sms:085647793000"));

intentSms.putExtra("sms:body", string);

startActivity(intentSms);

}

Tugas 1.2 :

Buatlah sebuah project bernama NamaandaSMS, buat user interface

(layout) yang berisi nomor telepon dan isi pesan. Kirim sms kepada

teman anda menggunakan aplikasi tersebut.

Page 12: PEMROGRAMAN MOBILE 2 - stekom.ac.id

BAB II

SERVICE

Tujuan Pembelajaran :

Setelah mempelajari materi service, diharapkan mahasiswadapat

mengetahui cara membuat aplikasi yang dapat berjalan dibelakang layar.

2.1 Background Service

Service (android.app.service) adalah komponen di dalam arsitektur

android yang membuat aplikasi mampu menjalankan tugas dibelakang

layar, tanpa user interface (UI) dan tanpa interaksi secara langsung

dengan pengguna. Service dijalankan, dihentikan dan dikendalikan dari

komponen lain seperti Activity, BroadcastReceiver, atau Service yang

lain. Meskipun activity sudah ditutup Service tetap dapat berjalan.

Meskipun berjalan dibelakang layar, Service dijalankan di Thread

Utama aplikasi (UI thread). Service memiliki prioritas lebih tinggi

dibandingkan dengan Activity yang tidak aktif atau tidak terlihat.

Walaupun begitu, service dapat dimatikan dan dihapus oleh android

bilamana dibutuhkan memori untuk memenuhi kebutuhan aplikasi yang

sedang berjalan. Untuk mengatasi kondisi ini, Service dapat

dikonfigurasi agar dijalankan ulang secara otomatis ketika memori

tersedia.

Contoh aplikasi yang menggunakan Service adalah telepon dan pemutar

musik. Ketika sedang melakukan panggilan telpon dan disaat yang sama

kembali kehalaman home dan menjalankan aplikasi lain (missal: SMS)

dan tetap dapat melakukan panggilan telepon.

Page 13: PEMROGRAMAN MOBILE 2 - stekom.ac.id

9

Ada 2 macam cara Servis dilakukan oleh aplikasi, yaitu dengan

menjalankan langsung (started) menggunakan Context.startService()

atau dengan mengikatnya (bound) menggunakan Context.bindService()

atau kombinasi kedua cara tersebut.

a. Started

Service yang dijalankan dengan startService() dan akan terus aktif

selama belum dihentikan secara eksplisit menggunakan

stopService() atau stopSelf() atau ketika kondisi kehabisan memori

terjadi.

b. Bound

Service yang diikat menggunakan bindService() akan dijalankan

terus, sepanjang masih ada aplikasi yang terikat. Ketika aplikasi

terakhir memanggil unbindService(), maka service juga akan

ditutup. Keuntungan menggunakan metode pengikatan adalah

aplikasi dan Service dapat saling bertukar data dengan model client-

server.

Masa Hidup Service :

onCreate()

Ketika startService() atau bindService() dipanggil pertama kali,

instance Service yang terdaftar di file Android Manifes akan

diciptakan. Keika instance Service telah siap, metode onCreate()

milik instance Service akan dipanggil satu kali.

onStartCommand()

bila service dipanggil dengan startService(), metode

onStartCommand() akan dipanggil setelah onCreate() pada saat

Page 14: PEMROGRAMAN MOBILE 2 - stekom.ac.id

ini, Service telah aktif sepenuhnya. Metode startService() dapat

dipanggil ketika instant service sudah tercipta. Oleh karena itu,

onStartCommand() dapa dipanggil berulang-ulang selama masa

hidup Service. Metode onStartCommand() mengharapkan tiga

parameter, yaitu instant Intent, flag berisi bagaimana Service

dijalankan, dan pengenal startId.

onBind()

Metode onBind() dipanggil ketika service diikat dengan

bindService(). Ia dipangil tepat setelah onCreate(). Pada saat ini

servis telah aktif.Jika ingin membuat Service yang dapat

bertukar data dengan model client-server, anda harus

mengembalikan instance objek yang mengimplementasi

interface IBinder. Metode onBind() dapat dipanggil berulang-

ulang sebanyak jumlah pemanggilan bindService().

onUbind()

Ketika client terakhir memanggil unbindService(), metode

onUnbind() akan dipanggil. Jika anda mengembalikan nilai true,

artinya onRebind() akan dipanggilbila ada client baru yang

terhubung.

onDestroy()

Ketika stopService() atau stopSelf() dipanggil, service akan

keluar dari masa aktif service. Sebelum instance servis dihapus,

metode onDestroy() akan dipanggil.

Page 15: PEMROGRAMAN MOBILE 2 - stekom.ac.id

11

Turunan Service yang digunakan untuk menjalankan tugas

dibelakang layar diluar thread utama adalah IntentService.

IntentService akan menciptakan sebuah Thread terpisah

sehingga memungkinkan aplikasi menjalankan tugas dibelakang

layar tanpa menghentikan Thread utama.

Gambar 1.4 Diagram masa hidup Service

startService()

pertama kali

onCreate()

onStartCommand()

onDestroy()

Service aktif dan

berjalan

Service shutdown

startService()

pertama kali

onCreate()

onBind()

onDestroy()

Service aktif dan

diikat

Service

shutdown

onUnbind()

bindService()

berikunya

unBindService ()

klien terakhir

startService()

berikunya

stopService()/

stopSelf()

Page 16: PEMROGRAMAN MOBILE 2 - stekom.ac.id

2.2 Telpon service

Telephony mengacu pada komunikasi suara dalam bentuk sinyal listrik

yang dirambatkan melalui jaringan telepon.

Perlu diketahui bahwa sejak versi 2.1 Android tidak hanya ditujukan

untuk ponsel bergerak. Saat ini sudah banyak perangkat bukan telepon

berbasis android yang dirilis, misalnya computer tablet, tv box, smart

watch dan lain-lain.

Untuk memperluas fungsi aplikasi tidak salahnya disertakan fungsi

telepon. Akan tetapi jika anda mewajibkan fitur telephony dan ada

pengguna yang menggunakan perangkat tanpa fitur telepon, maka

program anda tidak akan ditampilkan dalam hasil pencarian android

market. Hal itu dipergunakan untuk menghindarkan pengguna dari

aplikasi yang tidak bisa dijalankan pada perangkat mereka. Sehingga

sebelum memasang fitur telephony sebaiknya dipertimbangkan secara

matang.

Untuk dapat menggunakan fitur telepon diperlukan penambahan kode

pada AndroidManifest.xml

Kode 2.1

<uses-feature

android:name=”android.hardware.telephony”

android:required=”true”/>

Jika anda menginginkan aplikasi anda dapat berjalan pada perangkat

yang tidak memiliki fitur telepon, silahkan ganti nilai

android:required menjadi false.

Page 17: PEMROGRAMAN MOBILE 2 - stekom.ac.id

13

Android mendukung 2 protokol untuk panggilan telpon, yaitu tel:

(RFC 3966) dan wtai: (Wireless Telephone Application Interface)

sebuah protocol yang digunakan bersama sama dengan WAP

(Wireless Application Protocol). Contoh menyatakan sebuah nomor

telepon yang dapat dihibungi, menggunakan alamat URI (Uniform

Resource Indetifier) yaitu tel:[nomor_telpon] untuk wtai

menggunakan format wtai://wp/mc;[nomor_telepon] .

Untuk menggunakan panggilan keluar melalui aplikasi, gunakan

fitur panggilan yang telah disediakan android melalui intent bernama

ACTION_DIAL atau ACTION_CALL. ACTION_DIAL adalah

intent yang akan menampilkan layar tombol dial untuk memulai

panggilan dan pengguna harus menekan tombol dial untuk memulai

panggilan. ACTION_CALL adalah intent yang akan langsung

memulai panggilan keluar tanpa menampilkan layar tombol dial dan

tanpa perlu menekan tombol lagi. Pada ACTION_DIAL nomor

telepon tidak wajib ada, sedangkan ACTION_CALL nomor telepon

wajib ada.

Aplikasi yang menggunakman ACTION_DIAL tidak membutuhkan

izin khusus, sedangkan ACTION_CALL membutuhkan izin

CALL_PHONE pada AndroidManifest.xml

Kode 2.2

<uses-permission

android:name="android.permission.CALL_PHONE"/>

Page 18: PEMROGRAMAN MOBILE 2 - stekom.ac.id

Kode 2.3

private void performDiall(String nomorTelp)

{

Intent intentCall=new Intent(Intent.

ACTION_DIAL,Uri.parse("tel:"+Uri.encode

(nomorTelp)));

startActivity(intentCall);

}

Untuk langsung melakukan panggilan keluar ganti ACTION_DIAL

dengan ACTION_CALL.

Page 19: PEMROGRAMAN MOBILE 2 - stekom.ac.id

15

BAB III

DATA STORAGE

Tujuan Pembelajaran :

Setelah mempelajari materi data storage, mahasiswa diharapkan dapat

memanfaatkan media penyimpanan pada perangkat.

Data Storage adalah sebuah perangkat yang digunakan untuk menyimpan

data atau informasi. Data yang dimaksud disini adalah data ponsel, sim, data

yang disimpan dalam memori internal dan eksternal serta penyimpan data

database SQLite. Dengan mengetahui cara mengakses data-data tersebut

diatas maka pengembangan aplikasi android akan semakin luas misalnya

mencegah penggunaan aplikasi oleh dua perangkat berbeda dengan id yang

sama.

3.1 Membaca Data Ponsel dan Sim

Data ponsel seperti jenis ponsel (GSM atau CDMA), memiliki pengenal

unik ponsel (IMEI untuk GSM atau MEID untuk CDMA), dan nomor

telepon dapat diminta oleh aplikasi. Untuk membaca jenis ponsel

menggunakan getPhoneType() milik TelephonyManager. Hasil

pemrosesan ini bernilai integer. Kode untuk mengetahui type perangkat

yaitu PHONE_TYPE_GSM, PHONE_TYPE_CDMA atau

PHONE_TYPE_NONE untuk perangkat yang tidak memiliki fitur

telepon seperti tablet.

Page 20: PEMROGRAMAN MOBILE 2 - stekom.ac.id

Kode 3.1

String networkType;

TelephonyManager telephonyManager =

(TelephonyManager)getSystemService(Context.TELEPH

ONY_SERVICE);

int phoneType = telephonyManager.getPhoneType();

switch (phoneType) {

case (TelephonyManager.PHONE_TYPE_CDMA):

networkType = "CDMA";

break;

case (TelephonyManager.PHONE_TYPE_GSM):

networkType = "GSM";

break;

case (TelephonyManager.PHONE_TYPE_NONE):

networkType = "None";

break;

default:

networkType="";

break;

}

//membaca IMEI (GSM) atau MEID (CDMA)

String deviceId = telephonyManager.getDeviceId();

//membaca nomor telepon

String phoneNumber =

telephonyManager.getLineNumber();

//membaca versi software

String softwareVersion = telephonyManager.

getDeviceSoftwareVersion();

Untuk membaca data SIM gunakan kode berikut ini :

Kode 3.2

//sim Country ISO Code

String simCountry=telephonyManager.getSimCountryIso();

//Operator Code (MMC+ MNC)

String OperatorCode=telephonyManager.getSimOperator();

//Nama SIM Operator

String OperatorName=telephonyManager.getSimOperatorName();

//SIM Serial Number

String simSerial = telephonyManager.getSimSerialNumber();

Page 21: PEMROGRAMAN MOBILE 2 - stekom.ac.id

17

Untuk membaca data tersebut diperlukan ijin READ_PHONE_STATE

pada AndroidManifest.xml.

Kode 3.3

<uses-permission

android:name="android.permission.READ_PHONE_STATE"/>

Gambar 3.1 Menampilkan informasi ponsel dan SIM

3.2 Shared preferences

Sering aplikasi harus menyimpan data yang nantinya akan digunkan

kembali. Seperti diijinkannya pengguna mengatur konfigurasi aplikasi

sesuai keinginan. Data konfigurasi perlu disimpan agar ketika aplikasi

dijalankan dilain waktu dapat menerapkan pengaturan yang telah dibuat

sebelumnya. Shared preferences merupakan sebuah framework

(kerangka) umum, yang memungkinkan user (pengguna ) menyimpan

data secara private, dalam bentuk key/value pairs (kunci nilai

Page 22: PEMROGRAMAN MOBILE 2 - stekom.ac.id

berpasangan ) dari tipe data primitif. Contoh tipe data primitif seperti :

booleans, floats, ints, longs, and strings dll.

Shared Preferences cocok untuk penggunaan data kecil seperti

menyimpan setting aplikasi dan informasi mengenai user interface. Data

dalam shared preferences disimpan dalam device android dalam bentuk

XML.

Gambar 3.2 Contoh dialog pengaturan konfigurasi

Ada tiga mode untuk shared preferences :

MODE_PRIVATE

Hanya aplikasi yang membuat Shared Preferences yang dapat

mengakses data

MODE_WORLD_READABLE

Aplikasi lain boleh membaca

Page 23: PEMROGRAMAN MOBILE 2 - stekom.ac.id

19

MODE_WORLD_WRITEABLE

Aplikasi lain boleh membaca sekaligus menulis

a. Penyimpanan Shared Preferences

Shared Preferences menyimpan data dalam file XML di direktori

bernama data/data/[package]/shared_prefs, dimana [package] adalah

nama paket aplikasi yang digunakan.

Gambar 3.3 Lokasi file XML berisi data preferensi

b. Mendapatkan Instance Shared Preferences

Untuk mendapatkan instance Shared Preferences menggunakan method

getSharedPreferences() atau getPreferences(). Keduanya

mengembalikan data bertipe Shared Preferences. getSharedPreferences()

Page 24: PEMROGRAMAN MOBILE 2 - stekom.ac.id

adalah method anggota tipe android.content.Context, sedangkan

getPreferences() adalah method anggota tipe activity.

Kode 3.4

SharedPreferences pref;

pref = getSharedPreferences("rohmad_pref",

MODE_PRIVATE);

//atau

SharedPreferences prefs;

prefs = getPreferences(MODE_PRIVATE);

c. Menulis data ke Shared Preferences

Untuk menulis data kedalam Shared Preferences diperlukan instance

SharedPreferences.Editor dengan memanggil metode edit(). Penulisan

data dikerjakan menggunakan metode-metode yang disediakan oleh tipe

SharedPreferences.Editor antara lain putBoolean(), putFloat(),

putString, putInt() dan putLong(). Selanjutnya memanggil metode

commit() untuk membuat perubahan menjadi permanen. Contoh untuk

penulisan tipe string dan integer sebagai berikut :

Kode 3.5

SharedPreferences pref =

getSharedPreferences("rohmad_pref",MODE_PRIVATE);

SharedPreferences.Editor ed = pref.edit();

//tulis

ed.putString("nama", "Rohmad Abidin");

ed.putInt("umur", 29);

ed.commit();

Page 25: PEMROGRAMAN MOBILE 2 - stekom.ac.id

21

d. Membaca data dari Shared Preferences

Untuk membaca data, tipe SharedPreferences menyediakan beberapa

metode untuk memuat data dalam berbagai tipe antara lain, getBoolean,

getFloat(), getString(), getInt(), dan getLong(). Keempat metode

tersebut mempunyai 2 parameter yaitu nama key dan nilai default yang

akan dikembalikan seandainya nilai yang diacu oleh key tidak ada.

Nama key mengacu pada atribut name pada file XML preferensi. Contoh

membaca data yang bertipe string dan integer sebagai berikut :

Kode 3.6

String nama = pref.getString("nama","");

int umur = pref.getInt("umur", 0);

3.3 Internal & External Storage

a. Java I/O

Android juga mendukung penyimpanan data file gambar atau file

lainnya. Untuk menyimpan data berbentuk file maka proses

penyimpanan tidak membutuhkan pasangan key/value seperti

Shared Preferences. Untuk dapat menyimpan data file dapat

menggunakan pustaka java I/O. Pustaka ini menyediakan tipe

FileInputStream dan FileOutputStream yang akan mengabstraksi

data yang akan dimuat. Proses menulis dan memuat data ke atau dari

file dibungkus dalam tipe OutputStreamWriter dan

InputStreamReader.

Page 26: PEMROGRAMAN MOBILE 2 - stekom.ac.id

Intance tipe FileOutputStream dapat diperoleh dengan beberapa

cara. Selain menggunakan tipe dan metode dalam pustaka Java I/O,

dapat menggunakan openFileOutput(). Metode ini digunakan

android untuk menyederhanakan proses memuat file ke

FileOutputStream. Metode ini mengharapkan dua parameter, yaitu

nama file dan mode penciptaan file dan mengembalikan instance

fileOutputStream. Setelah memiliki instance FileOutputStream,

lakukan manipulasi terhadap data file dengan terlebih dahulu

menciptakan instance OutputStreamWriter menggunakan instance

FileOutputStream.

Kode 3.7

private void doSave(String filename, String data)

throws IOException {

FileOutputStream fOut;

fOut = openFileOutput(filename,MODE_WORLD_READABLE);

OutputStreamWriter osw;

osw = new OutputStreamWriter(fOut);

osw.write(data);

osw.flush();

osw.close();

}

Jika anda tidak menentukan direktori, file akan disimpan secara

default pada direktori data/data/[nama_paket]/files/namafile

Page 27: PEMROGRAMAN MOBILE 2 - stekom.ac.id

23

Gambar 3.4 Contoh letak file bila direktori tidak ditentukan

Untuk memuat data dari file Android menyediakan openFileInput()

untuk menyederhanakan proses mendapatkan instance

FileOutputStream dari nama file. Dari instance FileOutputStream

ini, anda dapat menciptakan instance tipe InputStreamReader untuk

proses baca file.

Kode 3.8

private String doLoad(String fileName) throws

IOException

{

String str="";

FileInputStream fIn;

fIn = openFileInput(fileName);

InputStreamReader isr;

isr= new InputStreamReader(fIn);

Page 28: PEMROGRAMAN MOBILE 2 - stekom.ac.id

char[] inputBuffer = new char[128];

int intNumRead;

while ((intNumRead=isr.read(inputBuffer))>0)

{

//ubah char ke string

str +=String.copyValueOf(inputBuffer,0,

intNumRead);

}

isr.close();

return str;

}

b. Melakukan Baca Tulis pada Internal dan External Storage

Setiap perangkat biasanya memiliki memori internal yang dapat

digunakan untuk menyimpan file tambahan dan memiliki slot untuk

memori eksternal yang berupa kartu memori.

Untuk dapat melakukan baca tulis pada InternalStorage diperlukan

ijin permission pada AndroidPermission.xml

Kode 3.9

<uses-permission

android:name="android.permission.READ_INTERNAL

_STORAGE" />

<uses-permission

android:name="android.permission.WRITE_INTERNA

L_STORAGE" />

Sedangkan untuk dapat menggunakan memori eksternal untuk

melakukan baca tulis diperlukan ijin permission pada

AndroidManifest.xml

Page 29: PEMROGRAMAN MOBILE 2 - stekom.ac.id

25

Kode 3.10

<uses-permission

android:name="android.permission.READ_EXTERNAL

_STORAGE" />

<uses-permission

android:name="android.permission.WRITE_EXTERNA

L_STORAGE" />

Untuk menyimpan data pada memori eksternal, programmer harus

melakukan pengecekan apakah memori tersebut ada dan dapat

dilakukan baca tulis atau tidak, ataukah hanya bias dibaca saja tanpa

bisa ditulis. Pemanggilan fungsi Environment.MEDIA_MOUNTED

untuk media yang dapat dilakukan baca tulis dan Environment

.MEDIA_MOUNTED_READ_ONLY untuk media yang hanya bisa

dibaca dan tidak bisa ditulis. Metode akan menghasilan tipe data

booelan (true/false).

Kode 3.11

private boolean isExternalStoragePresent()

{

boolean mExternalStorageAvailable = false;

boolean mExternalStorageWriteable = false;

String state =

Environment.getExternalStorageState();

if (Environment.MEDIA_MOUNTED.equals(state)) {

// bisa membaca dan menulis media

mExternalStorageAvailable =

mExternalStorageWriteable = true;

Page 30: PEMROGRAMAN MOBILE 2 - stekom.ac.id

} else if

(Environment.MEDIA_MOUNTED_READ_ONLY.equ

als(state)) {

// hanya bisa membaca media

mExternalStorageAvailable = true;

mExternalStorageWriteable = false;

} else {

//ada yang salah, tidak diketahui bisa

dibaca tulis atau tidak

mExternalStorageAvailable =

mExternalStorageWriteable = false;

}

if (!((mExternalStorageAvailable) &&

(mExternalStorageWriteable))) {

Toast.makeText(getApplicationContext(),

"Tidak ada Memori External, file

tersimpan di Memori Internal",

Toast.LENGTH_LONG)

.show();

}

return (mExternalStorageAvailable) &&

(mExternalStorageWriteable);

}

Untuk menyimpan file anda harus menyetahui lokasi direktori

tersebut. Tipe Environment menyediakan metode static

getExternalStorageDirectory() yang akan mengembalikan lokasi

direktori penyimpanan eksternal dalam sebuah instance tipe file.

Dari instance file ini, anda dapat mengetahui lokasi direktori dengan

memanggil getPath(), getAbsolutePath() atau getCanonicalPath().

Page 31: PEMROGRAMAN MOBILE 2 - stekom.ac.id

27

Kode 3.12

File exStorage =

Environment.getExternalStorageDirectory();

String exDir = exStorage.getAbsolutePath();

Untuk membaca atau menulis file di direktori penyimpanan

eksternal maupun internal, ciptakan instance file dan melewatkan

nama direktori serta nama dile yang anda akan menipulasi. Dari

instance file tersebut, anda menciptakan instance FileOutputStream

dan FileInputStream.

Kode 3.13

File txtFile = new File(exDir, "textdata.txt");

FileInputStream fIn = new FileInputStream(txtFile);

InputStreamReader isr = new InputStreamReader(fIn);

3.4 SQLITE

Android menyediakan system manajemen database yang ringan dan

cocok untuk perangkat mobile yang memiliki sumber daya terbatas yang

disebut SQLite. SQLite diciptakan untuk menyimpan data relasional.

File atau data akan disimpan terstruktur di database secara private.

SQLite dirancang sebagai pustaka yang berdiri sendiri dengan seminimal

mungkin mengurangi ketergantungan pada pustaka lain.

Pada umumnya aplikasi dengan embedded database tidak menyertakan

database yang sudah berbentuk pada saat aplikasi itu diinstal pada

perangkat. Jadi yang diinstal hanya programnya, sedangkan databasenya

Page 32: PEMROGRAMAN MOBILE 2 - stekom.ac.id

tidak ada sama sekali. Database akan dibuat pada saat aplikasi itu

dijalankan pertama kali, yaitu program akan memeriksa apakah database

ditemukan. Jika database tidak ditemukan maka serangkaian perintah

SQL akan menjalankan perintah CREATE yang akan membentuk file

database diikuti dengan table-table di dalamnya. Tentunya programmer

harus membuat sendiri perintah SQL tersebut secara spesifik tergantung

struktur data di dalam aplikasi yang dibuatnya. Ini adalah teknik yang

biasanya digunakan programmer dalam membuat sebuah aplikasi

dengan embedded database dimana ia tidak menyertakan file database di

dalam paket instalasi aplikasi.

SQLite tidak mengadopsi model klient-server. Melalui pustaka SQLite,

aplikasi dapat langsung mengelola database di file tanpa melalui aplikasi

server. Keuntungannya, langkah setup akan lebih mudah. Anda tidak

akan menemukan kerumitan konfigurasi server seperti pada system

manajemen database lain. Sedangkan kekurangannya, karena dikelola

sendiri, integritas database sangat berpengaruh pada praktik

pemrograman yang baik.

a. Menciptakan Database

SQLite di android tidak mempunyai aplikasi bantuan sebagai antar

muka pengelolaan database. Android menyediakan instance

SQLiteOpenHelper untuk menciptakan database dan struktur table di

dalamnya. Untuk menggunakannya aplikasi harus membuat turunan

tipe ini. Ada 2 metode SQLiteOpenHelper yang harus anda

turunkan, yakni :

Page 33: PEMROGRAMAN MOBILE 2 - stekom.ac.id

29

onCreate(SQLiteDatabase adb). Metode ini dipanggil ketika

database telah diciptakan. Dalam metode ini, ciptakan tabel-

tabel yang diperlukan.

onUpgrade(SQLiteDatabase adb). Metode yang dipanggil ketika

database perlu di-upgrade. Metode ini akan dipanggil ketika

versi database aplikasi berubah.

Berikut ini contoh sebuah kelas SQLiteHelper yang merupakan

perluasan dari kelas SQLiteOpenHelper

Kode 3.14

public class SQLiteHelper extends SQLiteOpenHelper

{

private static final String nama_database =

"laporan.db";

private static final int versi_database = 1;

private static final String buat_tabel_barang =

"CREATE TABLE IF NOT EXISTS

tabel_barang(kode TEXT PRIMARY KEY,nama

TEXT,harga INTEGER, jumlah INTEGER)";

private static final String hapus_tabel_barang =

"DROP TABLE IF EXISTS buat_tabel_barang";

public SQLiteHelper(Context context) {

super(context, nama_database, null,

versi_database);

}

@Override

public void onCreate(SQLiteDatabase

sqLiteDatabase) {

sqLiteDatabase.execSQL(buat_tabel_barang);

System.out.println("tabel_barang sudah dibuat");

}

Page 34: PEMROGRAMAN MOBILE 2 - stekom.ac.id

@Override

public void onUpgrade(SQLiteDatabase database, int

versi_lama, int versi_baru) {

database.execSQL(hapus_tabel_barang);

onCreate(database);

}

}

b. Instance SQLiteDatabase

Untuk memanipulasi data ada beberapa metode yang dapat

digunakan yaitu :

exectSQL()

mengirimkan perintah SQL yang bukan SELECT atau perintah

lain yang mengembalikan data. Jika anda akrab dengan sintaks

bahasa SQL, metode ini cocok untuk anda karena anda diminta

menuliskan syntax SQL secara langsung.

insert()

menambahkan record baru ke dalam sebuah table. Anda tidak

menyusun perintah SQL secara langsung.

delete()

menghapus record dari sebuah table. Anda tidak menyusun

perintah SQL secara langsung.

update()

Memperbaharui isi record dalam sebuah table. Anda tidak

menyusun perintah SQL secara langsung.

rawQuery()

Page 35: PEMROGRAMAN MOBILE 2 - stekom.ac.id

31

Menjalankan perintah SQL yang mengembalikan data seperti

SELECT. Anda harus menyusun perintah SELECT.

query()

Memuat data dari table. Anda tidak menyusun perintah SQL

SELECT secara langsung.

Berikut ini contoh penggunaan instance SQLite :

Kode 3.15

public void hapus_barang(int kode) {

SQLiteDatabase database = this.getWritableDatabase();

database.execSQL("DELETE FROM tabel_barang WHERE

kode ='" + kode+ "'");

database.close();

}

public int update_barang(int kode, String nama,

int harga, int jumlah) {

SQLiteDatabase database =

this.getWritableDatabase();

ContentValues recordBarang = new ContentValues();

recordBarang.put("nama", nama);

recordBarang.put("harga", harga);

recordBarang.put("jumlah", jumlah);

return database.update("tabel_barang",

recordBarang, "kode=" + kode, null);

}

public void tambah_barang(String idbrg, String

namabrg, int harga, int jumlah) {

SQLiteDatabase database =

this.getWritableDatabase();

ContentValues values = new ContentValues();

Page 36: PEMROGRAMAN MOBILE 2 - stekom.ac.id

values.put("kode", idbrg);

values.put("nama", namabrg);

values.put("harga", harga);

values.put("jumlah", jumlah);

database.insert("tabel_barang", null, values);

database.close();

}

c. Menampilkan data database SQLite

Untuk melihat data pada database SQLite pada emulator, tambahkan

plugin com.questoid.sqlitebrowser_1.2.0.jar ke dalam folder plugin.

Gambar 3.5 Letak Folder Plugin

Selanjutnya buka File Explorer , lokasi database SQLite berada pada

direktori bernama data/data/[package]/databases, dimana

[package] adalah nama paket aplikasi yang digunakan.

Sorot database yang dimaksud, kemudian klik SQLite Browser

sebelah kanan.

Page 37: PEMROGRAMAN MOBILE 2 - stekom.ac.id

33

Gambar3.6 Letak database dan SQLite Browser

Pada tab QuestoidSQLiteBrowser pilih Browse Data kemudian pilih

tabel yang ingin ditampilkan.

Gambar 3.7 Menampilkan record pada SQLite Browser

SQLite Browser

Page 38: PEMROGRAMAN MOBILE 2 - stekom.ac.id

BAB IV

ANDROID WEB

Tujuan Pembelajaran :

Setelah mempelajari materi android web diharapkan mahasiswa dapat

mengerti dasar pengaksesan server melalui aplikasi android.

4.1 Linkify

Secara default, teks yang berada pada TextView bersifat read only dan

tidak dapat di klik walaupun teks tersebut adalah sebuah link website

maupun email. Android sudah menyediakan sebuah tools khusus sendiri

agar proses tersebut menjadi mudah, yaitu dengan menggunakan class

Linkify. Class Linkify secara otomatis akan mendeteksi link yang sesui

untuk link yang akan di eksekusi. Class ini dapat digunakan pada

TextView yang telah di atur.

Untuk menggunakan class ini diperlukan import class Linkify.

Kode 4.1

import android.text.util.Linkify;

Untuk menambahkan aksi pada Text View diperlukan pemanggilan

metode addLinks pada class Linkify.

Kode 4.2

Linkify.addLinks(teksview, Linkify.ALL);

Page 39: PEMROGRAMAN MOBILE 2 - stekom.ac.id

35

Contoh Penerapan :

Kode 4.3

<TextView

android:id="@+id/links"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

TextView tvLinks = (TextView)

findViewById(R.id.links);

tvLinks.setText("Rohmad Abidin \n" +

"Stekom Siliwangi \n" +

"http://www.stekom.ac.id \n" +

"+6285647793633 \n" +

"[email protected] \n");

// proses menambahkan Links pada TextView

Linkify.addLinks(tvLinks, Linkify.ALL);

Gambar 4.1 TextView yang telah menjadi link

Class Linkify secara otomatis akan mengarahkan aksi yang cocok untuk

link yang telah dibuat, jika hanya sebuah Teks biasa yang tidak

mengandung unsure link, maka teks tersebut tidak akan memiliki aksi.

Untuk menjalankan aksi tidak diperlukan permission pada

AndroidManifest.xml.

Page 40: PEMROGRAMAN MOBILE 2 - stekom.ac.id

4.2 WebView

WebView adalah turunan dari View untuk menampilkan halaman web

aplikasi. WebView dibangun atas WebKit browser engine, sama seperti

aplikasi Browser yang disediakan Android. Menu, toolbar atau scrollbar

seperti pada browser pada umumnya tidak akan terlihat karena yang

ditampilkan hanya isi webnya saja.

WebView cocok untuk menampilkan sesuatu yang dapat berubah.

WebView biasanya digunakan untuk menampilkan konten yang

kompleks dan sering terjadi perubahan. WebView mampu menampilkan

konten web baik online maupun offline, mendukung penuh teknologi

HTML5, JavaScript dan CSS.

WebKit adalah pustaka rendering engine open source yang berfungsi

menampilkan halaman web. WebKit juga menyediakann fitur interaksi

seperti mengikuti link yang di klik oleh pengguna. WebKit adalah

proyek open source sehingga banyak pengembang OS yang

menggunakannya. Versi WebKit satu dengan lainnya mungkin memiliki

sedikit perbedaan.

WebView menggunakan Chromium yaitu browser enggine yang berada

di belakang web browser Chrome. Chromium menggunakan blink,

rendering engine turunan WebKit.

Untuk menggunakan WebView yang dapat mengakses halaman web

secara online harus mengertakan ijin permission.INTERNET, namun

untuk memuat halaman web yang berada dipenyimpanan lokal, anda

tidak membutuhkan ijin khusus.

Page 41: PEMROGRAMAN MOBILE 2 - stekom.ac.id

37

Kode 4.4

<uses-permission

android:name="android.permission.INTERNET" />

Instance WebView

Untuk menciptakan instance WebView diperlukan layout untuk

menampilkannya. Tambahkan kode berikut pada layout (xml).

Kode 4.5

<WebView

android:id="@+id/webViewDemo"

android:background="#00ffcc"

android:layout_width="match_parent"

android:layout_height="match_parent" />

Untuk activitynya tambahkan kode berikut ini :

Kode 4.6

WebView webview =(WebView)findViewById

(R.id.webViewDemo);

webview.setWebViewClient(new WebViewClient());

webview .getSettings().setJavaScriptEnabled(true);

webview .getSettings().setDomStorageEnabled(true);

webview.loadUrl("http://stekom.ac.id ");

Page 42: PEMROGRAMAN MOBILE 2 - stekom.ac.id

Gambar 4.2 Website STEKOM ditampilkan dengan WebView

Untuk menampilkan WebView secara offline anda diharuskan memiliki

sebuat file .html yang telah anda simpan pada sebuah tempat. Misalnya :

direktori asset/bantuan.html . Untuk memuat gunakan loadUrl().

Kode 4.7

//memuat dokumen bantuan.html

webview.loadUrl("file:///android_asset/bantuan.html");

//memuat file gambar dari res/drawable

webview.loadUrl("file:///android_res/drawable/ic_laun

cher.png");

Page 43: PEMROGRAMAN MOBILE 2 - stekom.ac.id

39

Tugas :

Buatlah sebuah project yang menampilkan button pengembang dan button

menuju halaman facebook anda. Arahkan button pengembang pada sebuah

halaman html yang anda modifikasi sendiri dan letakkan pada folder asset.

Untuk button link menuju facebook berfungsi menampilkan halaman

facebook anda pada WebView.

Page 44: PEMROGRAMAN MOBILE 2 - stekom.ac.id

BAB V

LOCATION BASED SERVICE

Tujuan Pembelajaran :

Setelah mempelajari materi Location Based Service diharapkan

mahasiswa dapat membuat dan mengembangkan aplikasi berbasis lokasi.

5.1 GPS

Suatu gadged dapat mendapatkan lokasi dari GPS, Network Location

Provider atau bisa dari keduanya. Cell-id (sim card), dan wifi adalah

contoh Network Location Provider.

Fungsi utama GPS adalah pemetaan, pencarian lokasi dan arah.

Teknologi GPS pada awalnya dikembangkan untuk pekerluan militer,

namun kemudian dibuka untuk umum. Teknologi GPS terdiri dari

konstelasi 27 satelit yang mengelilingi bumi (24 satelit aktif ditambah 3

satelit cadangan).

Untuk keperluan pemetaan, permukaan bumi dipetakan menggunakan

system koordinat 2D. tiap titik di permukaan bumi diacu oleh dua

besaran yaitu latitude (lintang) dan longitude (bujur).

Teknik penentuan lokasi piranti penerima GPS menggunakan titik

perpotongan empat persamaan ruang berbentuk bola (3D trilateration)

bukan lingkaran, mengingat pancaran sinyal GPS dari satelit menyebar

kesegala arah membentuk bola. Untuk 3D trilateration, jumlah satelit

yang digunakan paling tidak adalah 4 satelit.

Page 45: PEMROGRAMAN MOBILE 2 - stekom.ac.id

41

5.2 Mendapatkan Nilai Longitude dan Latitude

Untuk dapat menggunakan GPS diperlukan permission pada

AndroidManifest.xml berikut ini :

Kode 5.1

<uses-permission

android:name="android.permission.ACCESS_FINE_LOC

ATION" />

<uses-permission

android:name="android.permission.ACCESS_COARSE_L

OCATION" />

<!-- tambahan feature jika target android 5.0 (API

Level 21 keatas) -->

<uses-feature

android:name="android.hardware.location.gps" />

ACCESS_FINE_LOCATION merupakan ijin untuk menentukan lokasi

dari GPS, ACESS_COARSE_LOCATION merupakan ijin untuk

menentukan lokasi dari cell-id dan wifi.

Untuk activity nya tambahkan kode berikut ini :

Kode 5.2

GPSTracker gps = new

GPSTracker(AndroidGPSTrackingActivity.this);

// Check if GPS aktif

if(gps.canGetLocation()) {

double latitude = gps.getLatitude();

double longitude = gps.getLongitude();

Toast.makeText(getApplicationContext(), "Your

Location is - \nLat: " + latitude + "\nLong: "

+ longitude, Toast.LENGTH_LONG).show();

Page 46: PEMROGRAMAN MOBILE 2 - stekom.ac.id

} else {

// tidak bisa mendapatkan data, minta pengguna

aktifkan GPS.

gps.showSettingsAlert();

}

Gambar 5.1 hasil pencarian Longitude dan Latitude GPS

5.3 Permintaan Alamat

Google sebagai raksasa dibidang teknologi telah memetakan sebagian

bumi dengan google map. Kita dapat meminta alamat sesuai dengan data

longitude dan latitude secara gratis dan data yang ditampilkan

menggunakan format JSON.

Page 47: PEMROGRAMAN MOBILE 2 - stekom.ac.id

43

Anda bisa mencoba dengan memasukkan alamat web berikut ini pada

browser anda :

Kode 5.3

http://maps.googleapis.com/maps/api/geocode/json?latl

ng=-6.9875089,110.3675197&sensor=true

Alamat web diatas merupakan link untuk mendapatkan alamat secara

lengkap dari kampus STEKOM Siliwangi berdasarkan data pada Google

Map. -6.9875089 merupakan nilai Latitude dan 110.3675197

merupakan nilai Latitude.

5.4 Marker

Untuk menampilkan suatu tempat menggunakan marker atau pin dapat

menggunakan alamat web berikut ini :

Kode 5.4

http://maps.google.com/?q="+latitude+","+longitude

Untuk penerapan pada aplikasi android anda dapat membuatnya secara

mudah menggunakan intent untuk memanggil browser.

Kode 5.5

GPSTracker gps = new GPSTracker(GPSSayaBrowser.this);

// Cek Apakah GPS aktif

if(gps.canGetLocation()) {

double latitude = gps.getLatitude();

double longitude = gps.getLongitude();

Intent intent = new Intent();

intent.setAction(Intent.ACTION_VIEW);

intent.addCategory(Intent.CATEGORY_BROWSABLE);

Page 48: PEMROGRAMAN MOBILE 2 - stekom.ac.id

intent.setData(Uri.parse("http://maps.google.com/?q="

+latitude+","+longitude));

startActivity(intent);

} else {

gps.showSettingsAlert();

}

Gambar 5.2 Hasil marker menggunakan Google Map

Anda dapat mengembangkan aplikasi ini untuk membuat jalur yang harus

dilewati untuk sampai pada suatu tempat yang telah ditentukan sebelumnya.

Misalnya lokasi wisata.

Page 49: PEMROGRAMAN MOBILE 2 - stekom.ac.id

45

BAB VI

ANDROID CLIENT SERVER

Tujuan Pembelajaran :

Setelah mempelajari materi Android Client Server, diharapkan

mahasiswa dapat mengetahui model komunikasi antara aplikasi android

dengan server untuk pengembangan aplikasi berbasis client server.

Smartphone bukan lagi sekedar alat telphon. Smartphone adalah komputer

mini yang dapat berkomunikasi dengan dunia luar. Aplikasi memanfaatkan

jaringan untuk beragam alasan, misalnya menampilkan kontent terbaru,

memindahkan beban pemprosesan ke server bertenaga besar, atau

menggunakan media penyimpanan yang lebih besar di luar penyimpanan

ponsel (cloud computing).

6.1 Koneksi dan Jaringan

Android menyediakan dukungan terhadap beragam jenis teknologi

koneksi data antara lain :

a. Mobile Data Access

Koneksi data menggunakan teknologi seperti 2G, 3G dan 4G (LTE).

Koneksi data disediakan oleh operator jaringan seluler.

b. Wifi

WIFI (Wireless Fidelity) adalah teknologi data nirkabel dengan

jangkauan sekitar 100m dan memungkinkan kecepatan transfer lebih

tinggi antara 10-300 Mbps. Ada beberapa standar yang berbeda,

Page 50: PEMROGRAMAN MOBILE 2 - stekom.ac.id

yaitu 802.11a, 802.11g, dan 802.11n. Stantar kecepatan tersebut

dibedakan oleh kecepatan transfer. Standar kecepatan tertinggi saat

tulisan ini dibuat adalah 802.11n dengan kecepatan maksimun

300Mbps.

c. Bluetooth

Bluetooth adalah teknologi koneksi data nirkabel yang dirancang

untuk pertukaran data dalam jarak pendek sekitar 10m. Teknologi

ini memungkinkan dibentuknya Personal Area Network nirkabel

dalam radius terbatas.

d. WiMAX

WiMAX merupakan kependekan dari Worldwide Interoperability

for Microwave Access. Standar IEEE untuk WiMAX adalah 802.16

dan tergolong Wireless Metropolitan Area Network (WMAN).

WiMAX bekerja di dua pita frequensi 2-11 GHz dan memiliki

jangkauan 50 km dengan kecepatan hingga 80 Mbps. WiMAX

memungkinkan wireless LAN kecil saling terhubung dengan

WiMAX untuk membentuk wireless MAN besar.

e. Ethernet

Ethernet adalah teknologi koneksi data berbasis kabel dan telah

diadopsi luas pada PC. Ethernet memungkinkan anda untuk

membangun sebuah Local Area Network (LAN) yang

menghubungkan mesin-mesih berjarak dekat. Pada perangkat

android, teknologi ini pernah diterapkan pada tablet, tetapi dalam

perkembangannya Ethernet digantikan dengan Wifi dan Mobile Data

Access.

Page 51: PEMROGRAMAN MOBILE 2 - stekom.ac.id

47

Untuk menguji konektifitas jaringan, aplikasi android wajib

menyertakan ijin android.permission.ACCESS_NETWORK_STATE

pada AndroidManifest.xml

Kode 6.1

<uses-permission

android:name="android.permission.ACCESS_NETWORK_

STATE" />

Android menyediakan ConnectivityManager dalam paket pustaka

android.net. Anda dapat mendeteksi apakah koneksi melalui Wifi,

Mobile carrier, WiMAX atau Bluetooth tersedia. Aplikasi dapat

meminta instance ConnectivityManager menggunakan

getSystemService() dengan melewatkan nilai konstan

Context.CONNECTIVITY_SERVICE

Kode 6.2

public boolean cek_status(Context cek) {

ConnectivityManager cm = (ConnectivityManager) cek

.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo info = cm.getActiveNetworkInfo();

if (info != null && info.isConnected()) {

return true;

} else {

return false;

}

}

Page 52: PEMROGRAMAN MOBILE 2 - stekom.ac.id

Metode diatas akan menghasilkan nilai boolean (true/false) sehingga

dapat digunakan untuk menguji koneksi data apakah sudah diaktifkan

atau belum.

6.2 JSON Format

JSON (JavaScript Object Notation) adalah format pertukaran data yang

ringan, mudah dibaca dan ditulis oleh manusia, serta mudah

diterjemahkan dan dibuat (generate) oleh komputer. Format ini dibuat

berdasarkan bagian dari Bahasa Pemprograman JavaScript, Standar

ECMA-262 Edisi ke-3 - Desember 1999.

JSON terbuat dari dua struktur:

Kumpulan pasangan nama/nilai. Pada beberapa bahasa, hal ini

dinyatakan sebagai objek (object), rekaman (record), struktur

(struct), kamus (dictionary), tabel hash (hash table), daftar

berkunci (keyed list), atau associative array.

Daftar nilai terurutkan (an ordered list of values). Pada

kebanyakan bahasa, hal ini dinyatakan sebagai larik (array),

vektor (vector), daftar (list), atau urutan (sequence).

Struktur-struktur data ini disebut sebagai struktur data universal. Pada

dasarnya, semua bahasa pemprograman moderen mendukung struktur

data ini dalam bentuk yang sama maupun berlainan. Hal ini pantas

disebut demikian karena format data mudah dipertukarkan dengan

bahasa-bahasa pemprograman yang juga berdasarkan pada struktur data

ini.

Page 53: PEMROGRAMAN MOBILE 2 - stekom.ac.id

49

JSON menggunakan bentuk sebagai berikut:

a. Objek adalah sepasang nama/nilai yang tidak terurutkan. Objek

dimulai dengan { (kurung kurawal buka) dan diakhiri dengan

} (kurung kurawal tutup). Setiap nama diikuti dengan : (titik dua)

dan setiap pasangan nama/nilai dipisahkan oleh , (koma).

b. Larik adalah kumpulan nilai yang terurutkan. Larik dimulai dengan

[ (kurung kotak buka) dan diakhiri dengan ] (kurung kotak tutup).

Setiap nilai dipisahkan oleh , (koma).

c. Nilai (value) dapat berupa sebuah string dalam tanda kutip ganda,

atau angka, atau true atau false atau null, atau sebuah objek atau

sebuah larik. Struktur-struktur tersebut dapat disusun bertingkat.

d. String adalah kumpulan dari nol atau lebih karakter Unicode, yang

dibungkus dengan tanda kutip ganda. Di dalam string dapat

Page 54: PEMROGRAMAN MOBILE 2 - stekom.ac.id

digunakan backslash escapes "\" untuk membentuk karakter khusus.

Sebuah karakter mewakili karakter tunggal pada string. String sangat

mirip dengan string C atau Java.

e. Angka adalah sangat mirip dengan angka di C atau Java, kecuali

format oktal dan heksadesimal tidak digunakan.

Spasi kosong (whitespace) dapat disisipkan di antara pasangan

tanda-tanda tersebut, kecuali beberapa detil encoding yang secara

lengkap dipaparkan oleh bahasa pemprograman yang bersangkutan.

Page 55: PEMROGRAMAN MOBILE 2 - stekom.ac.id

51

Berikut ini adalah contoh format JSON

{

"namaDepan": "Budi",

"namaBelakang": "Sbudi",

"alamat": {

"namaJalan": "Jl. Sudirman 15A",

"kota": "Jakarta Selatan",

"provinsi": "DKI Jakarta",

"kodePos": 11111

},

"nomerTelepon": [

"021 555-1234",

"021 555-4567"

]

}

Untuk membuat data dalam format JSON jarang sekali dibuat secara

manual, programmer biasanya membuat format JSON menggunakan

Script PHP. Berikut ini contoh penggunaan PHP dalam membuat format

JSON.

Kode 6.3

Page 56: PEMROGRAMAN MOBILE 2 - stekom.ac.id

Dari data diatas akan tercipta 2 objek yaitu select dan data, select dapat

digunakan untuk menampilkan hasil query yang akan dibuat format

JSON, sedangkan data akan digunakan untuk menunjukkan adanya data

(1) atau data kosong (0). Banyaknya objek dan data dapat disesuaikan

dengan kebutuhan masing-masing programmer.

6.3 Pertukaran Data Client-Server

Android mempunyai kemampuan untuk mengakses database yang ada

pada server. Untuk mendukung pertukaran data antara aplikasi android

dengan server, disediakan pustaka utama yang menangani protocol

HTTP, yaitu HttpGET/HttpPOST dan HttpURLConnection.

Pengaturan ijin

Aplikasi android yang akan mengakses server (online/localhost)

diwajibkan untuk menyertakan ijin android.permission.INTERNET

dalam AndroidManifest.xml. tanpa ijin ini, aplikasi anda akan menerima

eksepsi SocketException dengan pesan error “permission denied”.

Kode 6.4

<uses-permission

android:name="android.permission.INTERNET" />

Dalam pembuatan aplikasi android, programmer akan menggunakan

konsep berbasis objek, oleh karena itu lebih disarankan membuat kelas

tersendiri untuk menangani koneksi ke server.

Page 57: PEMROGRAMAN MOBILE 2 - stekom.ac.id

53

CustomHttpClient.java

//class ini digunakan untuk proses client dalam akses

ke media internet

public class CustomHttpClient {

public static final int HTTP_TIMOUT=30*1000;

private static HttpClient mHttpClient;

private static HttpClient getHttpClient(){

if (mHttpClient==null) {

mHttpClient=new DefaultHttpClient();

final HttpParams

param=mHttpClient.getParams();

HttpConnectionParams.setConnectionTimeout(param,

HTTP_TIMOUT);

HttpConnectionParams.setSoTimeout(param,

HTTP_TIMOUT);

ConnManagerParams.setTimeout(param, HTTP_TIMOUT);

}

return mHttpClient;

}

//metode Post

public static String executeHttpPost(String

url,ArrayList<NameValuePair> postParameters)

throws Exception{

BufferedReader in=null;

try {

HttpClient client=getHttpClient();

String server="http://xxx.com/"+url;

HttpPost request=new HttpPost(server);

UrlEncodedFormEntity formEntity=new

UrlEncodedFormEntity(postParameters);

request.setEntity(formEntity);

HttpResponse response=client.execute(request);

in=new BufferedReader(new

InputStreamReader(response.getEntity().getCo

ntent()));

StringBuffer sb=new StringBuffer("");

String line="";

String NL=System.getProperty("line.separator");

Page 58: PEMROGRAMAN MOBILE 2 - stekom.ac.id

while ((line=in.readLine())!=null) {

sb.append(line+NL);

}

in.close();

String result=sb.toString();

return result;

}finally{

if (in!=null) {

try {

in.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

//metode Get

public static String executeHttpGet(String url)

throws Exception{

BufferedReader in=null;

try{

HttpClient client=getHttpClient();

HttpGet request=new HttpGet();

String server="http://xxx.com/"+url;

request.setURI(new URI(server));

HttpResponse

response=client.execute(request);

in=new BufferedReader(new

InputStreamReader(response.getEntity().getContent

()));

StringBuffer sb=new StringBuffer("");

String line="";

String NL=System.getProperty("line.separator");

while ((line=in.readLine())!=null) {

sb.append(line+NL);

}

in.close();

String result=sb.toString();

Page 59: PEMROGRAMAN MOBILE 2 - stekom.ac.id

55

return result;

}finally{

if (in!=null) {

try {

in.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

Kode String server="http://xxx.com/"+url; merupakan nama

server yang akan diakses dan +url merupakan file .php yang akan

diakses. Selama masa pembangunan aplikasi nama server diisi dengan

alamat ip dari localhost atau ip default untuk aplikasi android mengakses

localhost yaitu 10.0.2.2

Untuk menggunakan metode CustomHttpClient.java cukup mudah, anda

tinggal memilih menggunakan metode eksekusi Post/Get. Berikut ini contoh

menggunakan metode executeHttpPost().

Kode 6.5

private String tujuan="login.php";

// instansiasi class ArrayList

ArrayList<NameValuePair> data = new

ArrayList<NameValuePair>();

//isi nilai data

data.add(new BasicNameValuePair("username",”rohmad”));

data.add(new BasicNameValuePair("pass",”qwerty”));

Page 60: PEMROGRAMAN MOBILE 2 - stekom.ac.id

//eksekusi menggunakan HttpPost pada activity

CustomHttpClient

String Content = CustomHttpClient.executeHttpPost(tujuan,data);

Pada sisi server, file yang dituju (login.php) mengolah data masukan

kemudian memberikan output data.

Kode 6.6

Kode diatas akan mengembalikan nilai sesuai hasil pengolahan dari nilai

masukan. Aplikasi yang telah mendapat nilai balik dari server dapat

mengolah data secara mandiri.

Page 61: PEMROGRAMAN MOBILE 2 - stekom.ac.id

57

Kode 6.7

// instansiasi kelas JSONObject

jObject = new JSONObject(Content);

int sukses = jObject.getInt("sukses");

if (sukses == 1) {

JSONArray menuitemArray =

jObject.getJSONArray("select");

// Tampung data record dari server

String nama =

menuitemArray.getJSONObject(0).getString("nama").

toString();

String email =

menuitemArray.getJSONObject(0).getString("email").

toString();

Page 62: PEMROGRAMAN MOBILE 2 - stekom.ac.id

BAB VII

PUBLIKASI APLIKASI

Tujuan Pembelajaran :

Setelah mempelajari materi publikasi aplikasi, diharapkan mahasiswa

dapat melakukan rilis aplikasi dan mendistribusikan aplikasi secara baik

dan benar.

7.1 Rilis Aplikasi

Aplikasi yang telah dibuat, tentunya ingin di publikasikan agar dapat

digunakan oleh banyak orang. Agar aplikasi yang dibuat tidak membuat

pengguna kecewa maka diperlukan beberapa kali pengujian, dikarenakan

banyaknya tipe perangkat dan jenis Versi OS Android yang berbeda.

Berikut ini adalah langkah-langkah yang diperlukan untuk merilis

sebuah aplikasi :

Page 63: PEMROGRAMAN MOBILE 2 - stekom.ac.id

59

Gambar 7.1 Langkah umum proses merilis aplikasi

Dalam tahap uji release sebaiknya diuji menggunakan beberapa

perangkat dengan versi OS Android yang berbeda. Fokuskan pengujian

pada fungsi-fungsi dasar yang harus dilakukan oleh aplikasi.

a. Pengaturan versi

Sejak Android SDK 1.0, file AndroidManifest.xml menyertakan

attribute android:versionCode dan android:versionName.

Kode 7.1

<manifest

xmlns:android="http://schemas.android.com/apk/

res/android"

package="com.latihanlinkfy"

android:versionCode="1"

android:versionName="1.0" >

Page 64: PEMROGRAMAN MOBILE 2 - stekom.ac.id

Attribut android:versionCode berisi kode untuk membedakan rilis

satu dengan lainnya. Untuk tiap rilis baru, tambahkan kode dengan

+1. Nilai kode ini akan memudahkan pengembang dalam rilis

aplikasi terbaru. Kode ini juga digunakan oleh took online seperti

Google Play untuk memberitahu pengguna apabila ada update

aplikasi.

Attribut android.versionName adalah String berisi versi aplikasi

yang di rilis. Susunan versi aplikasi dengan fomat [versi

mayor].[versi minor].[versi build]. Penomoran sepenuhnya

diserahkan kepada pengembang aplikasi. Sebagai panduan, jika

membuat perubahan besar, tambahkan versi mayor dengan 1. Bila

melakukan perubahan kecil tetapi banyak tambahkan versi minor

dengan 1. Bila hanya melakukan sedikit perubahan, tambahkan pada

versi build. Attribut ini akan digunakan oleh system android dan

toko online untuk menampilkan informasi tekstual versi aplikasi.

Gambar 7.2 Informasi Aplikasi pada Google Play

Page 65: PEMROGRAMAN MOBILE 2 - stekom.ac.id

61

b. Mengatur Nama Aplikasi

Agar dapat dipublikasikan, aplikasi wajib menyertakan attribute

android:label pada tag application di file AndroidManifest.xml

attribut dapat anda mengatur nama menggunakan String pada folder

values/strings.xml atau anda tulikan langsung pada android label.

Misal : android:label="Nama aplikasi"

Kode 7.2

<application

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

c. Mengatur SDK untuk aplikasi

Pastikan pengaturan <uses-sdk> dengan minimum API yang

diperlukan dan tareget API yang diinginkan. Toko online akan

menggunakan data ini untuk menyaring aplikasi dan tidak akan

ditampilkan pada hasil pencarian bila perangkat pengguna tidak

didukung.

Kode 7.2

<uses-sdk

android:minSdkVersion="8"

android:targetSdkVersion="17" />

Page 66: PEMROGRAMAN MOBILE 2 - stekom.ac.id

d. Tanda Tangan Digital

Aplikasi android siap install (.apk) akan secara otomatis tercipta saat

anda melakukan running application. File tersebut berada pada

folder bin Anda dapat mengcopy dan mendistribusikan aplikasi

tersebut. Akan tetapi jika ingin mendistribusikan lewat toko online

seperti Google Play, aplikasi anda wajib diberikan tanda tangan

digital (key). Caranya sebagai berikut :

Klik kanan pada aplikasi pilih Android Tools Export Signed

Application Package project yang akan di eksport next

Browse untuk menetukan lokasi penyimpanan hasil eksport, buatlah

folder (missal : folder key )untuk menampung key yang akan dibuat

nanti.

Gambar 7.3 Menciptakan key untuk aplikasi baru

Password yang anda masukkan jangan sampai terlupa, karena hal

password yang anda masukkan juga akan diuji saat anda melakukan

upload dan update aplikasi menggunakan toko online.

Selanjutnya anda diminta melengkapi form Key Creation .

Page 67: PEMROGRAMAN MOBILE 2 - stekom.ac.id

63

Gambar 7.4 Form Key Creation

Selanjutnya, anda akan diminta menentukan lokasi file akan

disimpan. Klik finish. Aplikasi anda siap untuk di distribusikan

secara online maupun offline.

7.2 Distribusi Aplikasi

Distribusi yang dimaksud disini adalah distribusi pada toko online. Jalur

distribusi aplikasi ada beberapa tempat diantaranya :

a. Google Play

Google Play adalah toko resmi Android. Setiap piranti android

selalu menyediakan aplikasi client Google Play yang mengijinkan

pengguna mengunduh dan menginstal aplikasi yang tersedia. Untuk

dapat mendistribusikan aplikasi melalui Google Play anda wajib

mendaftarkan akun developer. Anda akan dibebani biaya melalui

kartu kredit (biaya saat ini USD 25). Alamat Google Play Developer

console dapat diakses melalui https://play.google.com/apps/publish

Page 68: PEMROGRAMAN MOBILE 2 - stekom.ac.id

Kelebihan :

1. Jumlah pengunjung sangat banyak, sehingga potensi ekonomi

sangat besar.

2. Waktu rilis lebih singkat, karena aplikasi yang didistribusikan

tidak melalui sertifikat ketat.

Kekurangan :

1. Jumlah aplikasi yang sangat banyak, menyebabkan persaingan

sangat ketat, sehingga selain aplikasi yang bagus, juga

diperlukan promosi yang baik agar aplikasi dikenali calon

pengguna.

2. Tidak ada pengujian pada aplikasi oleh pihak Google Play Store,

sehingga apabila ditemukan cacat, crash atau isu lainnya

diserahkan pada pengembang dan pengguna.

b. Samsung Apps

Samsung Apps adalah sebuah toko virtual atau daring (online) yang

bertujuan menyediakan berbagai aplikasi mobile yang hanya

dikembangkan dan dipilih untuk Samsung. Aplikasi Samsung Apps

tersedia otomatis di piranti android buatan Samsung. Dengan pangsa

pasar Samsung yang besar, toko online dapat dijadikan alternatif

untuk mempublikasikan aplikasi.

Kelebihan :

1. Tidak dibebani biaya untuk membuka akun developer.

Page 69: PEMROGRAMAN MOBILE 2 - stekom.ac.id

65

2. Jumlah aplikasi yang ada pada Samsung Apps tidak sepadat

Google Play, sehinga kemungkinan ditemukan oleh calon

pengguna lebih besar.

3. Staf Samsung Apps akan menguji aplikasi sebelum disetujui,

sehingga apa bila ditemukan crash atau bug pada program,

pengembang program akan diberitahu mengenai isu yang

ditemukan. Hal ini sangat berguna karena pengembang akan

mendapatkan penguji Quality Issurance (QA) tanpa perlu

membayar dan aplikasi yang lolos sertifikasi jau lebih

berkualitas.

Kekurangan :

1. Sertifikasi dan pengujian membutuhkan waktu, sehingga time to

market lebih lama.

2. Saat menambahkan deskripsi aplikasi harus menggunakan

bahasa inggris sehingga sedikit menyusahkan pengembang dan

calon pengguna yang kurang mengerti bahasa inggris.

c. Amazon Appstore

Amazon Appstore adalah toko aplikasi seluler untuk Android yang

diluncurkan pada 22 Maret 2011. Aplikasi Amazon App tersedia

otomatis di piranti E-Book reader Kidle buatan Amazon yang

berbasis android. Untuk perangkat yang lain, pengguna harus

mengunduh aplikasi Amazon App dari Google Play.

Page 70: PEMROGRAMAN MOBILE 2 - stekom.ac.id

Kelebihan :

1. Proses pendaftaran akun developer gratis.

2. Amazone Appstore tidak menerapkan kebijakan sertifikasi.

3. Jumlah aplikasi pada Amazon App tidak padat.

Kekurangan :

Jumlah pengunjung yang sedikit, sehingga potensi ekonomi

mungkin lebih kecil.

d. Jalur Distribusi alternatif

Selain 3 jalur distribusi yang telah disebutkan terdapat pula jalur

GetJar dan UStore. GetJar (http://getjar.com) pada awalnya berdiri

untuk mengediakan jalur distribusi berbagai aplikasi java. Saat ini,

Getjar juga mendistribusikan aplikasi android. Sedangkan UStore

(http://u-store.co.id) adalah toko online PT. Telekomunikasi

Indonesia. Selain itu operator seluler Telkomsel memiliki program

TemanDev (http://www.telkomsel.com/temandev) untuk

menggandeng pengembang lokal membangun industri kreatif.

Page 71: PEMROGRAMAN MOBILE 2 - stekom.ac.id

67

DAFTAR PUSTAKA

Google, Inc. 2014. Android SDK Documentation.

https://developer.android.com/ tools /sdk

Huda, Arif Akbarul. 2012. 24 Jam!! Pintar Pemrograman Android.

Yogyakarta : CV. Andi Offset.

Juhara, Zamrony P. 2016. Panduan Lengkap Pemrograman Android.

Yogyakarta : CV. ANDI OFFSET.

Tim EMS. 2015. Pemrograman Android Dalam Sehari. Jakarta : PT. Elex

Media Komputindo