Tutorial Android Explicit Intent

Jumpa lagi dengan Agus Haryanto dalam seri tutorial android. Pada tutorial sebelumnya, kita telah belajar tentang Implicit Intent, Kali ini kita akan perdalam untuk Explicit Intent yang akan memanggil satu activity ke activity lainnya yang masih dalam satu project.

Oke kita mulai saja buka eclipse, lalu ikuti langkah-langkah berikut ini.

1. Buat Project Baru, isikan fieldnya seperti dibawah ini

Pada saat project pertama kali dibuat ada 3 file penting yang langsung dibuat, yaitu

  • main.xml
  • string.xml
  • BelajarExplicitIntentActivity.java

2. Kita siapkan layout untuk Activity pertama kita, edit main.xml lalu isikan dengan kode berikut

<?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"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Main Activity"
    />
<TextView android:text="Activity 1" android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<EditText android:layout_height="wrap_content" android:id="@+id/editText1" android:layout_width="match_parent">
    <requestFocus></requestFocus>
</EditText>
<TextView android:text="Dari Activity 2" android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<EditText android:layout_height="wrap_content" android:id="@+id/editTextdr2" android:layout_width="match_parent"></EditText>
<Button android:text="Call Second Activity" android:id="@+id/btnOpen" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
</LinearLayout>

3. Siapkan juga layout activity ke dua, buat file xml baru lalu simpan dengan nama main2.xml lalui isikan dengan kode berikut

<?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"
    >
<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Second Activity"
    />
<TextView android:text="Dari Activity 1" android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<EditText android:layout_height="wrap_content" android:id="@+id/editTextdr1" android:layout_width="match_parent">
</EditText>
<TextView android:text="Activity 2" android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<EditText android:layout_height="wrap_content" android:id="@+id/editText2" android:layout_width="match_parent"></EditText>
<Button android:text="Close Second Activity" android:id="@+id/btnClose" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
</LinearLayout>

4. Sekarang masuk ke file javanya, edit File BelajarExplicitIntentActivity.java lalu isikan kode berikut

package com.agus.explicit.intent;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class BelajarExplicitIntentActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button btnOpen = (Button) findViewById(R.id.btnOpen);
        //set OnClickListener event to btnOpen
        btnOpen.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
            	callIntent();
            }
        });
    }

    //method for call SecondActivity
    public void callIntent(){
    	Intent i = new Intent(this, SecondActivity.class);
		startActivity(i);
    }
}

Perhatika kode

Intent i = new Intent(this, SecondActivity.class);
startActivity(i);

Kode inilah yang digunakan untuk memanggil class SecondActivity

5. Kita buat file java baru untuk Activity Kedua, simpan dengan nama SecondActivity.java lalu isikan dengan kode berikut

package com.agus.explicit.intent;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class SecondActivity extends Activity {
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main2);

		Button btnOpen = (Button) findViewById(R.id.btnClose);
		btnOpen.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				finish(); //close activity
			}
		});
	}
}

6. Jangan lupa daftarkan Activity (SecodActivity.java) yang kita buat tadi pada Androidmanifest.xml.
Tambahkan kode

<activity android:label="SeconActivity" android:name=".SecondActivity"></activity>
    </application>

Sehingga isi AndroidManifes.xmlmenjadi seperti ini

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.agus.explicit.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=".BelajarExplicitIntentActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
	<activity android:label="SeconActivity" android:name=".SecondActivity"></activity>
    </application>
</manifest>

7. Sekarang mari kita jalankan programnya


Klik button Call Second Activity

Klik tombol Close Second Activity akan Menutup SecondActivity dan menampilkan Activity sebelumnya

8. Kita juga bisa mengirimkan data ke Activity yang dipanggil. Untuk mengirimkan data gunakan peritnha putExtra, untuk itu pada class BelajarExplicitIntentActivity.java, pada method callIntent rubah menjadi seperti ini.

public void callIntent(){
    	Intent i = new Intent(this, SecondActivity.class);
    	EditText text1 = (EditText) findViewById(R.id.editTextdr1);
		String dataactivity_1 = text1.getText().toString();
    	//untuk mengirim data gunakan putExtra
    	i.putExtra("value1", dataactivity_1 );
		startActivity(i);
    }

9. Untuk membaca data yang dikirim dari Activity yang memanggil, pada class SecondActivity.java dalam method onCreate sesudah “setContentView(R.layout.main);” tambah kode ini

		Bundle extras = getIntent().getExtras();
		if (extras == null) {
			return;
		}
		String value1 = extras.getString("value1");

		if (value1 != null ) {
			EditText text1 = (EditText) findViewById(R.id.editText1);
			text1.setText(value1);
		}

10. sekarang mari kita run kembali

Isi Inputan Activity 1 dengan “mau makan apa ?”, lalu klik button Call Second Activity

Secara ototmatis Inputan Dari Activity 1 akan terisi sesuai dengan isian yang kita inputkan pada Activity Pemanggil.
Isi inputan Activity 2 dengan “nasi dengan ayam”, lalu klik tombol Close Second Activity

Jawaban dari Second Activity tidak terbaca oleh Activity Pemanggilnya.

11. Untuk membaca data yang dikirim dari SecondActivity pada saat Activity tersebut ditutup. Maka kita perlu menambahkan kode pada class BelajarExplicitIntentActivity.java berikut kode lengkapnya.

