Anda di halaman 1dari 171

EDITION 2019

GEOVANNE FARELL

JobSheet
Pemrograman Sistem Bergerak

Jurusan Teknik Elektronika


Pend.Teknik Informatika

Edisi Revisi
A. LEARNING OUTCOMES PRAKTIKUM
Mengenali Android Studio, menu-menu, komponen Android Studio dan komponen-
komponen dasar aplikasi yang dibuat menggunakan Android Studio.

B. ALAT dan BAHAN


1. Personal Computer dengan aplikasi Android Studio
2. Koneksi Internet

C. Teori Singkat

1. Activity
Merupakan satu komponen yang berhubungan dengan pengguna. Activity menangani
window (tampilan) mana yang akan di tampilkan ke dalam interface (antarmuka).
Activity memiliki daur hidup (life cycle) tersendiri yang dimulai dari onCreate hingga
onDestroy.
Main activity Android Studio
2. Intent
Komunikasi antar komponen di dalam sebuah aplikasi merupakan hal yang sangat
sering dilakukan. Inilah peran dari suatu intent. Beberapa fungsi dari intent adalah
dapat digunakan untuk menjalankan sebuah activity, mengirimkan pesan ke broadcast
receiver, dan dapat juga digunakan untuk berkomunikasi dengan service yang sedang
berjalan.

3. Fragment
Merupakan komponen view yang fleksibel dan dapat disisipkan pada sebuah tampilan
dari activity. Fragment memiliki daur hidup sendiri sehingga tidak tergantung pada
activity yang disisipkan. Fragment digunakan untuk memecah komponen pada aplikasi
agar bisa lebih fleksibel dan mudah untuk digunakan
4. Threads
Semua proses yang ada di dalam sebuah aplikasi ada di dalam thread. Secara default,
proses yang tampil di layar merupakan proses yang ada di dalam main thread / ui
thread. Bukan hanya main thread saja yang bisa kita gunakan, kita bisa membuat thread
baru yang terpisah dari main thread agar tidak menggangu proses rendering tampilan di
layar. Beberapa komponen yang bisa Anda gunakan adalah seperti handler dan
asynctask

5. Service
Service merupakan komponen tidak terlihat yang dapat digunakan untuk menjalankan
suatu proses di dalam aplikasi. Service biasanya digunakan untuk menjalankan proses
yang memakan waktu lama atau yang membutuhkan komputasi intensif. Contohnya
adalah pemutar musik dan blocking operation untuk networking.

6. Receiver
Receiver menggunakan pola publish-subscribe. Ketika terjadi sebuah event
dibangkitkan (dipublish), komponen lain yang telah mendaar untuk mendengarkan
event tersebut (subscribed) dapat menjalankan perintah-perintah tertentu.

D. Evaluasi dan Penugasan


1. Jelaskan masing-masing menu yang ada pada Android Studio


A. LEARNING OUTCOMES PRAKTIKUM
Mahasiswa mengetahui secara detail tentang life cycle sebuah activity. Terutama untuk
melakukan aksi yang tepat, saat terjadi perubahan state activity. Callback methods yang
ada dapat digunakan untuk melakukan beragam proses terkait state dari activity.
B. ALAT dan BAHAN
1. Personal Computer dengan aplikasi Android Studio
2. Koneksi Internet

C. Teori Singkat
1. Last In, First Out (LIFO)

1. Gambar 1 Jika Anda memiliki sebuah aplikasi yang terdiri dari 2 activity, maka
activity pertama akan dijalankan setelah pengguna meluncurkan aplikasi melalui ikon
aplikasi di layar device. Activity yang ada saat ini berada pada posisi activity running
setelah melalui beberapa state onCreate (created) → onStart (started) → onResume
(resumed) dan masuk ke dalam sebuah stack activity. Bila pada activity pertama Anda
menekan sebuah tombol untuk menjalankan activity kedua, maka posisi state dari
activity pertama berada pada posisi stop. Saat itu, callback onStop() pada activity
pertama akan dipanggil. Ini terjadi karena activity pertama sudah tidak berada pada
layar foreground / tidak lagi ditampilkan. Semua informasi terakhir pada activity
pertama akan disimpan secara otomatis. Sementara itu, activity kedua masuk ke dalam
stack dan menjadi activity terakhir yang masuk. 

2. Gambar 2 Activity kedua sudah muncul di layar sekarang. Ketika Anda menekan
tombol back pada physical button menu utama atau menjalankan metode finish(),
maka activity kedua Anda akan dikeluarkan dari stack. Pada kondisi di atas, state
activity kedua akan berada pada destroy. Oleh karenanya, metode onDestroy() akan
dipanggil. Kejadian keluar dan masuk stack pada proses di atas menandakan sebuah
model Last In, First Out. Activity kedua menjadi yang terakhir masuk stack (Last In)
dan yang paling pertama keluar dari stack (First Out).

3. Gambar 3 Activity Pertama akan dimunculkan kembali di layar setelah melalui


beberapa state dengan rangkaian callback method yang terpanggil, onStop → onRestart
→ onStart → onResume.

2. Saving Activity State


Ketika sebuah activity mengalami pause kemudian resume, maka state dari sebuah
activity tersebut dapat terjaga. Sebabnya, obyek activity masih tersimpan di memory
sehingga dapat dikembalikan state-nya. Dengan menjaga state dari activity, maka
ketika activity tersebut ditampilkan, kondisinya akan tetap sama dengan kondisi
sebelumnya. Akan tetapi ketika sistem menghancurkan activity untuk keperluan
memori misalnya karena memori habis, maka obyek activity dihancurkan. Alhasil,
ketika activity ingin ditampilkan kembali diperlukan proses recreate activity yang
dihancurkan tadi. Kejadian di atas adalah hal yang lumrah terjadi. Oleh karena itu,
perubahan yang terjadi pada activity perlu disimpan terlebih dahulu sebelum ia
dihancurkan. Disinilah metode onSaveInstanceState() digunakan. Dalam
onSaveInstanceState terdapat bundle yang dapat digunakan untuk menyimpan
informasi. Informasi dapat disimpan dengan memanfaatkan fungsi seperti putString()
dan putInt(). Ketika activity di-restart, bundle akan diberikan kepada metode onCreate
dan onRestoreInstanceState. Bundle tersebut akan dimanfaatkan untuk mengembalikan
kembali perubahan yang telah terjadi sebelumnya.
Proses penghancuran activity dapat juga terjadi ketika terdapat perubahan konfigurasi
seperti perubahan orientasi layar (portrait-landscape), keyboard availability, dan
perubahan bahasa. Penghancuran ini akan menjalankan callback method onDestroy dan
kemudian menjalankan onCreate. Penghancuran ini dimaksudkan agar activity dapat
menyesuaikan diri dengan konfigurasi baru yang muncul pada kejadiankejadian
sebelumnya. Hal yang perlu diingat ketika menggunakan onSaveInstanceState adalah
untuk tidak menyimpan data yang besar pada bundle. Contohnya, hindari penyimpanan
data bitmap pada bundle. Bila data pada bundle berukuran besar, proses serialisasi dan
deserialisasi akan memakan banyak memori

D. Evaluasi dan Penugasan


1. Carilah reverensi tentang Activity pada Android Studio
2. Jelaskan yang dimaksud onCreate(), onStart(), onResume().
A. LEARNING OUTCOMES PRAKTIKUM
Mahasiswa mampu membuat Activity sederhana Android Srudio, implementasi aplikasi
pertama, serta tahu gambaran cara kerja activity pada Android Studio.

B. ALAT dan BAHAN


1. Personal Computer dengan aplikasi Android Studio
2. Koneksi Internet.

C. Teori Singkat
Activity
Sebuah komponen aplikasi yang menyediakan layar yang digunakan pengguna untuk
berinteraksi guna melakukan sesuatu, miasalnya memilih no ponsel, mengambil foto,
mengirim email, atau menampilkan peta. Tiap activity diberi sebuah jendela untuk
menggambar interface penggunanya. Jendela ini biasanya mengisi layar, namunnmungkin
lebih kecil daripada layar dan mengambang diatas jendela lain.
Sebuah aplikasi biasanya terdiri atas beberapa activity yang terkait secara longgar
satu sama lain. Satu activity dalam aplikasi ditetapkan sebagai “main activity” yang
ditampilkan kepada user saat membuka aplikasi pertamakali. Tiap activity kemudian bias
memulai activity lain . Tiap activity baru di mulai activity sebelumnya akan di hentikan dan
di dorong ke atas back-stack.

D. Langkah Kerja

1. Buat proyek baru dengan klik File → New → New Project pada Android Studio
Anda.
2. Setelah muncul jendela Create New Project, atur nama aplikasi dan domain
perusahaan / website Anda. Sebaiknya jangan sama dengan apa yang ada dicontoh.
Dan jangan lupa pula untuk menentukan lokasi proyek.
3. Kemudian pilih tipe peranti (device) untuk aplikasi beserta target minimum SDK
yang akan digunakan. Pilihan target Android SDK akan mempengaruhi banyaknya
peranti yang dapat menggunakan aplikasi. Di sini kita memilih tipe peranti Phone
and Tablet dan nilai minimum SDK kita pasang ke Level 15 (Ice Cream
Sandwich). Klik Next untuk melanjutkan.
4. Lanjut, pilih empty activity, lalu next.
5. Selanjutnya, tentukan nama activity pertama kita, saat ini kita biarkan pada kondisi
apa adanya. Ingat, jika suatu saat nanti kita ingin melakukan penambahan activity ,
maka sebaiknya nama untuk activity tersebut disamakan dengan nama kelasnya dan
diakhiri dengan activity . Misal: ProfileActivity, SettingsActivity dan lain
sebagainya. Klik Finish untuk menyelesaikan.

6. Activity pertama aplikasi anda telah selesai, tunggu sampai loading gradle nya
selesai, dan pastikan koneksi lancer, jika tidak ada koneksi maka akan terjadi error
saat mau ngoding.
7. Di sebelah kanan anda adalah workspace dimana Activity anda berada dan
bernama MainActivity.java dengan layoutnya activity_main.xml. Di sebelah kiri
Anda terdapat struktur proyek, di mana nanti kita akan banyak menambahkan
berbagai komponen baru, asset dan library.
Layout activity.xml terdapat dalam folder res > layout, dan java terdapat di java >
com.example (folder pertama dalam java).
8. Selanjutnya kita akan mulai melakukan pengkodean Berikut flow umumnya. :
1. Ngoding Layout untuk user interface aplikasi

2. Ngoding Activity untuk menambahkan logika aplikasi

9. Buatlah dimens terlebih dahulu, dimens ini fungsinya untuk mengatur ukuran
margin layout dan tata letak pada activity, dimen dibuat di folder values dengan
cara :
Dan ketikan coding dimens seperti diatas

10. dan pada activity_main.xml (dalam folder layout), ketikkan coding berikut
Sambungan 1

Sambungan 2

Akan muncul warning pada atribut android:text pada layout tersebut. Ini karena kita
melakukan hardcoding pada nilai string-nya. Mari kita hilangkan code warning
tersebut dengan menekan Alt+Enter pada attribut android:text. Akan muncul dialog
seperti ini, pilihlah extract string resource.
Kemudian akan muncul dialog seperti di bawah ini. Sesuaikan dengan nama yang
ada.

Fungsi extract string resource akan secara otomatis menambahkan nilai dari
android:text ke dalam berkas res → values → strings.xml. Lakukan hal yang sama
pada view lainnya hingga tidak ada warning lagi. Jika kita buka berkas strings.xml,
maka isinya akan menjadi seperti ini:
Setelah berhasil ngoding layot maka tampilan pada layot akan seperti dibawah ini :

Note 1 : jika muncul lampu kuning silahkan lakukan cara diatas, jika muncul lampu merah (tanda
error) silahkan ketik ctrl+space atau alt+enter untuk melihat dan memperbaiki errornya.
11. Selanjutnya setelah selesai, lanjutkan dengan membuka berkas MainActivity.java
dan lanjutkan ngoding baris-baris dibawah ini.
Note 2 : ketiklah coding diatas SAMPAI SELESAI, abaikan errornya dahulu, setelah selesai ngoding
DENGAN TELITI (pastikan tidak ada yang tertinggal), barulah perbaiki errornya yang tertulis pada Note
1.

12. 2. Setelah selesai, silakan jalankan aplikasi dengan memilih menu Run → Run
‘app’ dari menu bar. Kemudian ada pilihan seperti ini. :
13. Sebelum run ada baiknya kita check apakah ada yang error lagi dengan cara build
dahulu klik tombol palu hijau atau tekan ctrl+F9

14. Setelah apk berhasil di run maka kan tampil emulator sevagai berikut :
E. Evaluasi dan Penugasan

1. Buatlah aplikasi hitung degan nama masing-masing cth : “KertikaHitung”


2. Uraikan apa yang kalian ketahui tentang coding-coding diatas.
3. Coba menambahkan tombol dengan cara drag pallete. (tombol tidak di ketik, tetapi
di drag maka coding di text layout activity_main.xml akan tertulis secara otomatis
tanpa harus mengetik coding).
A. LEARNING OUTCOMES PRAKTIKUM
Mahasiswa mampu memahami dan menjelaskan apa itu Intent dalam Android Studio.

