Professional Documents
Culture Documents
Implicit Intent
Implicit Intent
IMPLICIT INTENT
Materi Pembelajaran:
1. Membuat intent implisit dan menggunakan tindakan dan kategorinya.
2. Menggunakan kelas pembantu ShareCompat.IntentBuilder untuk membuat intent implisit
agar dapat membagikan data dengan mudah.
3. aplikasi Anda dapat menerima intent implisit dengan mendeklarasikan filter intent dalam
manifes Android.
Tujuan Pembelajaran:
1. Mahasiswa dapat membuat aplikasi baru untuk mengirimkan intent implisit.
2. Mahasiswa dapat mengimplementasikan dua intent implisit yang membuka halaman web dan
membuka lokasi pada peta.
3. Mahasiswa dapat mengimplementasikan tindakan untuk membagikan cuplikan teks.
4. Mahasiswa dapat membuat aplikasi baru yang dapat menerima intent implisit untuk
membuka laman web.
<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.android.implicitintents.MainActivity"
android:orientation="vertical">
android:id "@+id/website_edittext"
android:layout_width "match_parent"
android:layout_height "wrap_content"
android:text "@string/edittext_uri"
Atribut (Tombol) Nilai (Tombol)
android:id "@+id/open_website_button"
android:layout_width "wrap_content"
android:layout_height "wrap_content"
android:layout_marginBottom "24dp"
android:text "@string/button_uri"
android:onClick "openWebsite"
5. Tambahkan EditText kedua dan Tombol ke layout untuk fungsi Open Website.
6. Gunakan atribut yang sama dengan atribut pada langkah sebelumnya. Namun, modifikasi
atribut seperti yang di bawah ini:
android:id "@+id/location_edittext"
android:text "@string/edittext_loc"
android:id "@+id/open_location_button"
android:text "@string/button_loc"
android:onClick "openLocation"
7. Tambahkan EditText ketiga dan Tombol untuk fungsi Share This. Buatlah perubahan ini:
android:id "@+id/share_edittext"
android:text "@string/edittext_share"
android:id "@+id/share_text_button"
android:text "@string/button_share"
android:onClick "shareText"
Kode Solusi:
<?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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.android.implicitintents.MainActivity"
android:orientation="vertical">
<EditText
android:id="@+id/website_edittext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/edittext_uri" />
<Button
android:id="@+id/open_website_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
android:onClick="openWebsite"
android:text="@string/button_uri" />
<EditText
android:id="@+id/location_edittext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/edittext_loc" />
<Button
android:id="@+id/open_location_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
android:onClick="openLocation"
android:text="@string/button_loc" />
<EditText
android:id="@+id/share_edittext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/edittext_share" />
<Button
android:id="@+id/share_text_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
android:onClick="shareText"
android:text="@string/button_share" />
</LinearLayout>
Tugas 2. Mengimplementasikan "buka situs web"
Dalam tugas ini Anda akan mengimplementasikan metode handler on-click untuk tombol
pertama dalam layout ("Open Website.") Tindakan ini menggunakan intent implisit untuk
mengirimkan URI yang diberikan ke aktivitas yang dapat menangani intent implisit tersebut
(seperti browser web).
7. Buat intent baru dengan Intent.ACTION_VIEW sebagai tindakan dan URI sebagai data:
Intent intent = new Intent(Intent.ACTION_VIEW, webpage);
Konstruktor intent ini berbeda dari yang Anda gunakan untuk membuat intent eksplisit. Dalam
konstruktor sebelumnya, Anda menetapkan konteks saat ini dan komponen spesifik (kelas
aktivitas) untuk mengirim intent. Dalam konstruktor ini Anda menetapkan tindakan dan data
untuk tindakan tersebut. Tindakan didefinisikan oleh kelas intent dan dapat menyertakan
ACTION_VIEW (untuk melihat data yang diberikan), ACTION_EDIT (untuk mengedit data
yang diberikan), atau ACTION_DIAL (untuk menghubungi nomor telepon). Dalam hal ini,
tindakan adalah ACTION_VIEW karena kita ingin membuka dan melihat laman web yang
ditetapkan oleh URI dalam variabel laman web.
8. Gunakan resolveActivity() dan pengelola paket Android untuk menemukan aktivitas yang
dapat menangani intent implisit. Periksa untuk memastikan permintaan berhasil diatasi.
if (intent.resolveActivity(getPackageManager()) != null) {
}
Permintaan yang cocok dengan tindakan intent dan data dengan intent Anda ini memfilter
aplikasi yang dipasang pada perangkat untuk memastikan paling tidak ada satu aktivitas
yang bisa menangani permintaan Anda.
10. Tambahkan blok else untuk mencetak pesan log jika intent tidak bisa diatasi.
} else {
Log.d("ImplicitIntents", "Can't handle this!");
}
2. Tambahkan variabel privat di bagian atas kelas untuk menampung objek EditText bagi URI
lokasi.
private EditText mLocationEditText;
4. Membuat metode baru bernama openLocation untuk digunakan sebagai metode onClick
untuk tombol Open Location. Gunakan tanda tangan metode yang sama sebagai
openWebsite().
6. Parse string itu ke dalam objek Uri dengan kueri penelusuran geo:
Uri addressUri = Uri.parse("geo:0,0?q=" + loc);
7. Buat intent baru dengan Intent.ACTION_VIEW sebagai tindakan dan loc sebagai datanya.
Intent intent = new Intent(Intent.ACTION_VIEW, addressUri);
8. Pecahkan intent dan periksa untuk memastikan intent berhasil diatasi. Jika demikian,
startActivity(), jika tidak catat log pesan kesalahan.
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
} else {
Log.d("ImplicitIntents", "Can't handle this intent!");
}
ShareCompat.IntentBuilder
.from(this)
.setType(mimeType)
.setChooserTitle("Share this text with: ")
.setText(txt)
.startChooser();
}
Aktivitas dalam aplikasi Anda selalu bisa diaktifkan dari dalam atau luar aplikasi dengan intent
eksplisit. Untuk mengizinkan aktivitas menerima intent implisit, definisikan filter intent dalam
manifes Anda untuk menandakan intent implisit mana yang akan ditangani oleh aktivitas.
Untuk mencocokkan permintaan Anda dengan aplikasi spesifik yang dipasang pada perangkat,
sistem Android mencocokkan intent implisit dengan aktivitas yang filter intent-nya menandakan
bahwa intent itu dapat melakukan tindakan tersebut. Jika ada beberapa aplikasi terpasang yang
cocok, pengguna akan diberikan pemilih aplikasi yang akan mengizinkan pengguna memilih
aplikasi mana yang ingin digunakan untuk menangani intent tersebut.
Saat aplikasi pada perangkat mengirimkan intent implisit, sistem Android mencocokkan
tindakan dan data intent tersebut dengan aktivitas yang tersedia, termasuk filter intent yang
benar. Jika filter intent aktivitas cocok dengan intent, aktivitas dapat menangani intent itu
sendiri (jika itu satu-satunya aktivitas yang cocok), atau (jika ada beberapa yang cocok) sebuah
pemilih aplikasi akan muncul dan mengizinkan pengguna memilih aplikasi mana yang mereka
inginkan untuk melakukan tindakan itu.
Dalam tugas ini Anda akan membuat aplikasi sangat sederhana yang menerima intent implisit
untuk membuka URI untuk laman web. Saat diaktifkan oleh intent implisit, aplikasi itu
menampilkan URI yang diminta sebagai string dalam TextView.
Atribut Nilai
android:id "@+id/text_uri_message"
android:layout_width wrap_content
android:layout_height wrap_content
android:textSize "18sp"
android:textStyle "bold"
8. Hapus atribut android:text. Tidak ada teks dalam TextView ini secara default, Anda akan
menambahkan URI dari intent dalam onCreate().
5.2 Memodifikasi Manifes Android untuk menambahkan filter intent
1. Buka manifests/AndroidManifest.xml.
2. Perhatikan bahwa aktivitas utama telah memiliki filter intent ini:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
Filter intent ini, yang merupakan bagian dari manifes proyek default, menunjukkan bahwa
aktivitas ini adalah titik masuk utama untuk aplikasi Anda (filter ini memiliki tindakan
intent "android.intent.action.MAIN"), dan bahwa aktivitas ini seharusnya muncul sebagai
item level teratas dalam peluncur (kategorinya
adalah "android.intent.category.LAUNCHER")
3. Tambahkan <intent-filter> tag inside <activity>, dan sertakan elemen-elemen berikut
ini:
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" android:host="developer.android.com" />
Baris ini mendefinisikan filter intent untuk aktivitas tersebut, jenis intent yang dapat ditangani
aktivitas. Filter intent mendeklarasikan elemen berikut:
Kode Solusi:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.implicitintentsreceiver">
<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>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http"
android:host="developer.android.com" />
</intent-filter>
</activity>
</application>
</manifest>
5.3 Memproses Intent
Dalam metode onCreate() untuk aktivitas, Anda memproses intent yang masuk untuk data atau
ekstra yang disertakan. Dalam hal ini, intent implisit yang masuk memiliki URI yang disimpan
dalam data intent.
1. Buka MainActivity.java.
2. Dalam metode onCreate(), dapatkan intent yang datang dan digunakan untuk mengaktifkan
aktivitas tersebut:
Intent intent = getIntent();
4. Periksa untuk memastikan variabel uri tidak null. Jika pemeriksaan lulus, buat string dari
objek URI:
if (uri != null) {
String uri_string = "URI: " + uri.toString();
}
5. Di dalam blok if yang sama, dapatkan tampilan teks untuk pesannya:
TextView textView = (TextView) findViewById(R.id.text_uri_message);
6. Juga di dalam blok if, setel teks TextView itu ke URI:
textView.setText(uri_string);