CODELAB
CODELAB
Codelab ini menitikberatkan pada implementasi intent untuk melakukan perpindahan dari activity ke activity lain, dengan atau tidak membawa data. Beberapa bagian dari codelab ini akan menjawab beberapa pertanyaan umum dalam pengembangan aplikasi Android sebagai berikut:
- Bagaimana berpindah dari satu activity ke activity lain?
- Bagaimana berpindah dari satu activity ke activity lain dengan membawa data?
- Menjalankan komponen di aplikasi lain untuk keperluan membuka browser atau melakukan pemanggilan melalui aplikasi telepon bawaan?
Codelab selanjutnya adalah dengan membuat aplikasi yang dapat menerapakan kegunaan intent. Seperti ini tampilannya.

Logika Dasar
Berpindah dari satu Activity ke Activity lain dengan membawa data. Activity asal akan mengirimkan data melalui Intent dan Activity tujuan akan menerima data yang dikirimkan.
Codelab Intent Sederhana
- Buat Project baru di Android Studio dengan kriteria sebagai berikut:
Nama Project MyIntentApp Target & Minimum Target SDK Phone and Tablet, Api level 21 Tipe Activity Empty Activity Activity Name MainActivity Use AndroidX artifacts True Language Java / Kotlin - Selanjutnya kita akan membangun antarmuka (interface) seperti ini:

- Kondisikan activity_main.xml menjadi seperti ini :
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:padding="16dp">
- <Button
- android:id="@+id/btn_move_activity"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="16dp"
- android:text="@string/move_activity" />
- </LinearLayout>
- Tambahkan juga resource string-nya. Tambahkan semua string yang akan digunakan di project ini. Buka berkas strings.xml yang ada di folder res/value dan tambahkan kode berikut ini.
- <resources>
- <string name="app_name">MyIntentApp</string>
- <string name="move_activity">Pindah Activity</string>
- <string name="move_with_data">Pindah Activity dengan Data</string>
- <string name="dial_number">Dial a Number</string>
- <string name="data_received">Data Diterima</string>
- <string name="this_is_moveactivity">Ini MoveActivity</string>
- </resources>
- Kemudian masuk ke MainActivity, tambahkan beberapa baris kode yang berfungsi untuk meperkenalkan button yang sudah ditambahkan di layout seperti ini:
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- Button btnMoveActivity = findViewById(R.id.btn_move_activity);
- }
- Lalu tambahkan beberapa baris yang berfungsi untuk menambahkan event onClick pada button btnMoveActivity seperti ini.
- public class MainActivity extends AppCompatActivity implements View.OnClickListener {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- Button btnMoveActivity = findViewById(R.id.btn_move_activity);
- btnMoveActivity.setOnClickListener(this);
- }
- @Override
- public void onClick(View v) {
- if (v.getId() == R.id.btn_move_activity) {
- }
- }
- }
- Button btnMoveActivity akan memiliki fungsi untuk berpindah Activity ke Activity lain. Sekarang kita buat Activity baru dengan cara sebagai berikut: Klik kanan di package utama aplikasi package name → New → Activity → Empty Activity.
Lalu isikan MoveActivity pada dialog. Ketika sudah klik Finish. Jangan lupa untuk memastikan bahasa yang digunakan sudah sesuai dengan yang anda gunakan sebelumnya. - Untuk menandakan bahwa perpindahan activity berhasil, silakan tambahkan satu TextView dan kondisikan activity_move.xml menjadi seperti berikut.
- <?xml version="1.0" encoding="utf-8"?>
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:padding="16dp">
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="@string/this_is_moveactivity" />
- </RelativeLayout>
- Setelah Activity tujuan sudah berhasil diciptakan, sekarang saatnya menambahkan suatu Intent pada method onClick() di MainActivity.java menjadi sebagai berikut.
- @Override
- public void onClick(View v) {
- if (v.getId() == R.id.btn_move_activity) {
- Intent moveIntent = new Intent(MainActivity.this, MoveActivity.class);
- startActivity(moveIntent);
- }
- }
- Selesai! Langkah pertama untuk memindahkan satu Activity ke Activity lain sudah selesai, sekarang silakan jalankan aplikasi Anda dengan mengklik tombol pada menu bar. Seharusnya sekarang anda sudah bisa memindahkan Activity dengan mengklik tombol ‘Pindah Activity’.