package com.agus.explicit.intent;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class BelajarExplicitIntentActivity extends Activity {
	private static final int REQUEST_CODE = 1;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button btnOpen = (Button) findViewById(R.id.btnOpen);
        //set OnClickListener event to btnOpen
        btnOpen.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
            	callIntent();
            }
        });
    }

    //method for call SecondActivity
    public void callIntent(){
    	Intent i = new Intent(this, SecondActivity.class);
    	EditText text1 = (EditText) findViewById(R.id.editText1);
		String dataactivity_1 = text1.getText().toString();
    	//untuk mengirim data gunakan putExtra
    	i.putExtra("value1", dataactivity_1 );
		startActivityForResult(i, REQUEST_CODE);
    }

    @Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) {
			if (data.hasExtra("return_value1")) {
				EditText text2 = (EditText) findViewById(R.id.editTextdr2);
				text2.setText(data.getExtras().getString("return_value1"));
			}
		}
	}
}

Perhatikan code startActivityForResult(i, REQUEST_CODE);
Agar Activity pemanggil dapat menangkap data yang dikirimkan oleh activity yang dipanggil, maka kita harus menggunakan perintah startActivityForResult dan kita harus mengoveride method onActivityResult

12. Pada Class SecondActivity.java rubah isinya menjadi seperti ini.

package com.agus.explicit.intent;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class SecondActivity extends Activity {
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main2);
		Bundle extras = getIntent().getExtras();
		if (extras == null) {
			return;
		}
		String value1 = extras.getString("value1");

		if (value1 != null ) {
			EditText text1 = (EditText) findViewById(R.id.editTextdr1);
			text1.setText(value1);
		}

		Button btnOpen = (Button) findViewById(R.id.btnClose);
		btnOpen.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				finish(); //close activity
			}
		});
	}

	@Override
	public void finish() {
		Intent data = new Intent();
		EditText text2 = (EditText) findViewById(R.id.editText2);
		String dataactivity_2 = text2.getText().toString();
		data.putExtra("return_value1", dataactivity_2);
		setResult(RESULT_OK, data);
		super.finish();
	}
}

Agar dapat mengirim data ke activity pemanggil pada saat activity ini diclose maka kita perlu mengoverride method finish

13. Sekarang mari kita jalankan programnya, lakukan langkah-langkah seperti pada point 10.
Sekarang pada saat kta klik tombol Close Second Activity maka tampilannya adalah

14. Kita telah berhasil membaca data yang dikirimkan oleh Second Activity, agar lebih memahami cobalah praktekan konsep Explicit Intent ini pada aplikasi yang kita buat.

Kita sudah belajar tentang Explicit Intent, ada tugas nih buatlah aplikasi yang Activity pertamanya berisi List nama buah yang pabila diklik akan memanggil Activity ke 2 yang akan menampilkan gambar buahnya.

Semoga bermanfaat

Salam Hangat

Agus Haryanto

Sumber:

http://developer.android.com

17 comments to Tutorial Android Explicit Intent

  • toni

    bagus tutorialnya pak. terima kasih.

  • amry

    bang, kalo bisa file2 yg bisa di donlot biar bisa di praktekin

    makasih

  • ida

    bang… kalo passing image gimana? seperti tugasnya…

  • Bang, script main.xml dan main2.xml kok sama ya????

  • crzFreak

    makasih buat tutornya yang bermanfaat..

  • veny

    cara buat main2.xml nya gemna ya? pas d coba buat main2.xml kenapa graphical layout nya gak ada ya?
    saya ingin membuat jika menekan suatu button akan masuk ke form lain.

  • cara alternativ nih, dibandingkan dengan preference 😀

  • tutorial ini mantap pak…. ! 😀 rencana sy pengen gabung ama satu activity yg berjalan dibelakang layar (Visible mirip aplikasi virus yg ada pada komputer) sy coba coding gini pak nama_activity.setVisible(7); hasilnya error… mohon solusinya mas… ? sy rencana buat sms terjadwal yg berjalan dbelakang layar untuk tugas akhir.

  • Chand

    Terimakaih mas..
    Pertanyaan saya selama ini terjawab,hehe

  • mangala

    Sy ingin membuat sms autoreply, dimana aplikasi akan merespon sms masuk lalu membaca database sesuai permintaan dan mengirim informasi kepada pengirim secara otomatis. Kira2 gambaran Cara kerja aplikasinya seperti gmn mas.
    Mohon pencerahannya, wassalam…

  • dwi

    maaf mungkin berbeda topik..
    cara membuat tombol call sebagai widget sih bagaimana yah?
    nomornya diambil dari contac yang telah dipilih….
    makasih..
    ni baru belajar android..

  • pa, saya mau tanya. gimana caranya manggil class secara acak?
    misalnya saat saya clik button soal, maka class yang dipanggil bisa class matematika, bisa class inggris, dll ?
    terimakasih

  • krisnha

    pak..nice share..
    pak.. ada gak cara agar aplikasi di android dapat mengirim data ke database(dikomputer) tanpa hosting..
    terima kasih

  • rangga

    bang, gmn carany kita mengirim ke arduino dan dpt umpan balik melalui tulisan yg masuk k aplikasiny?
    mohon djawab

  • ifan

    bang mau nanya nih bisa ga mengabungkan dua intent ?

  • embeks

    bagus bangeettt…. nambah pengetahuan saya gan ^_^
    tapii… tugasnya itu yg emank lg saya cari skrg >.< bocoran dikit lah gan 🙁
    saya maw nampilin preview gmbr dr activity pertama ke activity kedua

  • Trims e….banyak mas agusharyanto……
    sangat membantu sekali

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>