Anda di halaman 1dari 64

Aktivitas dan proses

Debug Android
Studio (Part 1)
Sunaryo Winardi, S.Kom., M.TI.

PRODI. TEKNIK INFORMATIKA (S-1)


Pembahasan
• Proses Development Aplikasi
• Aktivitas Android
• Intent Eksplisit
• Siklus Hidup Intent
• onCreate()
• onStart()
• onPause()
• onRestart()
• onResume()
• onStop()
• onDestroy()
Pembahasan
• Intent Implisit
• Membuka Web
• Membuka Kamera
• Berbagi data antar aplikasi
• Debug Aplikasi
• Aplikasi Dalam Mode Debug
• Menjelajahi Fitur Debugger
Proses Development Aplikasi
4 tahapan utama dalam menbangun sebuah aplikasi
Android :
1. Mendefinisikan ide dan kebutuhan
Proses Development Aplikasi
2. Membuat prototipe

Coba : https://app.moqups.com/
Proses Development Aplikasi
3. Mengembangkan dan menguji aplikasi
memerlukan beberapa proses seperti:

Daftarkan Definisikan
Buat Layout Tulis Kode
Aktivitas Versi
Proses development
4. Mempublikasikan aplikasi
Aktivitas Android
• Aktivitas merupakan layar tunggal di aplikasi yang
memiliki antarmuka dan bisa digunakan pengguna
untuk berinteraksi.
• Aplikasi biasanya terdiri atas koleksi aktivitas yang
dibuat sendiri atau yang digunakan kembali dari
aplikasi lain.
• Contoh : koleksi aktivitas aplikasi email adalah satu
aktivitas yang menampilkan daftar email baru,
aktivitas untuk menulis email, dan aktivitas
membaca pesan satu per satu.
Aktivitas Android
• Umumnya, aplikasi memiliki satu aktivitas yang ditetapkan
sebagai aktivitas "utama", yang disajikan kepada pengguna
saat membuka aplikasi untuk pertama kali.
• Aktivitas utama dapat memulai aktivitas lainnya untuk
melakukan tindakan yang berbeda.
• Setiap kali aktivitas baru dimulai, aktivitas sebelumnya akan
dihentikan, namun sistem mempertahankan aktivitas dalam
tumpukan ("back-stack").
• Back-stack mematuhi mekanisme dasar tumpukan “Last In,
Last out”, jadi jika pengguna selesai dengan aktivitas saat ini
dan menekan tombol ”Back”, aktivitas saat ini akan
dikeluarkan dari tumpukan (dan dimusnahkan) dan aktivitas
sebelumnya akan dilanjutkan.
Aktivitas Android
• Aktivitas Android dimulai atau diaktifkan dengan
intent.
• Intent adalah pesan asinkron yang bisa digunakan
dalam aktivitas untuk meminta tindakan dari
aktivitas lain (atau komponen aplikasi lainnya).
• Anda menggunakan intent untuk memulai satu
aktivitas dari aktivitas lainnya dan meneruskan data
di antara aktivitas.
Aktivitas Android
• Ada dua jenis intent:
• Intent eksplisit adalah intent yang targetnya
Anda ketahui. (memanggil aktivitas yang anda
buat sendiri dalam satu projek atau dari projek
lainnya).
• Intent implisit adalah intent yang nama
komponen targetnya tidak Anda
ketahui(memanggil aktivitas yang disediakan
oleh fungsi internal android, seperti kamera,
telepon, membuka browser dll)
Intent Eksplisit
• Pada Intent Eksplisit anda akan membuat dan
membangun aplikasi bernama Messenger yang
berisi dua aktivitas.

Aktivitas Utama Aktivitas kedua Aktivitas Utama


