Tutorial Membuat Share Intent dan Receivernya

Sekarang kita main yang sedikit highend, mainan smartphone :D. Tutorial kali ini, menyoal bagaimana cara membuat / mengimplementasikan menu share dan bagaimana menangkap hasil parameter yang dikirim.

Free Image Hosting at www.ImageShack.us

Pertama-tama, seperti tutorial sebelumnya, silahkan buat project baru dengan nama terserah anda dan buat satu Activity yang namanya IntentActivity. Buatnya langsung di dialog create new project ya, biar langsung disiapkan oleh IDE.

Free Image Hosting at www.ImageShack.us

Setelah itu, coba jalankan aplikasi. Lalu, buka aplikasi Gallery, pilih gambar dan tekan share. Anda akan melihat tampilan semacam ini.

Free Image Hosting at www.ImageShack.us

Perhatikan, tidak ada aplikasi kita di sana. Tentu saja, karena tujuan tutorial ini adalah untuk menambahkan aplikasi kita ke menu tersebut.

Tahap berikut yang harus dilakukan adalah mendaftarkan Activity dari aplikasi kita supaya dikenali dan bisa muncul di menu share. Buka file Androidmanifest.xml dan tambahkan intent action SEND dan CHOOSER untuk Activity yang kita inginkan. Codenya seperti ini:

<activity
    android:label="@string/app_name"
    android:name=".IntentActivity" >
    <intent-filter >
        <action android:name="android.intent.action.SEND"/>
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="image/*"/>
    </intent-filter>
</activity>

<activity
    android:label="@string/app_name"
    android:name=".IntentActivity" >
    <intent-filter >
        <action android:name="android.intent.action.CHOOSER"/>
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="image/*"/>
    </intent-filter>
</activity>

Penjelasannya lengkap dari isi file ini, bisa dibaca di halaman help android tentang file manifest.
Silahkan dicoba lagi dengan menjalan aplikasi dan membuka gallery. Seharusnya, anda akan melihat tampilan seperti ini:

Free Image Hosting at www.ImageShack.us

Selanjutnya, kita akan menambahkan kode2 yang akan menerima dan memproses file yang di-share. buka file res/layout/main.xml dan ganti semua isinya dengan kode berikut:

<?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"
    android: orientation="vertical" >

    <TextView
        android:id="@+id/uriPath"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Aplikasi ini hanya untuk menerima Intent" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/ic_launcher" />

</LinearLayout>

Lalu buka file IntentActivity.java dan isikan dengan kode berikut:

package id.web.freelancer.example.intent1;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.widget.ImageView;
import android.widget.TextView;

public class IntentActivity extends Activity {
	TextView uriPath = null;
	ImageView imageView = null;
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Bundle extras = getIntent().getExtras();
        
        setContentView(R.layout.main);
		
        if(extras != null){
            Uri filePathFromActivity = (Uri) extras.get(Intent.EXTRA_STREAM);
            Log.i("log", "PATH: " + filePathFromActivity.toString());
            
            uriPath = (TextView)findViewById(R.id.uriPath);
            imageView = (ImageView)findViewById(R.id.imageView);
            
            uriPath.setText(filePathFromActivity.toString());
            imageView.setImageURI(filePathFromActivity);
        }        
    }
}

Sesuaikan deklarasi package package id.web.freelancer.example.intent1; di atas, dengan kondisi dari aplikasi anda.

Sedikit penjelasan dari kode di atas:

  • baris Bundle extras = getIntent().getExtras(); digunakan untuk mengambil parameter yang diterima oleh Activity. Lebih lanjut mengenai Bundle, bisa di baca di halaman bantuan android mengenai bundle.
  • Selanjutnya baris if(extras != null){ untuk melakukan pengecekan, apakah ada parameter yang dikirimkan ke Activity tersebut.
  • Selebihnya, kita sudah bisa memproses parameter yang diterima. Seperti contoh kasus kali ini, kita menggunakan Uri filePathFromActivity = (Uri) extras.get(Intent.EXTRA_STREAM); untuk mendapatkan parameter yang dikirim.

Selesai sudah, silahkan jalankan dan coba buka gallery, seperti step-step di atas. Setelah dapat gambar, klik aplikasi anda dari daftar share. Anda akan mendapatkan hasil seperti ini:

Free Image Hosting at www.ImageShack.us

Saya kasih bonus sedikit. Snippet berikut ini, bisa digunakan untuk melihat parameter apa saja (bila ada) yang diterima oleh Activity:

java.util.Set<String> keys = extras.keySet();
java.util.Iterator<String> keyIterator = keys.iterator();
while(keyIterator.hasNext()) {
	Log.i("log", (String) keyIterator.next());
}

Kalau anda melihat ada key yang isinya android.intent.extra.STREAM, ini adalah isi dari konstanta Intent.EXTRA_STREAM. Selengkapnya, bisa di baca di halaman help android mengenai Intent.


Author: Arief Bayu Purwanto

Hello, my name is Arief Bayu Purwanto, a 24 years old father of a beautiful daughter. Interested in online programming, linux, games, and reading. Currently working on kapanlagi.com as junior developer. I live in a relatively quite and cool place called Malang. I'm available for some freelance stuff as well as some consulting job. You can see my portofolio for some previous task I've finished and some other information related to my capability. Btw, I'm plurking here.