Bedah Kode
Register Activity
Kita telah belajar bagaimana membuat suatu activity baru. Di materi sebelumnya, syarat suatu activity haruslah terdaftar pada berkas AndroidManifest.xml. Karena menggunakan Android Studio, proses pendaftaran tersebut sudah dilakukan secara otomatis ketika membuat Activity baru.
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.dicoding.picodiploma.myintentapp">
- <application
- android:allowBackup="true"
- android:icon="@mipmap/ic_launcher"
- android:label="@string/app_name"
- android:supportsRtl="true"
- android:theme="@style/AppTheme">
- <activity android:name=".MainActivity">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <activity android:name=".MoveActivity" />
- </application>
- </manifest>
Perhatikan bahwa MoveActivity sudah teregistrasi di AndroidManifest.xml. Sekarang sudah aman jika kita melakukan perpindahan activity dari MainActivity ke MoveActivity.
Jika kita lupa meregistrasikan Activity baru ke dalam berkas AndroidManifest.xml, maka akan terjadi eror seperti ini "android.content.ActivityNotFoundException:Unable to find explicit activity class."
Intent Filter
Berikutnya, perhatikan pada kode dengan tag intent-filter yang ada di dalam AndroidManifest pada bagian MainActivity.
- <activity android:name=".MainActivity">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
Intent-filter merupakan mekanisme untuk menentukan bagaimana suatu activity dijalankan oleh Android Runtime (ART) atau Dalvik Virtual Machine (DVM).
- <action android:name="android.intent.action.MAIN" />
Baris di atas bermakna bahwa MainActivity menjadi entry point ke aplikasi.
- <category android:name="android.intent.category.LAUNCHER" />
Kode di atas menandakan bahwa MainActivity akan dikategorikan sebagai activity launcher. Ini menandakan bahwa activity ini akan muncul di halaman home screen dalam bentuk launcher.
Pindah Activity
Selanjutnya, perhatikan kode berikut.
- Intent moveIntent = new Intent(MainActivity.this, MoveActivity.class);
- startActivity(moveIntent);
Kita membuat suatu obyek intent dengan cara seperti di atas dengan memberikan context (this@MainActivity) dan kelas activity tujuan (MoveActivity::class.java) pada konstruktor kelas intent.
Untuk context dapat menggunakan this yang menandakan obyek kelas saat ini. Sedangkan kelas tujuan selalu diakhiri dengan menggunakan class.
Jika kita menggunakan code assistant (tekan ctrl + spasi) dari Android Studio, maka akan tampil rekomendasi (code hint) sebagai berikut:
Pada konteks di atas kita memilih packageContext: Context , cls: Class<*> sebagai inputan untuk nilai constructor intent.
Context adalah sebuah kelas yang digunakan untuk mengakses resource dari activity tersebut. anda akan sering membutuhkan context pada latihan-latihan selanjutnya, seperti saat mengambil data dari resource, mengakses SystemService, mendapatkan ApplicationInfo dan lain sebagainya.
Untuk lebih jelasnya anda bisa membaca artikel berikut:
- Intent moveIntent = new Intent(MainActivity.this, MoveActivity.class);
- startActivity(moveIntent);
startActivity(moveIntent) metode ini akan menjalankan activity baru tanpa membawa data. Obyek intent yang diinputkan adalah obyek moveIntent yang ketika kode ini dijalankan maka akan membuka MoveActivity.
Pada modul ini kita telah berhasil memindahkan satu Activity ke Activity lain dengan tidak membawa data. Pada bagian selanjutnya kita akan membuat suatu Intent yang di dalamnya akan membawa data ke Activity tujuan.