mengirim pesan menerima pesan dan menerima balasan
membalas pesan ke
Aktivitas Utama
Intent Eksplisit
Buat Projek baru dengan Langkah-langkah:
1. Mulai Android Studio dan buat proyek Android
Studio baru. Beri nama aplikasi
“SendMessageActivity“, centang Include Kotlin
support dan Pilih SDK Minimum yang Anda
gunakan di proyek sebelumnya.
2. Pilih Empty Activity untuk template proyek. Klik
Next.
3. Terima nama aktivitas default (MainActivity).
Pastikan kotak Generate Layout file dicentang.
Klik Finish.
Ubah isi activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/isiPesan"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#EEEEEE"
android:layout_margin="10dp"
android:padding="10dp"
android:text="Isi Pesan"/>
</LinearLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/StrMassageSend"
android:layout_width="280dp"
android:layout_height="wrap_content"
android:hint="Ketik Pesan"/>
<Button
android:id="@+id/buttonSend"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/StrMassageSend"
android:layout_toEndOf="@id/StrMassageSend"
android:text="Kirim"
android:onClick="onSendButton"/>
</RelativeLayout>
</LinearLayout>
Atribut onClick
• Android Studio menyediakan pintasan untuk
mempersiapkan tampilan dalam menerima
interaksi dari pengguna (contoh tombol diklik)
• Interaksi dengan tampilan berupa klik mengunakan
atribut android:onClick bersama objek view
tampilan yang bisa diklik di layout XML.
• Sintaks:
android:onClick=“namaMetode"
Atribut onClick
• Pada Versi Kotlin, maka anda perlu menambahkan sebuah
fungsi dengan nama metoda sama seperti nama metode
pada attribute onClick
fun onSendButton(view:View){
//Do something here
}
• Agar dapat digunakan bersama atribut
android:onClick , metode onSendButton() harus
berupa public , tidak mengembalikan nilai (Unit) ,
dan memerlukan parameter objek View agar dapat
mengetahui tampilan mana yang memanggil
metode.
Atribut onClick
Contoh :

var count = 0
fun onSendButton(view:View){
count++;
Log.d("Main Activity","Isi Pesan : " +
"${count}")
}

Jalankan Aplikasi, klik Tombol Kirim, dan perhatikan


hasilnya pada logcat!
Atribut onClick
Mengakses Objek View
• Setiap objek view harus memiliki id
• Contoh:
android:id="@+id/StrMassageSend“
• Fungsi identifier ini adalah untuk membentuk instance dari
objek yang diambil dari layout saat akan digunakan pada
bahasa Kotlin
• Objek Instance dibentuk menggunakan fungsi
findViewById(id) sehingga setiap objek view dapat diakses
dan diubah untuk semua nilai propertinya.
• Atau, pada kotlin anda dapat memanggil langsung id dari
objek tanpa menggunakan findViewById(),
Mengakses Objek View

• Contoh ubah metode onSendButton menjadi:

fun onSendButton(view:View){
//with findViewById
val textView1 = findViewById<TextView>(R.id.StrMassageSend)
Log.d("Main Activity 1","Isi Pesan : " +
"${textView1.text}")
//Kotlin synthetic
Log.d("Main Activity 2","Isi Pesan : " +
"${StrMassageSend.text}")
}

Jalan kan kembali programnya dan lihat hasilnya pada Logcat!


Mengakses Objek View
Penting!!

Objek View Berupa


Edit Text pada layout objek instance
xml, maka objek juga dihubungkan id
dibentuk sebagai Edit
Text

Read More : https://developer.android.com/reference/android/view/View