B. ALAT dan BAHAN


1. Personal Computer dengan tersedianya aplikasi android studio
2. Koneksi Internet

C. TEORI SINGKAT
Intent
Intent adalah mekanisme untuk melakukan sebuah action dan komunikasi antar komponen
aplikasi misal activity, services, dan broadcast receiver. Ada tiga penggunaan umum
intent dalam aplikasi Android yaitu: Memindahkan satu activity ke activity lain dengan
atau tidak membawa data. Menjalankan background service, misalnya melakukan
sinkronisasi ke server dan menjalankan proses berulang (periodic/scheduler task).
Mengirimkan obyek broadcast ke aplikasi yang membutuhkan. Misal, ketika aplikasi
membutuhkan proses menjalankan sebuah background service setiap kali aplikasi selesai
melakukan booting. Aplikasi harus bisa menerima obyek broadcast yang dikirimkan oleh
sistem Android untuk event booting tersebut.

Intent memiliki dua bentuk yaitu:


1. Explicit Intent Adalah tipe Intent yang digunakan untuk menjalankan komponen dari
dalam sebuah aplikasi. Explicit intent bekerja dengan menggunakan nama kelas yang
dituju misal : com.dicoding.activity.DetailActivity. Umumnya intent ini digunakan
untuk mengaktifkan komponen pada satu aplikasi.

2. Implicit Intent Adalah tipe intent yang tidak memerlukan detail nama kelas yang
ingin diaktifkan. Model ini memungkinkan komponen dari aplikasi lain bisa merespon
request intent yang dijalankan. Penggunaan tipe intent ini umumnya diperuntukan
untuk menjalankan fitur/fungsi dari komponen aplikasi lain. Contohnya ketika kita
membutuhkan fitur untuk mengambil foto. Daripada membuat sendiri fungsi kamera,
lebih baik kita menyerahkan proses tersebut pada aplikasi kamera bawaan dari peranti
atau aplikasi kamera lain yang telah terinstal sebelumnya di peranti. Hal yang sama
misalnya ketika kita membutuhkan fungsi berbagi konten. Kita bisa memanfaatkan
intent untuk menampilkan aplikasi mana saja yang bisa menangani fitur tersebut.
Implementasi implicit intent ini akan sangat memudahkan bagi pengembang agar tetap
fokus pada proses bisnis inti dari aplikasi yang dikembangkan

D. EVALUASI dan PENUGASAN


1. Carilah beberapa pengertian intent.
2. Carilah contoh aplikasi yang menggunakan intent.
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

A. LEARNING OUTCOMES PRAKTIKUM

Codelab ini menitik beratkan pada implementasi intent untuk melakukan perpindahan dari activity
ke activity lain, dengan atau tidak membawa data

B. ALAT DAN BAHAN


Personal Computer
Android Studio
Koneksi Internet

C. TEORI SINGKAT

Intent adalah sebuah kelas dalam programming Android yang berfungsi untuk perpindahan
halaman.

Pemanfaatannya sebagai berikut :

 Untuk berpindah halaman dari satu Activity ke Activity lain dengan atau tanpa data

 Untuk menjalankan background Service misal dibutuhkan sebuah proses service untuk
mengambil lokasi pengguna, download file atau sikronisasi ke server

 Untuk menyampaikan sebuah objek dari komponen Broadcast misal jika ingin mengetahui
jika device Android sudah selesai booting setelah diaktifkan

Intent juga merupakan suatu objek yang terdapat dalam suatu activity dimana objek tersebut dapat
komunikasi dengan activity yang lain, baik activity pada fungsi internal android misal seperti
memanggil activity dalam satu package atau beda package yang masih berada dalam satu project.

Intent merupakan objek tipe android.content.Intent. Melalui metode startActivity() yang


digunakan untuk memulai sebuah activity lain.

Intent dibagi menjadi 2, yaitu :


Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

1. Explicit Intent berfungsi untuk mengaktifkan komponen-komponen dalam satu aplikasi


yang sama. Misalnya seperti : Berpindah Activity.

2. Implicit Intent berfungsi untuk memanggil fungsi activity yang sudah ada di fungsi
internal android seperti Dial Number, Open Browser dan lainnya.

D. LANGKAH KERJA
1. Buat projek baru di android studio, dengan nama MyIntentApp
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

2. Pilih empty activity

3. Activity name MainActivity


Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

4. Selanjutnya kita akan membangun antarmuka (interface) seperti ini:


Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

1. Pilih file activity_main.xml dan tambahkan kodingan dibawah ini

Jika terdapat error pada bagian dimen, maka jangan lupa untukmenambahkanfile dimens.xml secaramanual
didalam res→ values.

Kemudian nama file dimens.xml


Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

Dan isikan file dimens.xml seperti berikut


Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

Untuk resource stringnya juga perlu kita tambahkan. Kita tambahkan semua string yang akan
digunakan di project ini, buka berkas strings.xml dan tambahkan kode berikut ini.
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

4. Lalu untuk MainActivity.java edit file menjadi seperti ini.

5. Button btnMoveActivity ini berfungsi untuk berpindah activity ke activity lain.


Selanjutnya, kita buat Activity baru dengan cara sebagai berikut: Klik
kanan di package utama aplikasi package name → New → Activity → Empty Activity.
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

Lalu isikan MoveActivity pada dialog. Ketika sudah klik Finish.


Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

7. kemudian tambahkan TextView di activity_move.xml menjadi seperti berikut.

8. Setelah itu, kembali ke file MainActivity.java dan tambahkan kodingan dibawah case
R.id.Btn_Move_activity menjadi sebagai berikut.
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

Jika tidak terdapat error, maka program berhasil dijalankan, seperti contoh dibawah ini.

DIKLIK
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

A. LEARNING OUTCOMES PRATIKUM

Codelab ini menitik beratkan pada implementasi intent untuk melakukan perpindahan dari
activity ke activity lain, dengan atau tidak membawa data

B. ALAT DAN BAHAN


Personal Computer
Android Studio
Koneksi Internet

C. TEORI SINGKAT

Explicit intent adalah Intent yang secara ekplisit mendefinisikan komponen yang harus dipanggil
oleh Android System dengan menggunakan Class Java sebagai identifier-nya.

Pada bagian sebelumnya Anda sudah mempelajari bagaimana memindahkan satu activity ke
activity lain dengan membawa data. Dan itu sangat penting karena ketika kita mengembangkan
suatu aplikasi Android yang kompleks, akan ada banyak activity yang terlibat. Lancarnya
perpindahan activity dengan data menjadi hal yang penting untuk memberikan pengalaman yang
baik kepada pengguna.

Perhatikan kode di bawah ini.

Intent moveWithDataIntent = new Intent(MainActivity.this, MoveWithDataActivity.class);

