Memanggil App Built-In Dengan Menggunakan Intent

Dalam beberapa latihan sebelumnya kita sudah tahu bagaimana caranya memanggil activity di dalam app kita sendiri. Salah satu aspek kunci dalam pemrograman Android adalah menggunakan intent untuk memanggil activity dari app yang lain. App kita juga bisa memanggil banyak app yang sudah built-in di dalam perangkat Android kita. Misalnya, bila app kita perlu menampilkan laman web, alih-alih membuat web browser sendiri, kita bisa menggunakan web browser yang sudah built-in untuk menampilkan laman web.

Berikut adalah latihan bagaimana memanggil app yang pada umumnya sudah built-in di dalam perangkat Android kita.

1. Kita buat project baru dan kita beri nama: "Intents".

2. Kita tambahkan kode berikut di dalam file layout:"activity_main.xml" seperti berikut:
<?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:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.intents.MainActivity">

<Button
android:id="@+id/btn_webbrowser"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Web Browser"
android:onClick="onClickWebBrowser"/>

<Button
android:id="@+id/btn_makecalls"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Menelpon"
android:onClick="onClickMakeCalls"/>

<Button
android:id="@+id/btn_showMap"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Tampilkan Peta"
android:onClick="onClickShowMap"/>
</LinearLayout>
3. Kita tambahkan kode berikut dalam file utama "MainActivity.java" seperti berikut:
package com.example.intents; 
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;

public class MainActivity extends AppCompatActivity {

int request_Code = 1;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

public void onClickWebBrowser(View view) {
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("https://diansano.blogspot.co.id"));
startActivity(i);
}

public void onClickMakeCalls(View view) {
Intent i = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:+6281804134298"));
startActivity(i);
}

public void onClickShowMap(View view) {
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:37.827500, -122.481670"));
startActivity(i);
}
}
4. Kita jalankan dalam emulator di Android Studio. Hasilnya kurang lebih seperti dalam gambar berikut:

5. Klik masing-masing tombol untuk menampilkan app yang sudah built-ini. Hasilnya kurang lebih seperti gambar berikut:

Catatan:
Untuk menampilkan app Maps, kita perlu menjalankan app di AVD (emulator) yang mensupport Google APIs.

Penjelasan:

Dalam contoh latihan ini, kita sudah melihat bagaimana kita bisa menggunakan class 'Intent' untuk memanggil beberapa app yang sudah built-in di Android (misalnya, Maps, Phone, Contacts, dan Browser).

Di Android, intent biasanya disajikan dalam bentuk pasangan antara: 'actions' dan 'data'. 'Action' menggambarkan apa yang akan dilakukan, misalnya meng-edit sesuatu, melihat konten sesuatu, dan seterusnya. Data menentukan apa yang akan terjadi bila 'action' dilakukan, misalnya menelpon seseorang di database kontak. Data ditentukan sebagai object 'Uri'.

Beberapa contoh terkait dengan 'action' adalah sepert berikut:
  • ACTION_VIEW
  • ACTION_DIAL
  • ACTION_PICK
Beberapa contoh terkait data adalah seperti berikut:
  • https://diansano.blogspot.co.id
  • tel:+628198765432
  • geo:37.827500, -122.481670
  • content://contacts
Jadi pasangan antara 'action' dan 'data' menggambarkan apa yang akan dilakukan. Misalnya, untuk menelpon, kita akan menggunakan pasangan ACTION_DIAL/tel:+62819876543. Untuk menampilkan daftar kontak yang ada di handphone, kita bisa menggunakan pasangan ACTION_VIEW/content://contacts. Untuk mengambil satu kontak dari daftar kontak, kita bisa menggunakan pasangan ACTION_PICK/content://contacts.

Pada tombol pertama, kita membuat object 'Intent' dan kemudian melewatkan dua argument ke konstruktor-nya, yaitu 'action' dan 'data':
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("https://diansano.blogspot.co.id"));
startActivity(i);
'Action' disini disajikan dengan konstanta 'Intent.ACTION_VIEW'. Kita menggunakan method 'parse()' dari class 'Uri' untuk mengkonversi string URI menjadi object 'Uri'.

Konstanta 'Intent.ACTION_VIEW' biasanya mengacu pada action "android.intent.action.View", sehingga kode di atas bisa juga ditulis seperti berikut:
Intent i = new Intent("android.intent.action.VIEW", Uri.parse("https://diansano.blogspot.co.id"));
startActivity(i);
Kode di atas juga bisa ditulis seperti berikut:
Intent i = new Intent("android.intent.action.VIEW")
i.setData(Uri.parse("https://diansano.blogspot.co.id"));
startActivity(i);
Disitu, kita men-set data secara terpisah dengan menggunakan method 'setData()'.

Untuk tombol kedua, kita menelpon nomor tertentu dengan melewakan nomor telepon sebagai 'data':
Intent i = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:+628198765432"));
startActivity(i);
startActivity(i);
Dalam hal ini, dialer handphone akan menampilkan nomor yang akan ditelpon. User masih harus menekan tombol 'dial' untuk menelpon nomor tersebut. Bila kita ingin menelpon nomor tersebut tanpa intervensi user, kita ubah bagian 'action' seperti berikut:
Intent i = new Intent(Intent.ACTION_CALL, Uri.parse("tel:+628198765432"));
startActivity(i);
Catatan:
Bila kita ingin app kita langsung menelpon nomor tertentu, kita harus menambahkan permission 'android.permission.CALL_PHONE' di app kita.
Untuk menampilkan dialer tanpa menampilkan nomor apapun, cukup membuang bagian 'data' seperti berikut:
Intent i = new Intent(Intent.ACTION_DIAL);
startActivity(i);

Tombol ketiga menampilkan peta dengan menggunakan konstanta ACTION_VIEW:
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:37.827500, -122.481670"));
startActivity(i);
Disini, alih-alih menggunakan "http" kita menggunakan skema "geo".

No comments: