Pertemuan 6

Navigasi Layar &
Sistem Intent 🚀

Aplikasi yang bagus tidak berhenti di satu halaman. Pelajari cara menggunakan "Surat Perintah" Android untuk memindahkan user dari form login ke halaman dashboard sambil membawa data rahasia!

Dua Wajah Intent

Intent adalah pesan asinkron yang mengizinkan aplikasi meminta aksi dari komponen lain. Intent dibagi menjadi dua jalur utama:

Intent Explicit (Internal)

Digunakan untuk melompat antar layar di dalam aplikasi kita sendiri. Kita memanggil nama file Activity-nya secara langsung dan terang-terangan.

Intent i = new Intent(MainActivity.this, ProfilActivity.class);

Intent Implicit (Eksternal)

Digunakan untuk mendelegasikan tugas ke Aplikasi Lain (Buka Web, Telepon, Kamera). Kita tidak tahu nama Activity-nya, kita hanya berteriak minta tolong!

Intent i = new Intent(Intent.ACTION_DIAL, uri);

putExtra()

Selain memindahkan user, Intent punya "bagasi". Kamu bisa menyimpan data di layar 1 (misal: String nama, atau Bitmap Foto), lalu membongkarnya di layar 2 menggunakan getIntent().getStringExtra().

finish() & Flags

Panggil finish() jika ingin menutup layar saat ini secara manual. Gunakan FLAG_ACTIVITY_CLEAR_TOP jika ingin membuang tumpukan Activity di atas layar tujuanmu.

Latihan 1: Login & Buka Web

Halo! 👋

Ini adalah MainActivity.

-- Intent Explicit --

-- Intent Implicit --

Data dari PutExtra:

Halo, Anonymous!

Kamu sekarang berada di ProfilActivity. Kita pindah ke sini menggunakan Intent Explicit.

https://google.com

Aplikasi Browser Eksternal

Android membuka URL ke aplikasi Chrome (Implicit Intent).

Ini adalah struktur kode lengkapnya. Pastikan ID komponen di file XML cocok persis dengan panggilan findViewById di file Java!

<!-- activity_main.xml (Layar Pertama) -->
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="24dp"
    android:gravity="center">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Layar Login"
        android:textSize="24sp"
        android:textStyle="bold"
        android:layout_marginBottom="32dp"/>

    <EditText
        android:id="@+id/inputNama"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Masukkan Nama Kamu"
        android:layout_marginBottom="16dp" />

    <Button
        android:id="@+id/btnPindah"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="BUKA PROFIL (EXPLICIT)"
        android:layout_marginBottom="16dp" />

    <Button
        android:id="@+id/btnBukaWeb"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="BUKA WEB (IMPLICIT)" />

</LinearLayout>

Latihan 2: Peta, Kamera & Layar Catatan

Jejak Petualang App

Buku Catatan

Hari ini aku pergi ke Gedung Sate. Cuacanya sangat cerah dan aku mengambil banyak foto pemandangan di sekitar Lapangan Gasibu...

geo:-6.175,106.827

Gedung Sate

Ayo kita gabungkan Implicit Intent untuk membuka Maps dan Kamera, serta Explicit Intent untuk pindah ke layar CatatanActivity di dalam aplikasi kita sendiri!

<!-- activity_petualang.xml -->
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="24dp"
    android:gravity="center">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Jejak Petualang App"
        android:textSize="24sp"
        android:textStyle="bold"
        android:layout_marginBottom="32dp"/>

    <Button
        android:id="@+id/btnPeta"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="BUKA GOOGLE MAPS"
        android:layout_marginBottom="16dp" />

    <Button
        android:id="@+id/btnKamera"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="AMBIL FOTO (KAMERA)"
        android:layout_marginBottom="16dp" />

    <Button
        android:id="@+id/btnDetail"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="LIHAT CATATAN (EXPLICIT)" />

</LinearLayout>

8. Mini Challenge Terpadu

Mari kita gabungkan semua ilmu hari ini! Buatlah Aplikasi ID Card Generator yang terdiri dari dua halaman!

  1. Layar 1 (`FormActivity`): Buat 3 kolom `EditText` (Nama, Umur, Hobi).
  2. Buat 1 ImageView (sebagai wadah foto) dan 1 Tombol "AMBIL FOTO". Tombol ini akan menembakkan Kamera Implicit menggunakan metode startActivityForResult().
  3. Setelah foto diambil, pasang hasilnya di ImageView dan simpan ke variabel global Bitmap.
  4. Buat 1 Tombol "CETAK ID CARD". Tombol ini akan berpindah ke Layar 2, sekaligus mengirim teks dan Foto Bitmap tadi via putExtra().
  5. Layar 2 (`DetailActivity`): Tangkap teks dan foto tersebut, lalu atur agar desainnya menyerupai Kartu Identitas! Tambahkan 1 Tombol Selesai yang memanggil finish().

Peringatan CRASH: AndroidManifest.xml

Kesalahan #1 Developer Pemula: Membuat class Activity baru di Java, menulis kode Intent dengan benar, klik Run, lalu aplikasinya FORCE CLOSE saat tombol pindah layar dipencet! Kenapa? Karena activity baru tersebut belum didaftarkan sebagai "warga resmi" di AndroidManifest.xml!

<application ... >
    <!-- Ini otomatis terbuat saat project dibikin -->
    <activity android:name=".MainActivity">
        <intent-filter> ... </intent-filter>
    </activity>

    <!-- KAMU WAJIB MENAMBAHKAN BARIS INI MANUAL (Di dalam tag <application>)! -->
    <activity android:name=".ProfilActivity" />
    <activity android:name=".CatatanActivity" />
</application>