Deklarasikan aktivitas di manifes
• Semua aktivitas di aplikasi bersifat loose coupling
antara satu sama lain, artinya:
• Setiap aktivitas baru yang ditambahkan ke proyek akan
memiliki layout dan file programnya sendiri (terpisah
dari aktivitas utama).
• Aktivitas baru juga memiliki elemen <activity> sendiri
dalam manifes Android di AndroidManifest.xml
Deklarasikan aktivitas di manifes
AndroidManifest.xml berisikan 2 Elemen Penting yaitu
1. <activity> menyertakan sejumlah atribut untuk
mendefinisikan properti aktivitas seperti label, ikon, atau
tema.
Satu-satunya atribut yang diperlukan adalah android:name,
yang menetapkan nama kelas aktivitas (seperti
"MainActivity").
Deklarasikan aktivitas di manifes
2. <intent-filter> dapat menyertakan setidaknya
satu elemen. Untuk "MainActivity" memerlukan
filter yang mendefinisikan aksi "main" dan
kategori "launcher" agar sistem bisa menjalankan
aplikasi menggunakan aktivitas "MainActivity".
Membuat dan meluncurkan
aktivitas kedua
Buat aktivitas baru dengan langkah-langkah:
1. Klik folder app untuk proyek Anda dan pilih File > New >
Activity > Empty Activity.
2. Namakan aktivitas baru “ReplayActivity." Pastikan
Generate Layout File dicentang, dan nama layout akan
diisi dengan activity_replay.
3. Klik Finish.

Android Studio akan menambahkan layout aktivitas baru


(activity_replay) dan file Java baru (ReplayActivity) ke proyek
Anda untuk aktivitas baru tersebut. Manifes Android Juga
akan diperbaharui untuk menyertakan aktivitas baru.
Membuat dan meluncurkan
aktivitas kedua
• Penambahan aktivitas kedua akan menambahkan Elemen
<activity> pada manifes Android.
• Definisi aktivitas kedua tidak menyertakan <intent-filter>.
• Jika aktivitas ini hanya dalam aplikasi (dan tidak
memungkinkan aktivitas tersebut dimulai oleh aplikasi lain),
maka tidak perlu menambahkan filter.
Membuat dan meluncurkan
aktivitas kedua
• Pada kasus ini, tambahkan atribut ini ke elemen <activity> :

<activity android:name=".ReplayActivity"
android:label ="Replay Massage"
android:parentActivityName =".MainActivity“
>
</activity>

• Atribut label menambahkan judul aktivitas.


• Atribut parentActivityName menandakan bahwa MainActivity
adalah induk dari ReplayActivity. Hubungan aktivitas ini
digunakan untuk navigasi di dalam aplikasi Anda.
Ubah activity_replay.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ff69b4 "
tools:context=".ReplayActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/textMessage"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="11"
android:background="#EEEEEE"
android:layout_margin="10dp"
android:padding="10dp"
android:text="Isi Pesan"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
<EditText
android:id="@+id/StrMassageReplay"
android:layout_width="280dp"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:background="#eeeeee"
android:gravity="center_horizontal"
android:hint="Balas Pesan"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Balas"
android:layout_toRightOf="@id/StrMassageReplay"
android:onClick="onReplayButton"/>
</RelativeLayout>
</LinearLayout>
</android.support.constraint.ConstraintLayout>
Menambahkan intent ke aktivitas utama
• Penambahan intent eksplisit ke dalam aktivitas utama (Misalkan saat
tombol kirim diklik) dilakukan untuk memulai aktivitas tertentu dari
aktivitas lain.
• Untuk menjalankan intent eksplisit ini digunakan sebuah metode
startActivity().
• Sintax:

var intentReplay = Intent(this,ReplayActivity::class.java)


startActivity(intentReplay)

• Konstruktor Intent menggunakan dua argumen.


• Konteks dalam contoh ini, argument pertama merupakan kelas aktivitas
menyediakan/pembuat aktivitas(this).
• Argument kedua adalah aktivitas yang akan dimulai
(ReplayActivity::class.java).
Menambahkan intent ke aktivitas
utama
• Metode startActivity()akan menjalankan aktivitas baru pada
layar dan aktivitas pembuatnya dihentikan sementara.
• Aktivitas baru yang dimulai tetap pada layar hingga
pengguna mengetuk tombol kembali pada perangkat
• Pada saat aktivitas baru ditutup dan diklaim kembali oleh
aktivitas lama yang memanggil aktifitas baru tersebut.
• Anda juga bisa menutup aktivitas yang dimulai secara
manual sebagai respons terhadap aksi pengguna (seperti
klik tombol) dengan metode finish()
Menambahkan intent ke aktivitas
utama
• Contoh :
• Ganti metode onSendButton pada MainActivity.kt menjadi

