BAB 6
92
6.1
Tujuan Pembelajaran
1. Memahami tentang cara penggunaan intent.
2. Memahami cara untuk menghubungkan dua buah activity.
6.2
Dasar Teori
Pada bab ini, akan dibahas mengenai Intent. Intent mungkin merupakan konsep
pengembangan aplikasi android yang paling unik dan paling penting. Disini akan dipelajari
bagaimana cara menggunakan intent untuk mem-broadcast data pada aplikasi, memulai
activity atau service secara eksplisit maupun implisit.
6.2.1
Intent
Intent bekerja menggunakan mekanisme transfer pesan (data) dari activity
satu ke activity lain, dari aplikasi satu ke aplikasi lain.
Pada penggunaan intent secara eksplisit, user menyebutkan sebuah class lain
untuk di load. Secara implisit, user hanya merequest sebuah action yang sudah
built-in untuk dijalankan. Intent juga memiliki fasilitas Broadcast Intent yang
digunakan sebagai sistem yang membroadacast pesan dan menggunakan Broadcast
Receiver untuk menerima pesan yang dikirim secara broadcast.
Menggunakan Intent untuk Memulai activity
Kegunaan yang paling umum dari intent adalah mengikat komponen
aplikasi. Intent digunakan untuk memulai dan transisi antar activity.
Intent secara Eksplisit
Untuk memulai intent secara eksplisit, pilih sebuah activity class dari aplikasi
lalu gunakan Context dari activity saat ini dan Class dari activity yang akan
dijalankan sebagai parameter penggunaan eksplisit intent.
Intent intent = new Intent(Activityku.this, ActivityLain.class);
93 Setelah startActivity dieksekusi, activity baru(dalam contoh ini ActivityLain) akan dibuat, menjadi terlihat dan aktif, bergerak ke bagian teratas
dari activity stack.
Memanggil finish pada activity yang baru dibuat atau menekan tombol back pada device akan menutup activity dan menghapusnya dari stack.
Intent secara Implisit
Implisit intent adalah mekanisme yang membiarkan komponen dari aplikasi anonim
merequest action service. Hal ini berarti aplikasi bisa meminta pada sistem untuk
menjalankan built-in atau action service yang sudah ditanam dalan android tanpa
mengetahui aplikasi mana atau activity mana yang mencetusnya.
Ketika membuat implisit intent, Anda harus menambakan sebuah action built-in
yang akan dijalankan dan secara opsional biasanya juga diikuti oleh URI data untuk
menjalankan action tersebut. Selain URI beberapa action juga membutuhkan data
tambahan untuk menjalankannya.
If(lampuKosMati){
Intent telpPLN = new Intent(Intent.ACTION_DIAL,
Uri.parse(tel:7108573));
startActivity(telpPLN);
}
Android akan membaca intent dan memulai activity yang menyediakan fasilitas dial
ke nomor telepon diatas
Table 4 Beberapa Action Intent yang biasa digunakan
ACTION_ANSWER Menjawab panggilan masuk
ACTION_ATTACH_DATA Mengindikasikan data yang harus dilekatkan pada tempat lain
ACTION_CALL Menempatkan panggilan pada lokasi yang menyediakan
ACTION_DELETE Menghapus data yang ditentukan
ACTION_DIAL Membuka activity pemanggilan dan
94 ACTION_EDIT Melayani akses pengubahan pada data yang
tersedia
ACTION_EMERGENCY_DIAL Memanggil nomor darurat
ACTION_GET_CONTENT Memilih dan mengembalikan data yang ditentukan
ACTION_INSERT Memasukkan ke item yang kosong
ACTION_MAIN Membentuk titik awal activity
ACTION_PICK Memilih item dan mengembalikan pilihan
ACTION_RUN Menjalankan data yang diberikan
ACTION_SEARCH Melakukan pencarian ke sistem
ACTION_SEND Mengirim data tanpa penentuan penerima
ACTION_SENDTO Mengirim data ke penerima yang ditentukan
ACTION_VIEW Menampilkan data kepada user
ACTION_WEB_SEARCH Melakukan pencarian web
Broadcast Intent
Intent yang mengirimkan ke lebih dari satu activity untuk ditangani. Sebagai contoh,
Broadcast Intent akan mengirimkan perubahan waktu activity dapat memproses ini dan bereaksi sesuai waktu yang diberikan atau pengiriman level baterai oleh
Broadcast Intent dapat digunakan untuk menghentikan aplikasi apabila baterai sudah dibawah level tertentu.
Action Broadcast
Intent intent = new Intent(ACTION_TIME_TICK);
sendBroadcast(intent);
Listener
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//TODO: React to the Intent received.
95 Table 5 Beberapa Broadcast Intent yang biasa digunakan
Broadcast Intent Keterangan
ACTION_TIME_TICK Waktu sekarang telah berubah,
mengirim setiap menit.
ACTION_TIME_CHANGED Waktu telah diatur
ACTION_TIMEZONE_CHANGED Zona waktu telah berubah
ACTION_ BOOT_COMPLETED Disiarkan sekali ketika sistem telah menyelesaikan proses booting
ACTION_PACKAGE_ADDED Package aplikasi baru telah diinstal ke device
ACTION_PACKAGE_CHANGED Package aplikasi yang ada telah diubah ACTION_PACKAGE_REMOVED Package aplikasi yang ada telah
dipindahkan
ACTION_PACKAGE_RESTARTED Pengguna memulai kembali package
dan semua proses telah dimatikan
ACTION_PACKAGE_DATA_CLEARED Pengguna telah membersihkan data dari
package
ACTION_UID_REMOVE User ID telah dipindahkan dari sistem
ACTION_BATTERY_CHANGED Penyiaran meliputi keadaan pengisian,
level dan informasi lain mengenai
baterai.
ACTION_POWER_CONNECTED Daya dari luar dihubungkan ke device
ACTION_POWER_DISCONNECTED Daya dari luar dilepas dari device
ACTION_SHUTDOWN Device dimatikan
Objek Intent
Objek intent merupakan sekumpulan informasi berkaitan dengan komponen yang akan
menerima intent termasuk aksi yang akan diambil ditambah informasi berkaitan
dengan sistem Android termasuk kategori dari komponen yang seharusnya menangani
96 Atribut Intent
o Atribut Utama Action
String yang berisi nama dari aksi yang akan dilakukan atau pada Broadcast
Intent merupakan pelaporan dari aksi yang terjadi. Action yang biasa
dilakukan dapat dilihat pada bagian sebelumnya
Data
Setiap action akan memiliki pasangan jenis data yang berbeda-beda yang
dinyatakan sebagai URI. Misalnya, jika action adalah ACTION_EDIT, maka data akan mengandung URI dokumen yang akan ditampilkan untuk
diedit. Jika action adalah ACTION_CALL, maka data akan menjadi tel:
URI dengan nomor untuk panggilan. Demikian pula, jika tindakan tersebut
ACTION_VIEW dan bidang data adalah http: URI, activity menerima perintah untuk men-download dan menampilkan data apa pun mengacu
pada URI.
o Atribut Tambahan Category
Memberikan informasi tambahan mengenai tindakan untuk mengeksekusi.
Sebagai contoh, CATEGORY_LAUNCHER berarti harus muncul dalam
launcher sebagai aplikasi tingkat atas, sementara
CATEGORY_ALTERNATIVE berarti tindakan alternatif user yang dapat dilakukan pada sebuah data, misal: Print Preview adalah sebuah alternatif
dari Regular View.
Extra
Ini adalah Bundle dari setiap informasi tambahan. Extra dapat digunakan
untuk memberikan informasi tambahan ke komponen.
Flag
Pada sistem Android banyak perintah yang dapat mendeskripsikan
97 menjadi milik siapa dan bagaimana penanganan setelah dimuat. Semua
Flag ini didefinisikan pada Class Intent.
Type
Type digunakan untuk menspesifikasikan tipe data/file general pada Intent.
Contoh:
Pada aplikasi untuk mengirim gambar,
myIntent.setType(“image/png”);
Pada aplikasi mengirim email,
myIntent.setType(“message/rfc822”);
Component
Component digunakan sebagai salah satu cara untuk memulai activity
dengan menspesifikasikan ComponentName.
setComponent(ComponentName name);
ComponentName disusun dengan mengikat nama package dan nama class
bersama-sama membentuk sebuah parameter baru yang dapat dimanfaatkan
dalam intent.
Contoh:
Intent intent = new Intent();
intent.setComponent(new ComponentName(
"com.android.myPackage",
"com.android.myPackage.myActivity");
startActivity(intent)
Permission
Pada sebuah aplikasi android, penggunaan fasilitas Intent hampir selalu disertai oleh
penambahan permission pada AndroidManifest.xml karena secara default,
fasilitas-fasilitas telepon, sms, kamera, sensor, beserta hardware dilindungi oleh android. Hal
ini sangat dibutuhkan karena digunakan untuk memberi izin akses fitur-fitur yang
98 Pada eksplisit Intent yang tidak menggunakan action built-in melainkan class yang
didefinisikan sendiri oleh user, harus meregister class yang baru pada
AndroidManifest.xml.
Contoh untuk eksplisit Intent:
<application>
…
<activity
android:name=".ClassBaru"
android:label="@string/app_name" >
<intent-filter>
<category
android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
…
</application>
Untuk implisit Intent dan Broadcast Intent, cukup meregister action yang hendak
digunakan, sebagai contoh pada penggunaan fasilitas melakukan panggilan telepon:
<application>
…
</application>
99
Workshop 7
Intent 1
A.
Tujuan
1. Memahami cara untuk membuat Intent Implisit
B.
Tugas Pendahuluan
1. Pelajari dan buat rangkuman mengenai Intent Android
C.
Percobaan
a.
Percobaan 1: Memantau Baterai dengan BroadcastReceiver
Langkah 1: Buat project Android baru pada Eclipse
Langkah 2: Tambahkan statement berikut pada main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" > <TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:gravity="center_horizontal"
android:text="Battery Information"
android:textSize="30px"
100
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView1"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView1"
android:layout_marginTop="23dp"
android:padding="10dp" />
</RelativeLayout>
Langkah 3 : Lengkapi statement berikut pada class java MainActivity
package com.ai.intent;
public class IntentBatteryActivity extends Activity {
private TextView txtBat;
private BroadcastReceiver mBatInfoRec = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
int level = intent.getIntExtra("level", 0);
101
this.registerReceiver(this.mBatInfoRec, new IntentFilter (Intent.ACTION_BATTERY_CHANGED));
} }
Langkah 4 : Tekan F11 untuk mendebug aplikasi pada emulator Android
Langkah 5 : Maka akan muncul tampilan layout sebagai berikut :
Gambar 36 Tampilan informasi Battery
b.
Percobaan 2: Membuat Intent Pemanggilan Telepon
Langkah 1: Buat project Android baru pada Eclipse
Langkah 2: Tambahkan statement berikut pada main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
102
<TextView
android:id="@+id/label1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#ff0000cc"
android:layout_height="wrap_content"
android:text="Make Phone Call"
android:textStyle="bold" /> </LinearLayout>
Langkah 3: Tambahkan statement berikut pada MainActivity.java
package com.example.intent;
public class Intent1Activity extends Activity {
/** Called when the activity is first created. */ TextView label1;
EditText text1;
Button btnCallActivity2;
@Override
public void onCreate(Bundle savedInstanceState) {
103
btnCallActivity2=
(Button)findViewById(R.id.btnCallActivity2);
btnCallActivity2.setOnClickListener(new ClickHandler()); }
private class ClickHandler implements OnClickListener{
@Override
public void onClick(View v) {
try{
// myActivity2 places a phone call // for ACTION_CALL or ACTION_DIAL
// use 'tel:' formatted data: "tel:555-1234" // for ACTION_VIEW use data:
"http://www.youtube.com"
// (you also need INTERNET permission -see Manifest)
String myData= text1.getText().toString(); Intent myActivity2 = new
Intent(Intent.ACTION_DIAL, Uri.parse(myData)); startActivity(myActivity2); }
catch(Exception e) {
Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_LONG).show();
} }//onClick }//ClickHandler }
Langkah 4: Pada AndroidManifest.xml perhatikan setiap baris kodenya sebagai
berikut :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.intent"
android:versionCode="1"
android:versionName="1.0" >
104
<category
android:name="android.intent.category.LAUNCHER" /> </intent-filter>
</activity> </application> </manifest>
Langkah 5 : Tekan F11 untuk mendebug aplikasi pada emulator Android
Gambar 37 Tampilan Panggilan Telpon
Langkah 6 : Click pada button [Make Phone Call], maka program akan
105 Gambar 38 Tampilan Phone Call
c.
Percobaan 3: Membuat Implisit Intent (lanjut)
Langkah 1: Buat project Android baru pada Eclipse
Langkah 2: Tambahkan statement berikut pada main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent"> <Button
android:layout_height="wrap_content"
android:layout_width="match_parent" android:text="Pesan McDonald"
android:id="@+id/btnMcDonald"> </Button>
<Button
android:layout_height="wrap_content"
106 android:id="@+id/btnKFC">
</Button> <Button
android:text="Belajar Android" android:layout_height="wrap_content"
android:layout_width="match_parent"
android:id="@+id/btnBelajarAndroid"> </Button>
<Button android:text="Jadwal Puasa" android:layout_height="wrap_content"
android:id="@+id/btnJadwalPuasa"
android:layout_width="match_parent"> </Button>
<Button
android:text="Ambil Gambar"
android:layout_height="wrap_content"
android:id="@+id/btnKamera"
android:layout_width="match_parent"> </Button>
</LinearLayout>
Langkah 3: Tambahkan statement berikut pada MainActivity.java
package com.agusharyanto.net.implicit.intent;
public class BelajarImplicitIntentActivity extends Activity {
/** Called when the activity is first created. */ @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btnMcDonald = (Button)findViewById(R.id.btnMcDonald); Button btnKFC = (Button)findViewById(R.id.btnKFC);
Button btnBelajarAndroid =
(Button)findViewById(R.id.btnBelajarAndroid); Button btnJadwalPuasa =
(Button)findViewById(R.id.btnJadwalPuasa);
Button btnKamera = (Button)findViewById(R.id.btnKamera);
btnMcDonald.setOnClickListener(new Button.OnClickListener(){
107
// getRequest(txtResult,txtUrl); CallIntent(v);
} });
btnKFC.setOnClickListener(new Button.OnClickListener(){ public void onClick(View v){
btnKamera.setOnClickListener(new Button.OnClickListener(){ public void onClick(View v){
public void CallIntent(View view) {
Intent intent = null;
switch (view.getId()) {
case R.id.btnKFC:
//akan melakukan Call ke nomor 14022 intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:14022"));
startActivity(intent);
break;
case R.id.btnMcDonald:
//akan melakukan Call ke nomor 14045 intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:14045"));
startActivity(intent);
break;
case R.id.btnBelajarAndroid:
108
intent = new Intent(Intent.ACTION_VIEW, Uri .parse("http://agusharyanto.net")); startActivity(intent);
break;
case R.id.btnJadwalPuasa:
//akan memanggil browser dan menampilkan website http://www.pkpu.or.id/imsyak/
intent = new Intent(Intent.ACTION_VIEW, Uri
.parse("http://www.pkpu.or.id/imsyak/")); startActivity(intent);
break;
case R.id.btnKamera:
//akan memanggil fungsi Camera android intent = new
public void onActivityResult(int requestCode, int resultCode,
Intent data) {
Langkah 4: Pada AndroidManifest.xml tambahkan kode yang dicetak tebal
sebagai berikut :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.agusharyanto.net.implicit.intent"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/icon"
android:label="@string/app_name">
<activity android:name=".BelajarImplicitIntentActivity"
android:label="@string/app_name"> <intent-filter>
109
<category
android:name="android.intent.category.LAUNCHER" /> </intent-filter>
</activity>
</application>
<uses-permission
android:name="android.permission.CALL_PRIVILEGED"></ uses-permission>
<uses-permission
android:name="android.permission.CALL_PHONE"></uses-permission> <uses-permission
android:name="android.permission.INTERNET"></uses-permission> <uses-permission
android:name="android.permission.CAMERA"></uses-permission>
</manifest>
Langkah 5 : Tekan F11 untuk mendebug aplikasi pada emulator Android
Langkah 6 : Maka akan tampil output sebagai berikut :
110 Langkah 7 : Lakukan percobaan button satu per satu :
[Pesan McDonald] [Pesan KFC] [Belajar Android]
[Jadwal Puasa] [Ambil Gambar]