moveWithDataIntent.putExtra(MoveWithDataActivity.EXTRA_NAME, "DicodingAcademy
Boy");

moveWithDataIntent.putExtra(MoveWithDataActivity.EXTRA_AGE, 5);

startActivity(moveWithDataIntent);

Perbedaan mendasar antara memindahkan activity dengan membawa data atau tidak, adalah
dengan menempatkan data ke obyek intent pada baris ini.

moveWithDataIntent.putExtra(MoveWithDataActivity.EXTRA_NAME, "DicodingAcademy
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

Boy");

moveWithDataIntent.putExtra(MoveWithDataActivity.EXTRA_AGE, 5);

Kita memanfaatkan metode putExtra() untuk mengirimkan data bersamaan dengan obyek Intent.
Sedangkan metode putExtra() itu sendiri merupakan metode yang menampung pasangan key-
value dan memiliki beberapa pilihan tipe input seperti berikut :

Hampir semua tipe data untuk input value didukung oleh metode putExtra().

Get Data

Setelah data dikirimkan, selanjutnya adalah mengambil data tersebut.

Di sini kita akan mengirimkan data bertipe string ke MoveWithDataActivity. Di dalam


MoveWithdataActivity kita akan mengambil nilai data berdasarkan key yang dikirimkan dengan
menggunakan metode getIntent().getStringExtra(key). Implementasinya sebagai berikut:

String name = getIntent().getStringExtra(EXTRA_NAME);

Catatan : Key yang dikirimkan melalui putExtra() harus sama dengan key sewaktu mengambil
nilai dari data yang dikirimkan melalui getStringExtra().

Dalam konteks di atas, key yang digunakan untuk mengirim dan mengambil nilai data adalah
sama, yaitu EXTRA_NAME (yang bernilai “extra_name”). Nilai dari data yang dikirimkan
melalui intent disimpan ke dalam variabel name bertipe data string.

Begitu juga dengan variable age.

int age = getIntent().getIntExtra(EXTRA_AGE, 0);


Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

Nilai dari variabel age yang bertipe data integer berasal dari getIntent().getIntExtra(Key, nilai
default). Key yang digunakan untuk mengirimkan dan mengambil data adalah EXTRA_AGE
(yang bernilai “extra_age”). Nilai default di sini merupakan nilai yang akan digunakan jika
ternyata datanya kosong. Data kosong atau nilainya null bisa terjadi ketika datanya memang
tidak ada, atau key-nya tidak sama.

D. LANGKAH KERJA

1. Buka activity_main.xml , kemudian tambahkan satu tombol lagi dibawah


tombol sebelumnya menjadi seperti ini.
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

2. Setelah itu tambahkan beberapa baris berikut di MainActivity.java.


Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

3. Selanjutnya, buat Activity baru lagi seperti cara sebelumnya dan beri nama
MoveWithDataActivity.
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

4. Lalu, pada layout activity_move_with_data.xml kita tambahkan sebuah TextView


ber-ID untuk menampilkan data yang dikirimkan dari Activity asal.
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

5. Selanjutnya pada MoveWithDataActivity.java kita kenalkan TextView tadi seperti ini :

6. Selanjutnya untuk menerima data dari Activity asal, kondisikan MoveWithDataActivity


menjadi seperti berikut :

7. Dan sekarang saatnya kita menambahkan obyek Intent pada MainActivity.java seperti baris
yang ditebalkan.
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

8. Maka MainActivity.java akan jadi seperti ini :

9. Silakan jalankan aplikasi Anda, kemudian coba klik pada tombol Pindah Activity dengan
Data.
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

A. LEARNING OUTCOMES PRATIKUM

Codelab ini menitik beratkan pada implementasi intent untuk melakukan perpindahan dari
activity ke activity lain, dengan atau tidak membawa data

B. ALAT DAN BAHAN


Personal Computer
Android Studio
Koneksi Internet

C. TEORI SINGKAT

Apa itu Parcelable object ?

Ketika mendengar kata parcel, apa yang ada di benak kalian? Apakah seperti parcel yang biasa
diberikan dari satu orang ke orang lain, pada saat lebaran? Yeah, yang dimaksud
dengan parcelable di sini kurang lebih sama dengan istilah “parcel” di dunia nyata.

Parcelable adalah suatu interface pada pemrograman Android, yang memungkinkan suatu
instansi dari kelas/objek untuk bisa disimpan dan diambil kembali dari sebuah Parcel.
Sedangkan Parcel sendiri merupakan suatu kontainer untuk menampung kelas tersebut.

Salah satu ciri dari suatu kelas yang mengimplementasikan interface Parcelable adalah adanya
static field bernama CREATOR, yang berfungsi untuk meng-generate objek yang memakai
interface Parcelable itu.

Model kelas yang mengimplementasikan Parcelable adalah sebagai berikut :

public class MyParcelable implements Parcelable {


private int mData;

public int describeContents() {


return 0;
}

public void writeToParcel(Parcel out, int flags) {


out.writeInt(mData);
}

public static final Parcelable.Creator<MyParcelable>


CREATOR
= new Parcelable.Creator<MyParcelable>() {
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

public MyParcelable[] newArray(int size) {


return new MyParcelable[size];
}
};

private MyParcelable(Parcel in) {


mData = in.readInt();
}
}

Hal itu berarti apabila kalian ingin membuat sebuah Parcelable objek, kalian harus mengikuti
model di atas. Dengan menambah-nambahkan field yang sesuai dengan kebutuhan kalian.

Kegunaan

Lantas, apa sih gunanya Parcelable objek? Gunanya banyak, salah satu yang paling penting
adalah seperti deskripsi sebuah parcel di dunia nyata. Yaitu Parcelable objek bisa diserahkan
(passed) dari satu Activity ke Activity lainnya.

Dan tidak hanya objek biasa yang bisa diserahkan/dipassingkan ke Activity lain. Kegunaan
utama dari Parcelable adalah untuk melewatkan sebuah objek yang rumit, seperti sebuah
ArrayList yang berisi objek tertentu.

Praktek nyata implementasi Parcelable saya lakukan ketika ingin mem-passing ArrayList yang
berisi objek DBLokasi pada tutorial membuat aplikasi location based service ke Activity lain.

Jika biasanya untuk melewatkan suatu value, katakanlah integer, atau String atau Double dari
satu Activity ke Activity lain di Android, kita cukup menggunakan fungsi put…() pada Bundle
dan menggunakan fungsi get…() pada Activity satunya untuk mendapatkan value yang tadi kita
lewatkan. Namun karena yang mau dilewatkan ini lumayan kompleks, maka harus digunakan
suatu siasat.

Pertama saya mengimplementasikan interface Parcelable pada kelas DBLokasi. DBLokasi


adalah kelas yang merepresentasikan lokasi di dunia nyata, karena saya ingin menampilkan
banyak lokasi pada peta. Maka saya masukkan instansi dari DBLokasi ke dalam
sebuah ArrayList, sehingga nantinya ada sebuah ArrayList yang menampung daftar DBLokasi.

Kode DBLokasi.java yang sudah dimodifikasi adalah seperti berikut. Perhatikan bahwa kelas
DBLokasi di bawah ini tetap megikuti aturan dari model kelas yang mengimplementasikan
Parcelable seperti di atas :

package id.attwhx.twmaps;

import android.os.Parcel;
import android.os.Parcelable;
import android.util.Log;

public class DBLokasi implements Parcelable{


Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

private long id;


private String lat;
private String lng;

public DBLokasi()
{

public DBLokasi(Parcel in)


{
lat = in.readString();
lng = in.readString();
id = in.readLong();
}

public long getId() {


return id;
}

public void setId(long id) {


this.id = id;
}

// Will be used by the ArrayAdapter in the ListView


@Override
public String toString() {
return "Lokasi ke "+id+" ("+lat+" , "+lng+")";
}

public String getLat() {


return lat;
}

public void setLat(String lat) {


this.lat = lat;
}

public String getLng() {


return lng;
}

public void setLng(String lng) {


this.lng = lng;
}

public static final Parcelable.Creator<DBLokasi> CREATOR =


new Parcelable.Creator<DBLokasi>()
{
public DBLokasi createFromParcel(Parcel in)
{
Log.d ("TAG", "createFromParcel()");
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

return new DBLokasi(in);


}

public DBLokasi[] newArray (int size)


{
Log.d ("TAG", "createFromParcel() newArray ");
return new DBLokasi[size];
}
};

public int describeContents() {


// TODO Auto-generated method stub
return 0;
}

public void writeToParcel(Parcel parcel, int index) {


// TODO Auto-generated method stub
parcel.writeString(lat);
parcel.writeString(lng);
parcel.writeLong(id);
}
}

Beberapa method ditambahkan pada kelas DBLokasi supaya sesuai dengan aturan model kelas
di atas.

Sekarang gimana cara melewatkannya ke Activity lain ? Saya menggunakan fungsi


dari putParcelableArrayList() yang ada pada Bundle. Kemudian paket Bundle tersebut

disertakan ke dalam Intent. Untuk kemudian diserahkan ke Activity lain.

Potongan kode lengkapnya seperti ini :

ArrayList<DBLokasi> lokasi2 = datasource.getAllLokasi();


Bundle b = new Bundle();
Intent i = new Intent(this,TWMaps.class);
b.putParcelableArrayList("daftar", lokasi2);
i.putExtras(b);
startActivity(i);

Setelah sampai di Activity satunya, objek yang di-parcel kan itu diambil menggunakan fungsi
getParcelableArrayList(). Seperti kode di bawah ini.

ArrayList<DBLokasi> daftarLokasi =
b.getParcelableArrayList("daftar");
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

D. LANGKAH KERJA
1. Langkah pertama, klik kanan pada package utama → New → Java Class

2. isikan nama kelas ‘Person’. Lalu klik OK.

3. Setelah selesai terbentuk kelas Person, kita akan kondisikan kelas tersebut menjadi
seperti ini.

public class Person {

private String name;

private int age;

private String email

private String city;

Namun tidak perlu menulis satu per satu metode setter-getter nya, di Android Studio
tersedia fasilitas generator untuk hal tersebut. Caranya, setelah Anda menentukan
variabel apa saja yang akan digunakan lakukan, lakukan beberapa langkah sebagai
berikut :
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

Klik kanan pada workspace, pilih Generate.

4. Pilih Getter and Setter, atau bisa kombinasikan dengan menekan alt+insert.
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

5. Pilih semua variabel (Ctrl+A) , lalu klik OK

6. Secara otomatis metode setter dan getter masing-masing variabel akan dibuatkan. Seperti
berikut ini
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

7. Selanjutnya kita akan menambahkan plugin Android Parcelable Generator pada Android
Studio. Plugin ini berguna untuk mengubah kelas POJO menjadi obyek Parcelable.
Langkah-langkahnya sebagai berikut :

1. Buka settings : File → Settings


2. Pilih menu Plugin. Dan inputkan "Android Parcelable" pada search box kemudian
tekan Enter.

3. Klik Search in Repositories, dengan ini kita memerintahkan Android Studio untuk
melakukan pencarian plugin di server.
Setelah ketemu Android Parcelable code generator, klik Install
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

4. Tunggu proses instalasi plugin. Bila sukses, maka Anda akan diminta untuk
melakukan restartAndroid Studio yang sedang berjalan.
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

Klik Restart Android Studio → Klik OK dan jika ada pilihan untuk restart Android
Studio maka pilih restart. Biarkan Android Studio untuk restart agar plugin-nya dapat
kita gunakan setelahnya.
Catatan : Jika dialog search tidak berhasil mencari plugin, kosongkan kata
pencarian dan masukkan kembali kata pencarian "Android Parcelable". Ini bisa
terjadi karena ada error di dalam dialog Plugins.

5. Selanjutnya, setelah plugin Parcelable generator terinstal saatnya kita implementasikan


pada kelas Person. Dengan cara :
Klik kanan pada workspace (pastikan anda berada pada tab kelas Person) pilih
menu Generate.
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

6. Pilih Parcelable.

7. Pada dialog box yang tampil, pilih semua variable yang ada lalu klik OK.
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

8. Sekarang tambahkan satu tombol lagi pada activity_main.xml pada lingkaran sebagai
berikut :
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

9. Setelah selesai, kita kenalkan button tersebut di kelas MainActivity.java, dengan cara
tambahkan kodingan berikut ini

10. Buat Activity baru dengan nama MoveWithObjectActivity.

11. Kemudian, pada layout activity_move_with_object.xml tambahkan satu TextView untuk


menampilkan data yang dikirimkan.
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

12. Sekarang kita kenalkan TextView pada MoveWithObjectActivity.java tambahkan


kodenya sehingga menjadi sebagai berikut:

13. Kemudian pada kelas MoveWithObjectActivity.java kita tambahkan kode untuk


menerima obyek dari Activity Asal.
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

14. Setelah kita membuat activity tujuan, sekarang kita tinggal kita tambahkan beberapa baris
kode pada bagian switch… case di mainactivity.

15. Sehingga kode MainActivity.java kita menjadi sebagai berikut :


Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

Setelah semua komponen selesai dibuat, saatnya menjalankan kembali aplikasinya.


Cobalah menakan tombol Pindah Activity dengan Object
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

A. LEARNING OUTCOMES PRATIKUM

Codelab ini menitik beratkan pada implementasi intent untuk melakukan perpindahan dari activity ke
activity lain, dengan atau tidak membawa data.

B. ALAT DAN BAHAN


Personal Computer
Android Studio
Koneksi Internet

C. TEORI SINGKAT

Implicit Intent
Adalah tipe intent yang tidak memerlukan detail nama kelas yang ingin diaktifkan. Model
ini memungkinkan komponen dari aplikasi lain bisa merespon request intent yang dijalankan.
Penggunaan tipe intent ini umumnya diperuntukan untuk menjalankan fitur/fungsi dari komponen
aplikasi lain. Contohnya ketika kita membutuhkan fitur untuk mengambil foto. Daripada membuat
sendiri fungsi kamera, lebih baik kita menyerahkan proses tersebut pada aplikasi kamera bawaan
dari peranti atau aplikasi kamera lain yang telah terinstal sebelumnya di peranti.
Hal yang sama misalnya ketika kita membutuhkan fungsi berbagi konten. Kita bisa memanfaatkan
intent untuk menampilkan aplikasi mana saja yang bisa menangani fitur tersebut.
Implementasi implicit intent ini akan sangat memudahkan bagi pengembang agar tetap fokus pada
proses bisnis inti dari aplikasi yang dikembangkan.
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

D. LANGKAH KERJA
1. Buka kembali proyek activity_main.xml tambahkan satu tombol lagi seperti dibawah ini

2. Sekarang, buka kembali MainActivity.java dan tambahkan beberapa kodingan seperti


dibawah ini
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana

Setelah selesai, silakan jalankan lagi aplikasi anda. Dan buat kesimpulan !

E. EVALUASI dan PENUGASAN


1. Jelaskanlah masing-masing fungsi dan kegunaan dari coding-coding diatas
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent dengan Result Activity

A. LEARNING OUTCOMES PRAKTIKUM


Mampu menggunakan aplikasi android studio, mampu membedah hubungan activity dan
intent dalam menerima nilai balik.

B. ALAT dan BAHAN


1. Personal Computer dengan tersedianya aplikasi android studio
2. Koneksi Internet

C. Teori Singkat
Pada modul ini, kita akan membedah hubungan activity dan intent dalam menerima nilai
balik. Kadang kala, ketika kita menjalankan sebuah activity dari activity lain, kita
mengharapkan ada nilai hasil balik dari activity yang dijalankan ketika ia ditutup.

Contohnya kita memiliki activity A yang menjalankan activity B untuk melakukan sebuah
proses. Lalu nilai hasil dari proses tersebut dikirimkan kembali ke activity A sebelum
activity B ditutup dengan pemanggilan metode finish() . Itulah yang dinamakan sebuah
activity menerima nilai hasil balik dari activity yang dia jalankan.

D. Langkah Kerja
1. Sekarang untuk menerapkan konsep diatas, buat sebuah activity baru dengan nama
MoveForResultActivity . Setelah itu, pada activity_move_for_result.xml silakan
kondisikan layout kita dengan 1 buah TextView, 1 buah Radio Group, 3 buah Radio
Button dan 2 buah Button sebagai berikut :
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent dengan Result Activity
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent dengan Result Activity

2.Setelah selesai, lanjutkan ke berkas MoveForResultActivity.java dengan menuliskan


kode sebagai berikut :
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent dengan Result Activity
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent dengan Result Activity

3.Pada activity_main.xml tambahkan lagi satu Button dan satu TextView yang akan kita
gunakan untuk menjalankan MoveForResultActivity sebagai berikut:

Sehingga layout activity_main.xml yang kita punya menjadi seperti ini :


Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent dengan Result Activity
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent dengan Result Activity

4. Setelah selesai, kita lanjut garap berkas MainActivity.java . Buka berkasnya dan
sesuaikan kodenya sebagai berikut.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent dengan Result Activity
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent dengan Result Activity

5. Setelah selesai, pastikan tidak ada bagian kode yang tertinggal. Jalankan kembali
aplikasinya, dan coba Anda pilih tombol ‘Pindah Activity untuk Result’. Pilih angka
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent dengan Result Activity

yang Anda suka dan lihat hasilnya. Di MainActivity.java sudah ada angka yang tadi
Anda pilih di obyek textiew tvResult .

E. Bedah Kode
Perbedaan mendasar antara perpindahan activity untuk menghasilkan nilai balik dengan
tidak adalah pada metode untuk menjalankan obyek intent-nya. Sebelumnya kita
menggunakan startActivity(Intent) untuk berpindah activity. Kali ini kita menggunakan
startActivityForResult(Intent, RequestCode) .
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent dengan Result Activity

Pada baris diatas, kita akan menjalankan sebuah activity melalui intent untuk nilai balik ke
activity yang menjalankan di mana nilai REQUEST_CODE adalah 110. Penentuan nilai
110 itu dibebaskan dan kalau bisa disesuaikan dengan kebutuhan pengembangan aplikasi.

Kemudian, pada MoveForResultActivity kita memilih satu angka yang kita suka, Sebagai
contoh angka 150. Kemudian tekanlah tombol ‘Pilih’. Maka baris kode dibawah ini akan
dijalankan.

Di mana akan divalidasi terlebih dahulu apakah ada nilai dari obyek RadioButton yang
dipilih. Bila ada, maka proses selanjutnya menentukan obyek RadioButton mana yang
diklik berdasarkan nilai dari rgNumber.getCheckedRadioButtonId() .
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent dengan Result Activity

Mengapa kita tidak memeriksa langsung ke obyek RadioButton ? Karena kita


menggunakan RadioGroup sebagai parent pada obyek-obyek RadioButton . Secara
otomatis kita bisa mendapatkan mana obyek RadioButton yang dipilih dengan
rgNumber.getCheckedRadioButtonId() .

Selanjutnya, ketika sudah didapatkan nilainya, maka baris ini akan dieksekusi:

Kita membuat sebuah intent tanpa ada inputan apapun di konstruktornya. Kemudian
kita meletakkan variabel value kedalam metode putExtra(Key, Value) dengan
EXTRA_SELECTED_VALUE bertipekan static string dan bernilai “extra_selected_value”.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent dengan Result Activity

Kemudian kita jadikan obyek resultIntent yang telah dibuat sebelumnya menjadi parameter
dari setResult(RESULT_CODE, Intent) .

Setelah itu, kita panggil method finish() untuk menutup MoveForResultActivity . Ketika
MoveForResultActivity telah tertutup sempurna, maka metode onActivityResult() pada
MainActivity akan dijalankan.

Di sinilah MainActivity akan merespon terhadap nilai balik yang dikirimkan oleh
MoveForResultActivity . Pada baris 4 di atas, dilakukan perbandingan apakah requestCode
sama dengan yang dikirimkan oleh MainActivity .

Kemudian pada baris 5, diperiksa apakah nilai resultCode sama dengan resultCode yang
dikirim oleh MoveForResultActivity . Bila iya, maka data RadioButton yang dipilih akan
ditampilkan di textview tvResult .

Pada realita sehari-hari, konsep yang barusan kita pelajari ini akan bersinggungan dengan
aplikasi native lainnya. Misalnya, jika aplikasi kita membutuhkan gambar yang diambil dari
kamera atau gallery photo. Tentu kita mengharapkan nilai balik berupa alamat foto yang
dapat diterima oleh activity yang menjalankan. Begitu juga jika kita membutuhkan data
kontak yang berasal dari aplikasi phonebook bawaan peranti Android.
Untuk lebih dalam lagi silakan pelajari materi pada link berikut:
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent dengan Result Activity

Keren! Anda sudah belajar dasar-dasar penggunaan intent secara umum di proyek aplikasi
Android. 4 intent secara eksplisit dan 1 secara implisit dengan satu di antaranya mencakup
nilai balik dari activity yang dijalankan.

F. EVALUASI dan PENUGASAN


1. Mengoding lah dengan teliti dan pelan-pelan, apabila terkendala keterbatasan
bertanya pada dosen, cari tahu di google, bukalah StackOverflow ataupun tempat
bertanya yang lain. Selamat ngoding!
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Fragment

A. LEARNING OUTCOMES PRAKTIKUM


Mampu menggunakan aplikasi android studio, mampu menguasai materi fragment dan
implementasinya.

B. ALAT dan BAHAN


1. Personal Computer dengan tersedianya aplikasi android studio
2. Koneksi Internet

C. Teori Singkat
1. Fragment merupakan komponen yang memiliki fungsi untuk menampilkan antarmuka ke
pengguna melalui activity dengan memiliki layout xml sendiri.
2. Fragment memiliki daur hidup sendiri dan bergantung penuh pada daur hidup activity
dimana ia ditanamkan.
3. Fragment digunakan agar komponen tampillan aplikasi menjadi fleksibel dan dapat
digunakan kembali (reusable).
4. Satu activity bisa memiliki lebih dari satu fragment.
5. Tidak seperti activity, fragment tidak perlu didaftarkan ke dalam file
AndroidManifest.xml .
6. Satu kelas Java dinyatakan sebagai sebuah fragment ketika kelas tersebut meng-extends
(inherit) kelas Fragment .
7. Melalui Android Support Library, fragment bersifat kompatibel sampai Android api level
10 Gingerbread.
8. Analogi yang mendekati fragment pada platform lain adalah penggunaan komponen
iframe pada aplikasi berbasis web.

Fragment LifeCycle

Ada beberapa state yang perlu kita ketahui sebelum menggunakan fragment.

1. Resumed
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Fragment

Fragment bisa dilihat ketika activity sedang berjalan.


2. Paused
Ketika ada activity lain yang menutupi sebagian dari activity dimana fragment
ditambahkan. Yang dimaksud menutupi sebagian adalah ketika activity-nya tidak
tertutup sepenuhnya oleh activity lain. Jadi masih ada bagian dari activity yang masih
bisa bisa dilihat di layar.
3. Stopped
Ketika fragment tidak kelihatan di layar. Bisa jadi karena activity dimana fragment
itu ditambahkan berhenti atau bahkan fragment itu sendiri sudah dihapus dari activity.
Pada kondisi ini fragment masih hidup dengan semua informasinya. Akan tetapi
sudah tidak kelihatan di layar dan akan dihancurkan.

Skema di bawah ini menunjukkan callback method apa saja yang akan
dipanggil di dalam fragment ketika terjadi perubahan pada sebuah activity.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Fragment

Skema di atas menunjukkan bahwa perubahan state dari sebuah activity akan
mempengaruhi life cycle dari sebuah fragment. Ini karena fragment merupakan
komponen view yang bisa ditambahkan (embed) ke dalam activity.

Untuk membuat fragmen, Anda harus membuat subkelas Fragment (atau subkelasnya
yang ada). Kelas Fragmentmemiliki kode yang mirip seperti Activity. Kelas ini memiliki
metode callback yang serupa dengan aktivitas, sepertionCreate(), onStart(), onPause(),
dan onStop(). Sebenarnya , jika Anda mengkonversi aplikasi Android saat ini untuk
menggunakan fragmen, Anda mungkin cukup memindahkan kode dari metode callback
aktivitas ke masing-masing metode callback fragmen.

Biasanya, Anda harus mengimplementasikan setidaknya metode daur hidup berikut ini:

onCreate()

Sistem akan memanggilnya saat membuat fragmen. Dalam implementasi, Anda harus
melakukan inisialisasi komponen penting dari fragmen yang ingin dipertahankan saat
fragmen dihentikan sementara atau dihentikan, kemudian dilanjutkan.

onCreateView()

Sistem akan memanggilnya saat fragmen menggambar antarmuka penggunanya untuk


yang pertama kali. Untuk menggambar UI fragmen, Anda harus
mengembalikan View dari metode ini yang menjadi akar layout fragmen. Hasil yang
dikembalikan bisa berupa null jika fragmen tidak menyediakan UI.

onPause()

Sistem akan memanggil metode ini sebagai indikasi pertama bahwa pengguna sedang
meninggalkan fragmen Anda (walau itu tidak selalu berarti fragmen sedang
dimusnahkan). Inilah biasanya tempat Anda harus mengikat setiap perubahan yang harus
dipertahankan selepas sesi pengguna saat ini (karena pengguna mungkin tidak kembali).
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Fragment

Kebanyakan aplikasi harus mengimplementasikan setidaknya tiga metode ini untuk setiap
fragmen, namun ada beberapa metode callback lain yang juga harus Anda gunakan untuk
menangani berbagai tahap daur hidup fragmen. Semua metode callback daur hidup akan
dibahas secara lebih detail, di bagian tentang Menangani Daur Hidup Fragmen.

Ada juga beberapa subkelas yang mungkin perlu diperpanjang, sebagai ganti kelas
basis Fragment:

DialogFragment

Menampilkan dialog mengambang. Penggunaan kelas ini untuk membuat dialog


merupakan alternatif yang baik dari penggunaan metode helper dialog di kelas Activity,
karena Anda bisa menyatukan dialog fragmen ke dalam back-stack fragmen yang
dikelola oleh aktivitas, sehingga pengguna bisa menutup ke fragmen yang ditinggalkan.

ListFragment

Menampilkan daftar item yang dikelola oleh adaptor (misalnya SimpleCursorAdapter),


serupa dengan ListActivity. Menampilkan beberapa metode pengelolaan tampilan daftar
seperti callback onListItemClick() untuk menangani kejadian klik.

PreferenceFragment

Menampilkan hierarki objek Preference sebagai daftar, serupa


dengan PreferenceActivity. Hal ini berguna saat membuat aktivitas "setelan" untuk
aplikasi Anda.

Menambahkan antarmuka pengguna

Fragmen biasanya digunakan sebagai bagian dari antarmuka pengguna aktivitas dan
menyumbangkan layoutnya sendiri ke aktivitas.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Fragment

Untuk menyediakan layout fragmen, Anda harus mengimplementasikan metode


callback onCreateView(), yang dipanggil sistem Android bila tiba saatnya fragmen
menggambar layoutnya. Implementasi Anda atas metode ini harus
mengembalikan View yang menjadi akar layout fragmen.

Parameter container yang diteruskan ke onCreateView() adalah induk ViewGroup (dari


layout aktivitas) tempat layout fragmen akan disisipkan.
Parameter savedInstanceState adalah Bundle yang menyediakan data tentang instance
fragmen sebelumnya, jika fragmen dilanjutkan (status pemulihan dibahas selengkapnya
di bagian tentang Menangani Daur Hidup Fragmen).

Metode inflate() membutuhkan tiga argumen:

 ID sumber daya layout yang ingin dimekarkan.

 ViewGroup akan menjadi induk dari layout yang dimekarkan. container perlu diteruskan
agar sistem menerapkan parameter layout ke tampilan akar layout yang dimekarkan, yang
ditetapkan dalam tampilan induk yang akan dituju.

 Boolean yang menunjukkan apakah layout yang dimekarkan harus dilampirkan


ke ViewGroup (parameter kedua) selama pemekaran. (Dalam hal ini, ini salah karena
sistem sudah memasukkan layout yang dimekarkan ke dalam container—meneruskan
true akan membuat tampilan grup berlebih dalam layout akhir.)

Untuk tahu lebih detail tentang fragment silakan kamu pahami baik-baik materi di link
ini: Fragments (https://developer.android.com/guide/components/fragments.html)

D. EVALUASI dan PENUGASAN


1. Carilah lebih detail tentang fragment selain dari pada alamat diatas.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Fragment
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Fragment Sederhana

A. LEARNING OUTCOMES PRAKTIKUM


Mampu menggunakan aplikasi android studio, mampu membuat tampilan fleksibel dengan
fragment.

B. ALAT dan BAHAN


1. Personal Computer dengan tersedianya aplikasi android studio
2. Koneksi Internet

C. Teori Singkat
Agar Anda dapat lebih memahami topik fragment, akan ada beberapa codelab yang akan
Anda lakukan.

1. Membuat tampilan fleksibel dengan fragment.

2. Membuat tampilan yang dapat digeser-geser.

3. Membuat tampilan yang dapat disesuaikan dengan perubahan orientasi device.

D. Langkah Kerja

Buat project dengan kriteria sebagai berikut :

Project Name : MyFlexibleFragment

Minimum Level Api : 15

Default Activity : Empty Activity

Activity Name : MainActivity

1. Pada activity_main.xml , silakan kondisikan kode pada berkas tersebut menjadi


seperti berikut :
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Fragment Sederhana

2. Kemudian, kita buat beberapa fragment untuk mengimplementasikan perpindahan


tampilan tanpa perpindahan activity. Pertama kita buat Fragment dengan nama
HomeFragment . Caranya : klik kanan pada package utama pada project aplikasi
Anda → New → Fragment → Fragment (Blank).

3. Setelah tampil dialog untuk fragment, isikan HomeFragment pada kolom Fragment
Name dan uncheck untuk kedua pilihan (Include fragment factory methods dan
include interface callbacks) seperti gambar dibawah ini. Klik Finish untuk
melanjutkan penciptaan fragment.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Fragment Sederhana

4. Setelah HomeFragment tercipta, pada fragment_home.xml kita sesuaikan tampilannya


dengan menambahkan sebuah obyek TextView dan sebuah obyek Button seperti
berikut :
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Fragment Sederhana

Akan terjadi error pada tools:context . Tenang, yang perlu Anda lakukan adalah
menyesuaikannya dengan nama activity dan ditambahkan dengan nama package dari
project Anda.

5. Pada HomeFragment.java lakukan penyesuaian kode sebagai berikut:

6. Selanjutnya, pada MainActivity.java , kita tanamkan HomeFragment kedalam activity


tersebut sehingga bisa tampil ke layar pengguna dengan menambahkan beberapa baris
berikut:
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Fragment Sederhana

Untuk mengatasi tanda merah pada class, jangan lupa untuk tekan (Alt + Enter) untuk
import kelas secara otomatis.
7. Sekarang, setelah selesai semua, silakan jalankan aplikasi Anda dan hasilnya haruslah
seperti ini.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Fragment Sederhana

Ketika aplikasi dijalankan, aplikasi akan menampilkan satu text dan satu button yang
dimana kedua komponen tersebut dimiliki oleh HomeFragment .

E. Bedah Kode

FrameLayout memiliki sifat sebagai berikut: semua komponen view di dalam


FrameLayout bersifat menumpuk. Bila pada suatu hirarki FrameLayout terdapat satu
view dengan posisi paling atas, maka view tersebut akan menjadi alas untuk view di
atasnya. Gambarannya sebagai berikut:

Dengan karakteristik seperti ini, FrameLayout merupakan sebuah layout yang paling
optimal dalam proses manipulasi penampilan obyek fragment ke layar pengguna.

Pada HomeFragment.java terdapat metode onCreateView() dimana layout interface


didefinisikan dan ditransformasi dari layout berupa file xml kedalam obyek view
dengan menggunakan metode inflate() .
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Fragment Sederhana

Inflater.inflate() merupakan obyek dari LayoutInflater yang berfungsi untuk mengubah


layout xml ke dalam bentuk obyek viewgroup atau widget melalui pemanggilan metode
inflate() .

Isian dari tiga parameter yang terdapat pada metode inflate() berdasarkan dari :

Dimana kita memilih pilihan yang ketiga :


@LayoutRes int resource : Layout yang ingin diubah
@Nullable ViewGroup root : Root dari Layout Activity

Boolean attachToRoot : Apakah kita akan menempelkan layout kita ke dalam root dari
parent layout yang ada. Jika ya, maka akan ditempelkan kedalam parent layout yang
ada. Jika tidak, maka hanya akan menghasilkan nilai balik dalam bentu obyek view
saja.
Kita memilih false pada attachToRoot karena pada kode ini kita ingin menambahkan
event onclick pada button-nya. Maka kita membutuhkan nilai balik berupa view.
Bacaan berikut akan memberi wawasan yang lebih dalam tentang proses inflate sebuah
layout:
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Fragment Sederhana

Secara default, attachToRoot bernilai false. Jadi kita hanya inginkan mengubah layout
xml kedalam bentuk obyek view.

Sedikit berbeda pada proses casting view dari sebuah ID di dalam layout xml, disini
casting obyek Button dilakukan dengan
(Button)view.findViewById(R.id.btn_category). Kode tersebut menandakan
btn_category berada pada obyek view dimana obyek view berasal dari konversi
fragment_home.xml. Bila hanya (Button)findViewById(R.id.btn_category) , maka
btn_category berada pada root layout, activity_main.xml .
Sekarang pada MainActivity.java kita lakukan proses penempelan atau pemasangan
obyek
HomeFragment sehingga dapat ditampilkan ke layar dengan mekanisme sebagai berikut
:

Dimana,

Kita menggunakan instance dari FragmentManager yang merupakan antarmuka untuk


mengorganisir obyek fragment yang terdapat didalam sebuah Activity . Disini kita
menggunakan kelas FragmentManager yang berasal dari Android Support Library v4,
agar bisa kompatibel ke versi Android sebelumnya (Backward Compability).
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Fragment Sederhana

Oleh karena itu kita menggunakan getSupportFragmentManager() dan bukan


getFragmentManager() .
Untuk detail terkait FragmentManager , silakan Anda meluncur ke :
 Fragment Manager

FragmentTransaction merupakan api untuk melakukan operasi pada fragment seperti


add() , replace() , commit() dsb.

Silakan ke halaman ini untuk detailnya :


 Fragment Transaction
(https://developer.android.com/reference/android/app/FragmentTransaction.html)

Disinilah proses manipulasi penambahan fragment kedalam activity terjadi. Metode


add() akan menambahkan obyek fragment kedalam layout container. Layout container
ini merupakan obyek FrameLayout dengan ID frame_container . Ia memiliki tag
dengan nama kelas dari HomeFragment itu sendiri.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Fragment Sederhana

Baris diatas akan meminta obyek mFragmentTransaction untuk melakukan pemasangan


obyek secara asynchronous untuk ditampilkan ke antar muka pengguna (user
interface).

Selanjutnya, kita akan membuat sebuah fragment lagi untuk melihat bagaimana sebuah
tampilan bisa dengan fleksibel berubah di dalam satu activity, tanpa berpindah
halaman.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Flexible Fragment di Satu Activity

A. LEARNING OUTCOMES PRAKTIKUM


Mampu menggunakan aplikasi android studio, mampu membuat flexible fragment disatu
Activity.

B. ALAT dan BAHAN


1. Personal Computer dengan tersedianya aplikasi android studio
2. Koneksi Internet

C. Teori Singkat
Fragment merupakan komponen yang memiliki fungsi untuk menampilkan antarmuka ke
pengguna melalui activity dengan memiliki layout xml sendiri. Fragment memiliki daur
hidup sendiri dan bergantung penuh pada daur hidup activity dimana ia ditanamkan.
Fragment digunakan agar komponen tampillan aplikasi menjadi fleksibel dan dapat
digunakan kembali (reusable).
Satu activity bisa memiliki lebih dari satu fragment. Tidak seperti activity, fragment tidak
perlu didaftarkan ke dalam file AndroidManifest.xml .

D. Langkah Kerja
Buat kembali fragment baru dengan nama CategoryFragment dengan cara yang sama
seperti sebelumnya. Jangan lupa untuk meng-uncheck pilihan untuk generate default
methods dan callbacks.

1. Pada fragment_category.xml silakan kondisikan kode Anda menjadi seperti berikut:


Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Flexible Fragment di Satu Activity

2. Setelah selesai dengan layout xml, sekarang pada file CategoryFragment.java modifikasi
kodenya menjadi sebagai berikut :
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Flexible Fragment di Satu Activity

3. Pada langkah diatas kita sedang menyiapkan langkah selanjutnya, bagaimana kita bisa
mengirimkan data dari satu fragment ke fragment lain. Sekarang pada HomeFragment
tambahkan baris berikut pada method onClick().

4. Sehingga kode dari HomeFragment kita sekarang menjadi sebagai berikut :


Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Flexible Fragment di Satu Activity
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Flexible Fragment di Satu Activity

5. Setelah selesai, silakan jalankan aplikasi lagi dan coba klik tombol Ke Halaman
Category, aplikasi sudah berpindah tampilan tanpa berpindah activity!

E. Bedah Kode
Anda telah belajar bagaiman berpindah tampilan tanpa harus berpindah activity, dengan
fragment hal tersebut menjadi terlihat mudah. Mari kita breakdown satu persatu hal baru
yang baru saja Anda tulis :

Ya baris diatas seperti pada sebelumnya kita memanfaatkan FragmentManager untuk


mengorganize atau mengkoordinasi semua obyek fragment yang terdapat didalam sebuah
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Flexible Fragment di Satu Activity

activity dan menempelkan CategoryFragment kedalam activity dengan menggunakan


FragmentTransaction .

Ada yang beda disini, kita menggunakan method replace() dan bukan add() ketika ingin
menempelkan sebuah fragment baru. Ya, dengan parameter input yang sama pada method
add() , method replace() akan mengganti obyek fragment yang sedang tampil saat ini,
HomeFragment dengan obyek fragment yang baru, CategoryFragment .

Ok Anda, pasti menanyakan kenapa ada mFragmentTransaction.addToBackStack(null)


setelahnya? Kita menggunakan addToBackStack(null) karena kita ingin obyek fragment
yang saat ini kita ciptakan masuk kedalam sebuah fragment stack yang nantinya ketika kita
tekan tombol back dia akan pop-out keluar dari stack dan menampilkan obyek fragment
sebelumnya, HomeFragment .
Sekarang, jika Anda menghapus baris tersebut dan menjalankan ulang aplikasi Anda, pasti
Anda akan melihat bahwa ketika Anda mengklik tombol back pada peranti Anda, aplikasi
akan langsung tertutup.
A. LEARNING OUTCOMES PRAKTIKUM
Mahasiwa mampu membuaat latihan sederhana Fragment pada Android.

B. ALAT dan BAHAN


1. Personal Computer
2. Aplikasi Android
3. Koneksi jaringan/Internet

C. Teori

Fragment mewakili perilaku atau bagian dari antarmuka pengguna dalam


Activity. Anda bisa mengombinasikan beberapa fragmen dalam satu aktivitas
untuk membangun UI multipanel dan menggunakan kembali sebuah fragmen
dalam beberapa aktivitas. Anda bisa menganggap fragmen sebagai bagian
modular dari aktivitas, yang memiliki daur hidup sendiri, menerima kejadian
masukan sendiri, dan yang bisa Anda tambahkan atau hapus saat aktivitas berjalan
(semacam "sub aktivitas" yang bisa digunakan kembali dalam aktivitas berbeda).

Fragmen harus selalu tersemat dalam aktivitas dan daur hidup fragmen
secara langsung dipengaruhi oleh daur hidup aktivitas host-nya. Misalnya, saat
aktivitas dihentikan sementara, semua fragmen di dalamnya juga dihentikan
sementara, dan bila aktivitas dimusnahkan, semua fragmen juga demikian. Akan
tetapi, saat aktivitas berjalan (dalam status daur hidup dilanjutkan, Anda bisa
memanipulasi setiap fragmen secara terpisah, seperti menambah atau
membuangnya. Saat melakukan transaksi fragmen, Anda juga bisa
menambahkannya ke back-stack yang dikelola oleh aktivitas —setiap entri back-
stack merupakan catatan transaksi fragmen yang terjadi. Dengan back-stack
pengguna dapat membalikkan transaksi fragmen (mengarah mundur), dengan
menekan tombol Kembali.

Bila Anda menambahkan fragmen sebagai bagian dari layout aktivitas,


fragmen itu akan berada dalam ViewGroup di hierarki tampilan aktivitas tersebut
dan fragmen mendefinisikan layout tampilannya sendiri. Anda bisa menyisipkan
fragmen ke dalam layout aktivitas dengan mendeklarasikan fragmen dalam file
layout aktivitas, sebagai elemen <fragment>, atau dari kode aplikasi dengan
menambahkannya ke ViewGroup yang ada. Akan tetapi, fragmen tidak harus
menjadi bagian dari layout aktivitas; Anda juga bisa menggunakan fragmen tanpa
UI-nya sendiri sebagai pekerja tak terlihat untuk aktivitas tersebut.

Dokumen ini menjelaskan cara membangun aplikasi menggunakan


fragmen, termasuk cara fragmen mempertahankan statusnya bila ditambahkan ke
back-stack aktivitas, berbagi kejadian dengan aktivitas, dan fragmen lain dalam
aktivitas, berkontribusi pada bilah aksi aktivitas, dan lainnya.

Kita telah belajar bagaimana berpindah dari satu fragment ke fragment


lain, kurang lengkap rasanya jika kita belum tahu bagaimana berpindah fragment
dengan membawa data. Terdapat dua cara, 1.Dengan menggunakan obyek Bundle
dan 2. Dengan menggunakan setter dan getter. Mari kita langsung praktek untuk
kedua cara tersebut.
1. Buat Fragment lagi dengan cara yang sama dengan nama
DetailCategoryFragment . Pada fragment_detail_category.xml sesuaikan
kodenya menjadi seperti berikut:
2. Setelah selesai, silakan lengkapi kode pada DetailCategoryFragment.java
menjadi seperti berikut

Kode diatas akan mendemonstrasikan bagaimana melakukan penampilan data


yang dikirim melalui perpindahan fragment.
3. Baik, tinggal selangkah lagi proses implementasi dari pengiriman data melalui
perpindahan fragment selesai, sekarang buka kembali CategoryFragment.java
lalu tambahkan baris berikut pada method onClick() .

Sehingga kode CategoryFragment kita sekarang menjadi :


4. Sekarang, setelah selesai semua, silakan Anda jalankan aplikasinya untuk
melihat hasil dari kode yang diatas. Seharusnya ketika Anda mengklik tombol
Kategory Lifestyle pada CategoryFragment akan ada data yang dikirimkan
sewaktu perpindahan fragment yang itu melalui object bundle dan mekanisme
metode setter and getter.

Tampilan aplikasi Anda sekarang sudah menjadi seperti ini.

Bedah Kode :
Kita memiliki dua mekanisme dalam mengirimkan data antar fragment yaitu:

Dengan Menggunakan Bundle

Pada kode diatas, kita menggunakan obyek Bundle untuk mengirimkan data antar
fragment, perhatikan cara yang digunakan sama dengan cara yang telah kita
implementasikan sebelumnya di Activity . Setelah dibuat obyeknya dan data yang
mau dikirimkan apa kemudian kita hanya perlu
menambahkan sebaris kode berikut :

Dan cara mengambil data yang dikirimkan melalui obyek Bundle pada Fragment
tujuan sangatlah mudah hanya dengan memanggil metode getArguments() di
fragment DetailCategoryFragment seperti berikut :

Kelas Bundle merupakan kelas map data string untuk obyek-obyek parcelable. Di
sini kita bias menginputkan lebih dari satu parameter/variabel ke dalam obyek
Bundle .

Dengan Menggunakan Setter dan Getter


Kelas fragment adalah kelas java pada umumnya, dengan menggunakan
metode setter dan getter untuk mengirimkan parameter/variabel dari satu
fragment ke fragment lainnya. Seperti baris berikut :

Yang mana isi kode pada kelas DetailCategoryFragment sebagai berikut :

Cara menggunakannya juga cukup mudah, hanya dengan menempatkan


value yang ingin dikirimkan via metode setter lalu diambil dengan
menggunakan metode getter seperti pada baris berikut:
Dua cara diatas sudah umum dilakukan dan diimplementasikan ke dalam project
pengembangan aplikasi android. Selamat! Sejauh ini Anda sudah memahami
lebih jauh tentang Fragment dari bagaimana membuat, menempelkan ke activity
hingga berpindah antar fragment dengan atau tidak membawa data.

Fragment untuk Dialog


Selanjutnya kita masuk ke pemanfaatan fragment untuk menampilkan sebuah
custom dialog. Kita akan menggunakan DialogFragment lengkap dengan
interaksinya. Siap? Ayo kita lanjutkan ngodingnya.
1. Baik sekarang buat kembali satu kelas Fragment dengan nama
OptionDialogFragment, jangan lupa untuk uncheck pilihan include fragment
factory methods dan include interface methods. Ketika sudah diciptakan,
pada fragment_option_dialog.xml kondisikan kode nya menjadi seperti
berikut:
2. Setelah selesai dengan berkas layout xml sekarang, lanjutkan ngoding untuk
OptionDialogFragment . Kondisikan, kodenya menjadi sebagai berikut :
Ingat, inherit ke kelas DialogFragment pada android support library.

3. Setelah selesai, tambahkan beberapa baris pada metode onClick() di


DetailCategoryFragment menjadi sebagai berikut :
4. Sehingga kode DetailCategoryFragment kita saat ini menjadi seperti ini:
5. Sekarang jalankan kembali aplikasi dan klik pada tombol Tampilkan sebuah
dialog dan hasilnya akan muncul obyek OptionDialogFragment yang baru saja
kita buat, dan coba Anda pilih salah satu option yang ada dan klik tombol
Pilih, lihat hasil dari yang kita pilih tampil ke dalam bentuk so message (
Toast ).
Bedah Kode
1. public class OptionDialogFragment extends DialogFragment

Sama dengan obyek fragment seperti sebelumnya, di sini kelas fragment yang
kita buat inherit ke DialogFragment . Dengan begitu, obyek fragment sekarang
merupakan obyek dialog yang akan tampil mengambang dilayar, seperti pada
obyek modal pada platform lain, obyek DialogFragment dapat disesuaikan
tampilan dan fungsinya secara spesifik. Di sini kita menampillkan sebuah dialog
ke pengguna untuk memilih sebuah opsi yang disediakan.

Pada proses pemanggilannya pun hampir sama dengan yang kita lakukan
sebelumnya. Namun perbedaanya ada disini.

1. FragmentManager mFragmentManager = getChildFragmentManager();

Kita tidak menggunakan getFragmentManager() saat ini,


getChildFragmentManager() merupakan pilihan yang tepat untuk kondisi saat ini,
sebuah nested fragment / fragment bersarang. Karena OptionDialogFragment
dipanggil didalam sebuah obyek fragment yang telah ada sebelumnya yaitu,
DetailDialogFragment , maka untuk performa yang lebih baik penggunaan
getChildFragmentManager() adalah pilihan yang tepat.
1. mOptionDialogFragment.show(mFragmentManager,
OptionDialogFragment.class.getSimpleName());
Baris diatas digunakan untuk menampilkan obyek OptionDialogFragment ke
layar.

Untuk proses handling event ketika tombol Pilih pada OptionDialogFragment


diklik, kita menggunakan implementasi interface. Bagi yang belum paham
tentang definisi interface pada pemrograman java berikut definisi singkatnya.

Interface adalah sebuah kelas yang terdiri kumpulan method yang hanya
memuat deklarasi dan struktur method, tanpa detail implementasinya.

Kelas interface yang kita punya pada OptionDialogFragment adalah sebagai


berikut :
1. public interface OnOptionDialogListener{
2. void onOptionChoosen(String text);
3. }

Dimana kita menggunakannya pada bagian ini :

Dan mengimplementasikannya pada bagian ini :


Jadi ketika pengguna mengklik tombol Pilih setelah mengklik salah satu pilihan,
baris ini akan dieksekusi :
1. getOnOptionDialogListener().onOptionChoosen(coach);

Yang kemudian, metode onOptionChoosen() pada baris ini akan dipanggil untuk
menampilkan nilai dari pilihan yang dipilih pada Toast.

Cool, sejauh ini kami harap Anda sudah lebih memahami tentang bentuk dan
implementasi fragment seperti apa. Terakhir sebelum sesi ini selesai kita akan
belajar bagaimana menjalankan sebuah Activity dari fragment. Caranya pun
hampir sama dengan apa yang telah kita pelajari di Activity.

Sekarang, buat sebuah Activity dengan nama ProfileActivity dan setelah


terbentuk, pada activity_profile.xml kondisikan kode yang ada menjadi sebagai
berikut :
Kemudian pada method onClick() pilihan R.id.btn_profile di kelas
DetailCategoryFragment tambahkan beberapa baris berikut untuk menjalankan
ProfileActivity :
1. Intent mIntent = new Intent(getActivity(), ProfileActivity.class);
2. startActivity(mIntent);

Dimana getActivity() adalah kelas activity dimana fragment tersebut


ditempelkan.

Setelah selesai semua, coba jalankan aplikasi Anda dan klik tombol Ke Halaman
Profile Activity.
A. LEARNING OUTCOMES PRAKTIKUM

Mahasiwa mampu menjelaskan fungsi dan cara kerja Threads, Handler, dan AsyncTask
pada Android.
.

B. ALAT dan BAHAN


1. Personal Computer
2. Aplikasi Android
3. Koneksi jaringan/Internet

C. Teori

Thread adalah sekumpulan perintah (instruksi) yang dapat dilaksanakan (dieksekusi) secara
beriringan dengan thread lainnya. Hal ini dicapai dengan menggunakan mekanisme time slice
(ketika satu CPU melakukan perpindahan antara satu thread ke thread lainnya) atau multiprocess
(ketika thread tersebut dijalankan oleh CPU yang berbeda dalam satu sistem).

Gambarannya sebagai berikut:

Thread A dan Thread B masih tetep berjalan beriringan dengan main thread.

Secara umum semua komponen aplikasi di Android berjalan pada proses dan thread yang
sama. Ini disebut main thread atau ui thread. Secara default ini berarti sistem Android tidak
secara otomatis menciptakan thread lain untuk menjalankan proses secara spesifik.
Ada dua aturan yang harus kita perhatikan agar tercipta pengalaman pengguna yang baik
ketika menerapkan proses komputasi intensif yang memakan waktu.
1. Jangan memblok ui thread atau main thread. Ini berarti kita harus menciptakan worker
threads atau async task. Ini akan menjaga aplikasi tetap responsif.
2. Jangan melakukan pemanggilan komponen ui widget (seperti textview, button,
imageview dsb) didalam worker thread atau thread yang sedang berjalan secara
asynchronous. Ini karena Android UI Toolkit merupakan komponen yang hanya berjalan
pada ui thread.
Worker Thread
Dengan menggunakan worker thread, kita dapat menciptakan thread baru dan
menjalankan proses di thread tersebut. Terciptanya thread baru dapat memenuhi aturan no 1
tentang pengalaman pengguna yang baik, yaitu dengan tidak memblokir ui thread
Contoh bagaimana menggunakan worker threads yaitu.

Sayangnya, contoh worker thread di atas tidak memenuhi aturan no 2, yaitu jangan
melakukan pemanggilan ui di luar ui thread. Perhatikan metode setText . Metode ini adalah
bagian dari textView . Sementara itu textView adalah salah satu komponen ui. Sehingga, ia tidak
diperbolehkan untuk dijalankan di worker thread.

Agar kode di atas memenuhi aturan no 2, kita dapat menggunakan metode post milik ui
atau view.

Contohnya:
Kode run() di dalam new Thread (new runnable) berjalan secara asynchronous,
sedangkan kode run() di dalam textView.post() berjalan di ui thread.

Ada beberapa fungsi yang dapat dimanfaatkan untuk memenuhi aturan 2 yaitu:
1. Activity.runOnUiThread(Runnable)
2. View.post(Runnable)
3. View.postDelayed(Runnable , long)

Handler
Beberapa fungsi seperti view.post dapat menyelesaikan masalah tentang worker thread.
Akan tetapi menggunakan fungsi view.post akan menjadikan kode lebih kompleks dan sulit
untuk dikelola.
Solusinya adalah dengan menggunakan handler yang dapat mengirim dan memproses
message dan objek runnable lainnya yang berhubungan dengan thread. Ketika handler
diciptakan, maka dia terkait dengan thread dimana diciptakan.
Berikut adalah contoh perubahan yang dapat kita lakukan:

Dengan mendeklarasikan obyek handler pada ui thread maka obyek handlers diikat ke ui
thread.
Ketika suatu message dikirim ke handler, maka handler akan memprosesnya. Proses dari
message tersebut terjadi pada ui thread sehingga aturan no 2 dapat terpenuhi.

AsyncTask
Asynctask adalah komponen pada Android yang memiliki kemampuan untuk
menjalankan proses secara asynchronous. Ia tetap bisa berkomunikasi dengan ui thread untuk
mengirimkan hasil proses yang dilakukannya, tanpa melanggar dua aturan utama yang dijelaskan
sebelumnya. Selain itu, asynctask sangat mudah dan sederhana untuk diterapkan.
Poin-poin penting tentang asynctask:
1. Diperuntukan untuk proses asynchronous dan mampu berkomunikasi dengan ui thread
untuk mengirimkan hasil proses.
2. Kelas Java yang dibuat harus inherit kepada AsyncTask .
3. Kasus umum yang biasa diterapkan adalah ketika mengunduh berkas dari Internet dan
dengan menampilkan perkembangan pengunduhan di layar.
Params, Progress, dan Result

Kelas AsyncTask menggunakan 3 tipe generik.

Yang perlu diperhatikan adalah kode <URL, Integer, Long>.

3 argument di atas menunjukkan tipe data apa yang digunakan di dalam asynctask. Argument
pertama adalah params , kedua adalah progress , dan ketika adalah result .

Penjelasan 3 argument di atas adalah seperti berikut:


Params : Tipe parameter yang akan menjadi inputan untuk proses asynchronous.
Progress : Tipe satuan unit untuk memberi kabar perkembangan ke ui thread.
Result : Tipe hasil dari proses asynchronous yang dijalankan.

Beberapa Metode Utama di dalam AsyncTask


Kelas asynctask memiliki 4 metode utama, yaitu :
1. onPreExecute()
Metode ini akan dijalankan pertama kali sebelum proses asynchronous dilakukan.
Metode ini masih berada pada ui thread. Pada umumnya, ia digunakan untuk
menampilkan komponen ui seperti progress bar.
2. doInBackground()
Metode ini akan dijalankan setelah onPreExecute() . Disinilah proses asynchronous
terjadi. Pada kasus diatas, metode doInBackground() akan melakukan pengunduhan
berkas dari network melalui metode downloadFile() dan hasil perkembangannya dikirim
melalui metode publishProgress().

3. onProgressUpdate()
Metode ini yang akan menerima input dari apa yang dilakukan oleh metode
publishProgress . Proses umum yang terjadi adalah memperbarui persentasi dari tampilan
progress bar seperti ini.

4. onPostExecute()
Setelah proses di doInBackground() selesai, maka hasilnya akan dikirimkan ke metode
onPostExecute() . Kemudian prosesnya akan dikembalikan lagi ke ui thread. Disinilah
proses penampilan atau proses lain yang menunjukkan bahwa AsyncTask telah selesai
dijalankan.
Dalam contoh di atas, kita bisa menampilkan berkas yang baru saja diunduh.
Running Asynctask
Untuk menjalankan AsyncTask , caranya adalah dengan menuliskan kode baris :

Baris diatas akan membuat asynctask berjalan secara berurutan berdasarkan proses dan tanggung
jawab pada setiap metode didalamnya.

Berikut proses kerja yang terjadi di asynctask.


A. LEARNING OUTCOMES PRAKTIKUM
Mahasiwa mampu membuat Latihan: AsyncTask Sederhana pada Android.

B. ALAT dan BAHAN


1. Personal Computer
2. Aplikasi Android
3. Koneksi jaringan/Internet

C. Teori
Asynctask adalah komponen pada Android yang memiliki kemampuan untuk
menjalankan proses secara asynchronous. Ia tetap bisa berkomunikasi dengan ui
thread untuk mengirimkan hasil proses yang dilakukannya, tanpa melanggar dua
aturan utama yang dijelaskan sebelumnya. Selain itu, asynctask sangat mudah dan
sederhana untuk diterapkan.
Poin-poin penting tentang asynctask:
1. Diperuntukan untuk proses asynchronous dan mampu berkomunikasi
dengan ui thread untuk mengirimkan hasil proses.
2. Kelas Java yang dibuat harus inherit kepada AsyncTask .
3. Kasus umum yang biasa diterapkan adalah ketika mengunduh berkas dari
Internet dan dengan menampilkan perkembangan pengunduhan di layar.

Kita buat sebuah proyek aplikasi bernama MyAsyncTask dengan Empty Activity
(konfigurasi dasar) seperti pada sebelumnya.
1. Jika sudah, kondisikan agar activity_main.xml menjadi seperti ini:
Kita memiliki sebuah obyek TextView berID tv_status yang akan
menampilkan proses yang sedang dijalankan oleh obyek AsyncTask .
2. Selanjutnya lengkapi kode pada MainActivity sehingga menjadi seperti
ini:
3. Sekarang, silakan jalankan aplikasi MyAsyncTask dan perhatikan obyek
TextView akan melakukan perubahan status terhadap obyek
DemoAsyncTask yang dijalankan.

Pada metode doInBackground() , kita hanya menulis log prosesnya saja. Bukan
sebuah
pendekatan yang baik untuk mengakses komponen antarmuka yang berada pada
thread utama (main thread) ke dalam background thread.

Bedah Kode :
Proyek yang kita kerjakan adalah contoh sederhana dari penggunaan AsyncTask
untuk membuat proses berjalan secara asynchronous dan tetap bisa berkomunikasi
(synchronize) dengan ui thread.
Setiap eksekusi dari metode dari AsyncTask yang kita buat kita pantau dengan
menggunakan sebuah textview tvStatus.

1. DemoAsync demoAsync = new DemoAsync();


2. demoAsync.execute("Halo Ini Demo AsyncTask");

Baris diatas akan membuat obyek DemoAsync dan menjanlakan AsyncTask


dengan inputan berupa obyek string.
Proses eksekusi kode AsyncTask diatas diawali dengan private class DemoAsync
extends AsyncTask{
….

AsyncTask ini memiliki 3 tipe generik.


 Param : Menerima inputan obyek string.
 Progress : Void ⇒ Merupakan obyek dari void dengan kata lain, tidak ada
progress yang akan ditampilkan.
 Result : Hasil dari proses berupa obyek string.

Pada metode onPreExecute() , kita hanya menuliskan status onPreExecute


kedalam obyek TextView untuk menandakan bahwa metode onPreExecute telah
dijalankan.
Kita melakukan proses sleep/idle selama 5 detik (5000 miliseconds) dan
mengembalikan nilai param[0] (param indeks ke 0) yang bernilai ‘Halo ini demo
AsyncTask’. Jika diperhatikan, ada tanda ... dalam param tersebut, ini merupakan
bentuk lain dari array dan menunjukkan bahwa inputan dari sebuah AsyncTask
bisa lebih dari satu.

Aturan kedua menjelaskan, jangan melakukan manipulasi terhadap ui toolkit pada


worker thread yang berjalan secara asynchronous. Oleh karena itu, kita hanya bisa
memantau proses yang terjadi di dalam log di tab android monitor pada Android
Studio seperti berikut:
Terakhir, metode onPostExecute() akan menampilkan hasil proses yang dilakukan
di doInBackground() sebagai berikut :

Nilai dari string s adalah ‘Halo ini Demo AsyncTask’ dan hasilnya akan menjadi
seperti berikut :

Dengan menggunakan asynchronous task untuk menyelesaikan proses yang


memakan waktu dan membutuhkan komputasi intensif, maka aplikasi akan tetap
responsif.
A. LEARNING OUTCOMES PRAKTIKUM
Mahasiwa mampu membuat Latihan: AsyncTask Sederhana pada Android.

B. ALAT dan BAHAN


1. Personal Computer
2. Aplikasi Android
3. Koneksi jaringan/Internet

C. Teori
Activity dan fragment adalah dua komponen yang memberikan pengalaman kepada pengguna
secara langsung. Pengguna dapat melihat dan berinteraksi diatasnya.
Service berada pada sisi yang lain, komponen ini tidak memiliki antarmuka dan bahkan
pengguna tidak akan akan tahu bagaimana dia bekerja. Pengalaman yang diberikan oleh service
hanya berupa proses yang tidak terlihat. Ia digunakan untuk menjalankan beragam macam proses
yang memakan waktu lama.
Walaupun berjalan secara background, pada dasarnya service dan komponen Android lainnya
berjalan pada satu proses dan thread yang sama yaitu main thread atau ui thread. Bekerja di
background bukan berarti ia bekerja secara asynchronous. Service tetap membutuhkan thread
terpisah jika kita ingin melakukan proses yang membutuhkan komputasi intensif atau yang
memakan waktu.

Contoh pemanfaatan service sudah banyak sekali, antara lain:


 Aplikasi sosial media atau aplikasi yang memiliki kemampuan untuk menerima push
notification. Aplikasi semacam ini pasti memiliki sebuah service yang berjalan dalam
posisi stand by untuk selalu menerima pesan yang masuk.
 Aplikasi chat juga membutuhkan service untuk melakukan pengiriman dan menerima
pesan yang dikirimkan oleh pengguna.
 Aplikasi pemutar musik juga melakukan hal yang sama. Untuk memberikan pengalaman
yang lebih baik kepada pengguna, aplikasi pemutar musik biasanya meletakkan proses
streaming atau memainkan musik di komponen service dengan tetap mempertahankan
integrasi dengan komponen lain, misalnya notifikasi. Seperti gambar berikut :
Secara umum, terdapat dua bentuk dari service :
1. Started
Service berjenis ini adalah tipe yang dijalankan oleh komponen lain, misal activity.
Sekali dijalankan, service ini akan berjalan selama belum dimatikan atau proses yang
dijalankan selesai. Sevice akan tetap berjalan walaupun komponen yang lain dimatikan
oleh system Android. Umumnya penggunaan service ini adalah untuk melakukan proses
yang tidak memberikan nilai balik ke komponen yang memanggilnya. Contohnya adalah,
mengunduh atau mengunggah berkas.
2. Bound
Service jenis ini merupakan tipe service yang dijalankan oleh komponen lain, namun
saling mengikat. Hubungan yang terjadi antar kedua komponen tersebut seperti client-
server. Bisa saling menerima hasil dan menerima request yang ada. Pada service ini
dimungkinkan terjadi proses IPC (Interprocess Communication).
Service ini akan tetap berjalan di background selama masih ada komponen lain yang
mengikatnya. Jika tidak, maka Service akan dimatikan oleh sistem. Aplikasi pemutar
music merupakan salah satu jenis aplikasi yang mengimplementasikan service jenis ini.
Pada bagian ini kita akan sepenuhnya membahas service berjenis started. Tipe service tersebut
akan dibagi menjadi dua bagian dalam implementasinya:
 Kelas service yang inherit langsung kepada kelas Service
Ketika sebuah kelas java inherit ke service ingin menjalankan proses yang memakan
waktu lama, maka kelas tersebut diharuskan membuat thread terpisah agar tidak
memblok ui thread yang ada. Service ini akan selalu hidup di background selama tidak
ada komponen yang memanggil stopService() atau dimatikan oleh sistem.
 Kelas service yang inherit ke IntentService
Ini adalah kelas yang sangat memudahkan hidup kita. Dia bersifat fire and forget, ketika
ia telah menyelesaikan tugasnya, ia akan mematikan dirinya.

Poin-poin penting lain tentang service diantaranya:


 Setiap kelas Java dinyatakan sebuah service bila kelas tersebut inherit/extends ke kelas
Service atau IntentService .
 Service memiliki life cycle-nya sendiri dan bergantung pada tipe service apa yang
digunakan, started atau bound service.
 Untuk menjalankan service dari komponen lain seperti activity, cukup menggunakan
startService(Intent) .

Sebaliknya untuk mematikan/stop service terdapat dua cara. Pertama stopService(Intent)


dijalankan dari komponen yang memanggil dan stopSelf() dari kelas Service itu sendiri.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Service Sederhana

A. LEARNING OUTCOMES PRAKTIKUM


Mampu menggunakan aplikasi android studio, mampu membuat tampilan service
sederhana.

B. ALAT dan BAHAN


1. Personal Computer dengan tersedianya aplikasi android studio
2. Koneksi Internet

C. Teori Singkat
Kita telah belajar mengenai activity dan implementasinya. Activity dan fragment adalah
dua komponen yang memberikan pengalaman kepada pengguna secara langsung. Pengguna
dapat melihat dan berinteraksi diatasnya. Service berada pada sisi yang lain, komponen ini
tidak memiliki antarmuka dan bahkan pengguna tidak akan akan tahu bagaimana dia
bekerja. Pengalaman yang diberikan oleh service hanya berupa proses yang tidak terlihat.
Ia digunakan untuk menjalankan beragam macam proses yang memakan waktu lama.

Secara umum, terdapat dua bentuk dari service :

1. Started

Service berjenis ini adalah tipe yang dijalankan oleh komponen lain, misal activity. Sekali
dijalankan, service ini akan berjalan selama belum dimatikan atau proses yang dijalankan
selesai. Sevice akan tetap berjalan walaupun komponen yang lain dimatikan oleh system
Android. Umumnya penggunaan service ini adalah untuk melakukan proses yang tidak
memberikan nilai balik ke komponen yang memanggilnya. Contohnya adalah, mengunduh
atau mengunggah berkas.

2. Bound

Service jenis ini merupakan tipe service yang dijalankan oleh komponen lain, namun saling
mengikat. Hubungan yang terjadi antar kedua komponen tersebut seperti client-server. Bisa
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Service Sederhana

saling menerima hasil dan menerima request yang ada. Pada service ini dimungkinkan
terjadi proses IPC (Interprocess Communication).

Service ini akan tetap berjalan di background selama masih ada komponen lain yang
mengikatnya. Jika tidak, maka Service akan dimatikan oleh sistem. Aplikasi pemutar music
merupakan salah satu jenis aplikasi yang mengimplementasikan service jenis ini. Pada
bagian ini kita akan sepenuhnya membahas service berjenis started. Tipe service tersebut
akan dibagi menjadi dua bagian dalam implementasinya:

 Kelas service yang inherit langsung kepada kelas Service Ketika sebuah kelas java
inherit ke service ingin menjalankan proses yang memakan waktu lama, maka kelas
tersebut diharuskan membuat thread terpisah agar tidak memblok ui thread yang
ada. Service ini akan selalu hidup di background selama tidak ada komponen yang
memanggil stopService() atau dimatikan oleh sistem.
 Kelas service yang inherit ke IntentService

Ini adalah kelas yang sangat memudahkan hidup kita. Dia bersifat fire and forget,
ketika ia telah menyelesaikan tugasnya, ia akan mematikan dirinya.

Poin-poin penting lain tentang service diantaranya:

 Setiap kelas Java dinyatakan sebuah service bila kelas tersebut inherit/extends ke
kelas Service atau IntentService .
 Service memiliki life cycle-nya sendiri dan bergantung pada tipe service apa yang
digunakan, started atau bound service.

D. Langkah Kerja

Buat project dengan kriteria sebagai berikut :

Project Name : MyService


Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Service Sederhana

Minimum Level Api : 15

Default Activity : Empty Activity

Activity Name : MainActivity

1. Pada activity_main.xml , silakan kondisikan kode pada berkas tersebut menjadi


seperti berikut :

2. Pada MainActivity.java silakan lengkapi kode-nya menjadi sebagai berikut:


Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Service Sederhana

3. Tampilan yang seharusnya ada pada MainActivity , adalah seperti ini.


Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Service Sederhana

4. Lanjut, buat kelas service bernama OriginService dengan cara klik kanan pada
package project → New → Service → Service. OriginService akan inherit
(extends) kepada kelas Service .
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Service Sederhana

5. Selanjutnya pada dialog yang tampil, isikan nama kelas service yang diinginkan. Di
sini kita menamainya sebagai OriginService dan biarkan exported dan enabled
tercentang. Klik Finish untuk menyelesaikan proses.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Service Sederhana

6. Selanjutnya, buka berkas AndroidManifest.xml pada package manifest dan


perhatikan isi berkas tersebut. Service yang baru saja kita buat sudah ada didalam
tag <application> :
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Service Sederhana

7. Berkas AndroidManifest sudah dibuat secara otomatis. Dengan demikian kita sudah
bisa menjalankan kelas service tersebut. Namun, sebelum menjalankan aplikasi,
lengkapi kode pada OriginService menjadi seperti berikut :
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Service Sederhana

8. Selanjutnya pada MainActivity.java di metode onClick() pada case


R.id.btn_start_service tambahkan baris berikut :

9. Sehingga kode pada metode onClick() menjadi seperti ini :


Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Service Sederhana

10. Sekarang jalankan aplikasi. Klik tombol ‘start service’ dan perhatikan pada log-nya.
OriginService telah dijalankan dan tidak akan pernah mati sampai dimatikan oleh
sistem atau metode stopSelf() atau stopService() dijalankan
11. Baik, sekarang kita akan menambahkan sebuah inner class AsyncTask . Ia seakan-
akan menjalankan sebuah proses secara asynchronous dan
mematikan/menghentikan dirinya sendiri dengan memanggil metode stopSelf() .
Lengkapi kodenya menjadi sebagai berikut:
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Service Sederhana

12. Jalankan aplikasinya. Klik tombol ‘start service’ dan perhatikan log-nya. Service
dijalankan secara asynchronous dan mematikan dirinya sendiri setelah proses
selesai.

13. Jika berhasil dijalankan, pada log androiod monitor akan seperti ini :
09-22 09:52:25.028 10209-10209/com.dicoding.myserviceapp D/OriginService:
OriginService
dijalankan
09-22 09:52:28.074 10209-10209/com.dicoding.myserviceapp D/OriginService:
StopService
09-22 09:52:28.078 10209-10209/com.dicoding.myserviceapp D/OriginService:
onDestroy()

E. Bedah Kode

Service di atas dijalankan dengan cara berikut ini :

Ingat! Bukan startActivity() seperti pada contoh sebelumnya. Namun startService()


karena kita menginginkan sebuah service yang berjalan. Setelah dijalankan, metode
onStartCommand() pada OriginService akan dijalankan.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Service Sederhana

Pada metode tersebut, kita menjalankan sebuah thread asynctask untuk melakukan proses
yang menyerupai proses yang sulit. Dan ia berjalan secara asynchronous. Kekurangan
dari service tipe ini adalah tidak menyediakan worker thread diluar ui thread secara
default. Jadi tidak ada cara lain, selain membuat thread secara sendiri.

START_STICKY menandakan bahwa bila service tersebut dimatikan oleh sistem


Android karena kekurangan memori, maka ia akan diciptakan kembali jika sudah ada
memori yang bisa digunakan. Metode onStartCommand() juga akan dijalankan kembali.

Pada method onPostExecute() akan memanggil stopSelf() yang berarti akan


memberhentikan atau mematikan OriginService dari sistem Android.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent Service

A. LEARNING OUTCOMES PRAKTIKUM


Mampu menggunakan aplikasi android studio, mampu membuat tampilan Intent service.

B. ALAT dan BAHAN


1. Personal Computer dengan tersedianya aplikasi android studio
2. Koneksi Internet

C. Teori Singkat
Kita telah belajar mengenai activity dan implementasinya. Activity dan fragment adalah
dua komponen yang memberikan pengalaman kepada pengguna secara langsung. Pengguna
dapat melihat dan berinteraksi diatasnya. Service berada pada sisi yang lain, komponen ini
tidak memiliki antarmuka dan bahkan pengguna tidak akan akan tahu bagaimana dia
bekerja. Pengalaman yang diberikan oleh service hanya berupa proses yang tidak terlihat.
Ia digunakan untuk menjalankan beragam macam proses yang memakan waktu lama.

D. Langkah Kerja

Pada titik ini, Anda sudah bisa membuat sebuah service yang berjalan di background.

1. Sekarang, buat kembali sebuah service dengan nama DicodingIntentService dengan cara
klik kanan pada package utama project → New → Service → Service (Intent Service).
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent Service

2. Pada dialog yang tampil, masukkan nama nama DicodingIntentService seperti ini :
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent Service

Klik Finish untuk menyelesaikan proses. Pastikan untuk tidak mencentang include helper.
Include helper akan menambahkan metode yang dapat membantu di dalam pembuatan services.
Akan tetapi pada modul ini, kita tidak menggunakan metode tersebut.

3. Setelah kelas DicodingIntentService diciptakan, terdapat banyak kode auto-generated


yang telah disertakan. Kita tidak membutuhkan semua metode tersebut. Sehingga ubah
kelas tersebut menjadi seperti contoh di bawah ini :
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent Service

4. Skenarionya adalah sebagai berikut :


 Kita menjalankan IntentService tersebut dengan sebuah obyek Intent dari MainActivity
dengan membawa data, dalam konteks ini adalah nilai integer yang menentukan berapa
lama background proses dijalankan.
 DicodingIntentService dijalankan, dan kemudian melakukan pemrosesan obyek Intent
yang dikirimkan untuk menjalankan background.
 Seperti sifatnya, IntentService tidak perlu mematikan dirinya sendiri, secara otomatis
ketika proses yang dilakukan selesai, maka, IntentService berhenti dengan sendirinya.

5. Pada DicodingIntentService lengkapi kodenya menjadi seperti berikut :


Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent Service

6. Selanjutnya pada MainActivity.java di metode onClick() pada case


R.id.btn_start_intent_service kita tambahkan 3 baris berikut untuk menjalankan
IntentService yang baru saja dibuat.

Sehingga kode metode onClick() kita menjadi sebagai berikut.


Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent Service

Setelah selesai semua, silakan jalankan kembali aplikasinya dan perhatikan proses yang
terekam pada log aplikasi di Android Studio.
09-22 10:32:25.555 10209-28872/com.dicoding.myserviceapp D/DicodingIntentService:
onHandleIntent()
09-22 10:32:30.557 10209-10209/com.dicoding.myserviceapp D/DicodingIntentService:
onDestroy()

E. Bedah Kode

Kita tinjau kembali skenarionya. Kita menjalankan IntentService tersebut dengan sebuah obyek
intent yang membawa data dari MainActivity . Kita dapat menentukan berapa lama service ini
akan berjalan.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent Service

DicodingIntentService dijalankan. Service tersebut akan melakukan pemrosesan obyek Intent


yang dikirimkan dan menjalankan suatu proses yang berjalan di background.

Kode diatas akan dijalankan pada thread terpisah secara asynchronous. Jadi kita tidak
membutuhkan lagi obyek AsyncTask seperti pada service sebelumnya.
Terakhir, IntentService tidak perlu mematikan dirinya sendiri. Service ini akan berhenti dengan
sendirinya ketika sudah menjalankan tugasnya.
Hingga saat ini, Anda sudah mempelajari teori dasar dari service. Pada modul berikutnya, Anda
akan menerapkan service pada kasus yang lebih nyata.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Broadcast Receiver

A. LEARNING OUTCOMES PRAKTIKUM


Mampu menggunakan aplikasi android studio, mampu menguasai materi broadcast receiver
dan implementasinya.

B. ALAT dan BAHAN


1. Personal Computer dengan tersedianya aplikasi android studio
2. Koneksi Internet

C. Teori Singkat
Ketika mengembangkan sebuah aplikasi di Android, adakalanya kita butuh menjalankan
suatu proses tertentu ketika sebuah proses lain telah terjadi. Misal kita ingin menjalankan
sesuatu ketika device Android sudah selesai booting dengan sempurna. Kemampuan ini
dapat kita manfaatkan untuk memberi pengalaman yang lebih baik.

Disinilah komponen bernama brodcast receiver berperan penting.

Menurut definisinya, broadcast receiver adalah cara sederhana untuk menindaklanjuti


sebuah
broadcast message yang dipancarkan oleh dirinya sendiri, aplikasi lain atau sistem Android.
Sementara itu, broadcast message adalah pesan yang akan dipancarkan melalui obyek
Intent.
Saat ini banyak aplikasi yang menggunakan validasi pengguna dengan mengirimkan kode
verifikasi melalui SMS. Tanpa disadari, ketika SMS tersebut masuk dan ia berasal dari
provider aplikasi, maka akan ada komponen dari aplikasi lain yang akan menindaklanjuti
dan memproses pesan tadi.
Misalnya dengan menkonfirmasi proses validasi tersebut dengan cara menghubungi sebuah
API di server.
Interaksi antara BroadcastReceiver dengan Android System dapat digambarkan dengan
ilustrasi
berikut ini :
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Broadcast Receiver

D. EVALUASI dan PENUGASAN


1. Carilah informasi tentang broadcastReviewer, di ketik di ms.word
2. Carilah contoh broadcastReviewer dalam aplikasi Android.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Broadcast Sederhana

A. LEARNING OUTCOMES PRAKTIKUM


Mampu menggunakan aplikasi android studio, mampu membuat tampilan broadcast
sederhana.

B. ALAT dan BAHAN


1. Personal Computer dengan tersedianya aplikasi android studio
2. Koneksi Internet

C. Teori Singkat
Dua mekanisme umum dalam dalam memanfaatkan komponen broadcast receiver yaitu :
 Implementasi broadcast receiver untuk menerima event yang di-broadcast oleh
sistem Android.
Kali ini kita akan menerima broadcast ketika ada sms yang masuk.
 Implementasi broadcast receiver untuk komunikasi antar aplikasi
D. Langkah Kerja
1. Buat project aplikasi dengan nama SmsListenerApp . Tetap gunakan EmptyActivity.
2. Pada activity_main.xml , ubah komponen TextView menjadi :

3. Kemudian buatlah sebuah Activity baru bernama SmsReceiverActivity . Pada


Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Broadcast Sederhana

activity_sms_receiver.xml sempurnakan kode yang ada menjadi seperti berikut :

Catatan : Jika anda menambahkan activity secara manual maka perlu di


registrasikan terlebih dahulu di dalam manifest. Tambahkan baris kode berikut.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Broadcast Sederhana

4. Lalu buka berkas styles.xml pada direktori resource res → values dan tambahkan
style baru seperti ini :

5. Sehingga kode dari styles.xml secara keseluruhan akan menjadi seperti ini :

Ide nya adalah kita akan menampilkan sebuah activity yang seolah-olah menjadi
sebuah dialog.

6. Langkah selanjutnya adalah dengan menambahkan kode di SmsReceiverActivity


menjadi :
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Broadcast Sederhana

7. Selanjutnya kita akan membuat sebuah kelas Receiver dengan cara klik kanan pada
package project utama → New → Other → BroadcastReceiver.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Broadcast Sederhana

8. Pada dialog yang tampil isikan SmsReceiver dan klik Finish untuk menyelesaikan.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Broadcast Sederhana

9. Setelah tercipta, secara otomatis kelas BroadcastReceiver yang kita buat sudah
teregistrasi di berkas AndroidManifest.xml .
10. Setelah selesai, silakan lengkapi kodenya menjadi sebagai berikut.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Broadcast Sederhana

11. Selanjutnya pada berkas AndroidManifest.xml tambahkan permission diatas tag


seperti ini :
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Broadcast Sederhana

12. Dan tambahkan baris intent-filter di dalam tag yang kita punya seperti dibawah ini:

13. Sehingga berkas AndroidManifest.xml akan menjadi seperti ini :


Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Broadcast Sederhana

14. Selesai sudah bagian pertama dalam memahami broadcast receiver.


15. Silakan jalankan aplikasi Anda. Cobalah mengirim SMS ke device Android Anda dan
perhatikan hasilnya. Setiap SMS yang masuk akan ditampilkan langsung dilayar.

Permission Marshmallow
Bila Anda memiliki peranti Android dengan versi Marshmallow keatas, maka Anda perlu
memberikan permission pada aplikasi untuk mengirimkan SMS. Caranya, buka settings →
Application → MyBroadcastReceiver → Permissions → SMS (diaktifkan)
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Broadcast Sederhana

Emulator
Anda bisa menggunakan fitur dari emulator untuk mengirim sebuah sms. Ikuti cara berikut ini.
1. Masuk ke menu More dari emulator. Klik tanda ... di sebelah kanan emulator anda.
2. Kemudian pilih menu Phone.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Broadcast Sederhana

3. Isikan pesan sms yang diinginkan, kemudian klik Send Message.

Telnet
Anda dapat menggunakan aplikasi telnet untuk mengirim sms ke emulator. Bila anda
menggunakan
OS windows, aplikasi telnet tidak aktif secara default dan perlu diaktifkan melalui program and
features.
1. Untuk dapat mengirim sms ke emulator, telnet harus membuka koneksi ke emulator
menggunakan fungsi open localhost . Port di sini biasanya diisikan angka 5554. Contoh
melakukan koneksi ke emulator sebagai berikut.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Broadcast Sederhana

2. Setelah itu Anda diharuskan untuk memasukkan proses authentication dengan menggunakan
fungsi auth. Kode ini bisa didapatkan pada directory user\NAMA_USER\ dalam berkas
.emulator_console_auth_token. Buka berkas dengan menggunakan editor dan copy paste kode
yang ada di dalamnya. Contoh melakukan authentication ke emulator adalah sebagai berikut.

3. Setelah proses autentikasi selesai, maka kita dapat langsung mengirimkan SMS ke emulator
dengan menggunakan fungsi sms send . Contohnya sebagai berikut.

E. Bedah Kode

Komponen broadcast receiver yaitu SmsReceiver akan bereaksi ketika ada SMS yang masuk.
Hal ini tertuang di dalam AndroidManifest.xml seperti berikut :
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Broadcast Sederhana

<action android:name="android.provider.Telephony.SMS_RECEIVED" /> → ini adalah


flag intentfilter dimana SmsReceiver kita bisa merespon jika ada sms yang masuk dengan
permission yang diberikan.

Di metode onReceive() , receiver akan memproses metadata dari SMS yang masuk. Selanjutnya
ReceiverActivity akan dijalankan dengan membawa data melalui sebuah intent showSmsIntent .
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Broadcast Sederhana

Kita memanfaatkan fasilitas yang terdapat pada kelas SmsManager dan SmsMesssage untuk
melakukan pemrosesan SMS. Untuk memperoleh obyek dari kelas SmsMessage , yaitu obyek
currentMessage , kita menggunakan metode getIncomingMessage() . Metode ini akan
mengembalikan currentMessage berdasarkan OS yang dijalankan oleh perangkat Android. Hal
ini perlu dilakukan karena metode SmsMessage.createFromPdu((object); sudah deprecated di
Marshmallow.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Broadcast Sederhana

Flag pada showSmsIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); akan menjalankan


Activity pada task yang berbeda. Bila Activity tersebut sudah ada di dalam stack, maka ia akan
ditampilkan ke layar. Penjelasan lebih lanjut mengenai konsep ini dapat Anda baca pada tautan
berikut :
 Task and Back Stack (https://developer.android.com/guide/components/activities/tasks-
andback-stack.html )

Setelah obyek intent diterima, ReceiverActivity akan ditampilkan dengan background


transparan. Ini akan membuatnya seolah-olah menjadi sebuah dialog. Dengan cara tersebut,
pesan dapat ditampilkan.

Anda mungkin juga menyukai