fun onSendButton(view:View){
var intent = Intent(this,ReplayActivity::class.java)
startActivity(intent)
}
Menambahkan intent ke aktivitas
utama
• Contoh :
• Tambahkan metode pada ReplayActivity.kt:
• fun closeActivity(view:View) {
finish();
}

• Ubah attribut pada Button di activity_replay.xml


• android:onClick="onReplayButton"/>
• Menjadi
• android:onClick="closeActivity"/>
Jalankan Programnya dan lihat hasilnya!
Menambahkan intent ke aktivitas
utama

Klik Kirim akan Klik Balas / ketuk _____________


membuka aktifitas tombol back, aktifitas
replay utama akan
kembali dimunculkan
Mengirim Informasi Antar Aktifitas
• Selain untuk memulai satu aktivitas dari aktivitas lain, Anda
juga menggunakan dapat meneruskan informasi di antara
aktivitas.
• Objek yang Anda gunakan untuk memulai aktivitas (intent)
bisa menyertakan data atau ekstra, yang merupakan data
tambahan yang mungkin diperlukan aktivitas lain.
• Ada sejumlah perbedaan utama antara data dan ekstra
yang menentukan mana yang harus Anda gunakan.
Mengirim Informasi Antar Aktifitas

• Data hanya dapat menyimpan satu bagian informasi.


• Data menggunakan URI yang menyatakan lokasi data yang
ingin Anda gunakan.
• URI tersebut bisa berupa URL laman web (http://), nomor
telepon (tel://), lokasi geografis (geo://), atau URI khusus
lainnya yang Anda definisikan.
• Gunakan data jika:
1. Anda hanya memiliki satu bagian informasi yang perlu
dikirim ke aktivitas yang telah dimulai.
2. Informasi itu adalah lokasi data yang bisa dinyatakan
dengan URI.
Mengirim Informasi Antar Aktifitas
• Ekstra digunakan untuk data yang dapat berubah-rubah yang ingin Anda
teruskan ke aktivitas yang telah dimulai.
• Ekstra disimpan di objek Bundle sebagai pasangan kunci dan nilai.
• Bundle, sama seperti objek map yang telah dioptimalkan untuk Android,
dengan nilai-nilainya bisa berupa tipe objek atau primitif apa pun.
• Gunakan ekstra ketika:
1. Jika Anda ingin meneruskan lebih dari satu bagian informasi ke aktivitas
yang telah dimulai.
2. Jika informasi yang ingin Anda teruskan tidak bisa dinyatakan melalui
URI.
Mengirim Data
• Untuk mengirim data dari aktivitas pembuatnya ke aktivitas
baru, dilakukan dengan membentuk Intent
Contoh
var intentReplay = Intent(this,ReplayActivity::class.java)

• Pengiriman data akan menggunakan metode setData()


bersama objek Uri.
Contoh:
intentReplay.setData(Uri.parse("http://www.google.com"))
intentReplay.setData(Uri.fromFile(File("/sdcard/sample.jpg")))
intentReplay.setData(Uri.parse("content://mysample.provider/data"))
Mengirim Data
Untuk Custom URI, dapat digunakan dengan cara:
intentReplay.setData(Uri.parse("custom://post_detail?post_id=10"))

• Perlu diingat bahwa bidang data hanya bisa berisi URI


tunggal; jika Anda memanggil setData() beberapa kali,
hanya nilai terakhir yang akan digunakan.

• Setelah menambahkan data, Anda bisa memulai aktivitas


dengan maksud seperti biasanya.
• startActivity(intentReplay);
Mengambil Data
• Untuk mengambil data yang dikirimkan aktivitas
pembuatnya, gunakan metode getData()
• getData() mendapatkan data dalam bentuk URI yang
dikirimkan melalui setData() yang disimpan pada objek Uri
Contoh :

val intentData = intent.getData()


Contoh:
• Ganti metode onSendButton pada MainActivity.kt menjadi

fun onSendButton(view:View){
var intentReplay = Intent(this,ReplayActivity::class.java)
intentReplay.setData(Uri.parse("http://www.google.com"))
startActivity(intentReplay)
}
Ubah metode onCreate pada ReplayActivity.kt
menjadi:

override fun onCreate(savedInstanceState: Bundle?) {


super.onCreate(savedInstanceState)
setContentView(R.layout.activity_replay)
val intentData = intent.getData()
textMessage.text = intentData.toString()
}

Jalankan Programnya dan lihat hasilnya!


Mengirim Ekstra
• Kelas Intent menyertakan sejumlah kunci ekstra yang bisa
digunakan untuk mendefinisikan konstanta yang dimulai dengan
kata EXTRA_.
• Anda juga bisa mendefinisikan kunci ekstra sendiri dengan
variabel-variabel statis yang dimulai kata EXTRA_ untuk menjamin
kunci tersebut unik.
• Nilai string kunci itu sendiri harus diawali dengan nama kelas yang
benar-benar memenuhi syarat aplikasi.
• Misalnya:

const val EXTRA_MSG = "com.example.kotlinsw.sendmessageactivity.MSG"


const val EXTRA_X = "com.example.kotlinsw.sendmessageactivity.X"
const val EXTRA_Y = "com.example.kotlinsw.sendmessageactivity.Y"
Mengirim Ekstra
• Gunakan metode putExtra() bersama kunci untuk
memasukkan data ke dalam ekstra.
• Kelas Intent dapat mendefinisikan sendiri untuk jenis data
yang akan dikirim:
intentReplay.putExtra(EXTRA_MSG, "this is my message");
intentReplay.putExtra(EXTRA_X, 100);
intentReplay.putExtra(EXTRA_Y, 500);
Mengambil Ekstra
• Untuk mendapatkan ekstra, Anda perlu mengetahui kunci
untuk pasangan kunci/nilai.
• Anda bisa menggunakan Intent standar untuk didefinisikan
kunci yang di aktivitas pembuatnya.

val data = intent;

• Metode getExtra() digunakan untuk mengekstrak data


ekstra dari objek.

val message = data.getStringExtra(ReplayActivity.EXTRA_MSG);


val X = data.getIntExtra(EXTRA_X,0);
val Y = data.getIntExtra(EXTRA_Y,0);
Contoh : Buat kelas baru dengan nama
constanta
• Pada paket aplikasi anda, klik kanan>>New>> Kotlin
File/Class
Contoh : Buat kelas baru dengan nama
constanta
• Berikan nama file constanta dan klik ok

• Isikan file dengan :


const val EXTRA_MESSAGE ="com.example.kotlinsw.sendmessageactivity.MESSAGE"
Contoh : pada kelas MainActivity.kt ubah
metode onSendButton() menjadi

fun onSendButton(view:View){
var intentReplay = Intent(this,ReplayActivity::class.java)
intentReplay.putExtra(EXTRA_MESSAGE,
StrMassageSend.text.toString())
startActivity(intentReplay)
}
Contoh : pada kelas ReplayActivity.kt ubah
metode onCreate menjadi :

override fun onCreate(savedInstanceState: Bundle?) {


super.onCreate(savedInstanceState)
setContentView(R.layout.activity_replay)
val data = intent
textMessage.text = data.getStringExtra(EXTRA_MESSAGE)
}
Mengembalikan Data dari
Aktivitas
• Ketika anda mengharapkan adanya pengiriman data
kembali dari aktifitas baru yang anda panggil, maka
anda harus memulai aktifitas dengan
startActivityForResult()
• startActivityForResult() memiliki 2 parameter, yaitu
1. intent :intent baru yang akan dibuka/dimulai
2. requestCode : kode unik untuk memastikan data
dikirim kembali sesuai dengan pemanggil intent
Mengembalikan Data dari
Aktivitas
• Proses berikutnya, sama seperti sebelumnya, anda
membentuk data Extra, dan mengirimkan data ke
pemanggil melalui setResult()
• setResult() memiliki 2 parameter, yaitu
1. resultCode : biasanya berisikan antara RESULT_OK
atau RESULT_CANCEL
2. Intent : data extra yang dikirimkan melalui intent dari
fungsi putExtra()
Mengembalikan Data dari
Aktivitas
• Untuk mendapatkan data dari aktifitas baru, maka
anda harus mengoverride onActivityResult()
• onActivityResult() memiliki 3 parameter, yaitu:
1. reqestCode: kode unik untuk memastikan data dikirim
kembali sesuai dengan pemanggil intent
2. resultCode: biasanya berisikan antara RESULT_OK atau
RESULT_CANCEL
3. data : merupakan data extra yang diterima dari
Aktifitas baru
Contoh : pada file layout activity_replay.xlm ubah
atribut android:clickOn pada button yang
sebelumya adalah closeActivity menjadi:

android:onClick="onReplayButton
Contoh : pada kelas java constanta.kt
tambahkan :

const val EXTRA_MESSAGE ="com.example.kotlinsw.sendmessageactivity.MESSAGE"


const val EXTRA_REPLAY ="com.example.kotlinsw.sendmessageactivity.REPLAY"
const val REQUEST_REPLAY_CODE =123
Contoh : pada kelas java MainActivity.kt
ubah startActivity() menjadi:

startActivityForResult(intentReplay, REQUEST_REPLAY_CODE)

Catatan:
• Jika intent tidak perlu mengembalikan respon, maka gunakan
startActivity
• Jika intent perlu memgembalikan respon, maka gunakan
startActivityForResult;
Contoh : pada kelas java ReplayActivity.kt
ubah onReplayButton() menjadi:

fun onReplayButton(view: View){


val replayData = Intent()
replayData.putExtra(EXTRA_REPLAY,
StrMassageReplay.text.toString())
setResult(RESULT_OK, replayData)
finish()
}
Contoh : pada kelas java MainActivity.java

• Untuk mendapatkan respon dari pengunaan


startActivityForResult, maka didalam aktivitas pembuat
intent, diwajibkan untuk meng-override sebuah metode
onActivityResult
• Ketikan onActivityResult, dan klik dua kali pada override
fun onActivityResult(…) untuk melakukan proses Override

1. Ketikan

2. Klik 2x
Contoh : isikan onActivityResult dengan:

override fun onActivityResult(requestCode: Int,


resultCode: Int,
data: Intent?) {
if(requestCode == REQUEST_REPLAY_CODE &&
resultCode == Activity.RESULT_OK &&
data != null){
if(data.hasExtra(EXTRA_REPLAY)){
isiPesan.text = data.getStringExtra(EXTRA_REPLAY)
}
}
}

Jalankan Programnya dan lihat hasilnya!


Siklus Hidup Aktivitas dan Status
Instance
• Daur hidup aktivitas adalah serangkaian keadaan
aktivitas yang terjadi dari pertama kali dibuat
hingga ketika dimusnahkan.
Siklus Hidup Aktivitas dan Status
Instance
• Saat pengguna menelusuri aktivitas dalam aplikasi,
masing-masing aktivitas tersebut bertransisi di
antara status satu ke satus yang lainnya.
• Setiap tahap dalam siklus hidup aktivitas memiliki
metode callback yang cocok (onCreate(), onStart(),
onPause(), dan lainnya).
• Saat sebuah aktivitas mengubah status, metode
callback terkait akan dipanggil/dijalankan.
Siklus Hidup Aktivitas dan Status
Instance
Siklus Hidup Aktivitas dan Status
Instance
• Dengan mengganti metode callback siklus hidup
dalam kelas aktivitas, Anda bisa mengubah perilaku
default bagaimana aktivitas berperilaku untuk
merespons pengguna dengan memberikan
tindakan sistem yang berbeda.

Anda mungkin juga menyukai