2.3: Memulai Aktivitas dengan Intent Implisit

Tugas 1. Membuat proyek dan layout baru

Untuk latihan ini, Anda akan membuat proyek baru dan aplikasi bernama Implicit Intents dengan layout baru.

1.1 Membuat proyek

  1. Mulai Android Studio dan buat proyek Android Studio baru. Panggil “Implicit Intents” aplikasi.
  2. Pilih Empty Activity untuk template proyek. Klik Next.
  3. Terima nama aktivitas default (MainActivity). Pastikan kotak Generate Layout file dicentang. Klik Finish.

  4. Edit res/values/strings.xml untuk menyertakan sumber daya string ini: 

    <string name="edittext_uri">http://developer.android.com</string>
    <string name="button_uri">Open Website</string>
    
    <string name="edittext_loc">Golden Gate Bridge</string>
    <string name="button_loc">Open Location</string>
    
    <string name="edittext_share">\'Twas brillig and the slithy toves</string>
    <string name="button_share">Share This Text</string>
    
    

 

Ubah RelativeLayout default ke LinearLayout. Tambahkan atribut android:orientation dan berikan nilai “vertical.” 

<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">
  1. Hapus TextView “Hello World”.
  2. Tambahkan EditText dan Tombol ke layout untuk fungsi Buka Situs web. Gunakan nilai atribut ini:

    Atribut (EditText) Nilai (EditText)
    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”

  3. Tambahkan EditText kedua dan Tombol ke layout untuk fungsi Open Website.
    1. Buka MainActivity.java.
    2. Tambahkan variabel privat di bagian atas kelas untuk menampung objek EditText untuk URI situs web.
      private EditText mWebsiteEditText;
      
    3. Dalam metode onCreate(), gunakan findViewByID() untuk mendapatkan referensi tentang instance EditText dan menetapkannya ke variabel privat tersebut:
      mWebsiteEditText = (EditText) findViewById(R.id.website_edittext);
      
    4. Buat metode baru bernama openWebsite(), dengan tanda tangan ini:
      public void openWebsite(View view) { }
      
    5. Dapatkan nilai string EditText:
      String url = mWebsiteEditText.getText().toString();
      
    6. Enkode dan parse string ke dalam objek Uri:
      Uri webpage = Uri.parse(url);
      
    7. Buat intent baru dengan Intent.ACTION_VIEW sebagai tindakan dan URI sebagai data:

      Intent intent = new Intent(Intent.ACTION_VIEW, webpage);

      Gunakan atribut yang sama dengan atribut pada langkah sebelumnya. Namun, modifikasi atribut seperti yang di bawah ini:

      Atribut (EditText) Nilai (EditText)
      android:id “@+id/location_edittext”
      android:text “@string/edittext_loc”
      Atribut (Tombol) Nilai (Tombol)
      android:id “@+id/open_location_button”
      android:text “@string/button_loc”
      android:onClick “openLocation”

      Tambahkan EditText ketiga dan Tombol untuk fungsi Share This. Buatlah perubahan ini:

      Atribut (EditText) Nilai (EditText)
      android:id “@+id/share_edittext”
      android:text “@string/edittext_share”
      Atribut (Tombol) Nilai (Tombol)
      android:id “@+id/share_text_button”
      android:text “@string/button_share”
      android:onClick “shareText”

      Tugas 2. Mengimplementasikan “buka situs web”

      2.1 Mendefinisikan metode openWebsite

  1. Buka MainActivity.java.
  2. Tambahkan variabel privat di bagian atas kelas untuk menampung objek EditText untuk URI situs web.
    private EditText mWebsiteEditText;
    
  3. Dalam metode onCreate(), gunakan findViewByID() untuk mendapatkan referensi tentang instance EditText dan menetapkannya ke variabel privat tersebut:
    mWebsiteEditText = (EditText) findViewById(R.id.website_edittext);
    
  4. Buat metode baru bernama openWebsite(), dengan tanda tangan ini:
    public void openWebsite(View view) { }
    
  5. Dapatkan nilai string EditText:
    String url = mWebsiteEditText.getText().toString();
    
  6. Enkode dan parse string ke dalam objek Uri:
    Uri webpage = Uri.parse(url);
    
  7. Buat intent baru dengan Intent.ACTION_VIEW sebagai tindakan dan URI sebagai data:

    Intent intent = new Intent(Intent.ACTION_VIEW, webpage);
    

  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.

  9. Dalam pernyataan if, panggil startActivity() untuk mengirimkan intent.
    startActivity(intent);
    
  10. Tambahkan blok else untuk mencetak pesan log jika intent tidak bisa diatasi.
    } else {
       Log.d("ImplicitIntents", "Can't handle this!");
    }
    

Tugas 3. Mengimplementasikan “buka lokasi”

3.1 Definisikan metode openLocation

  1. Buka MainActivity.java (java/com.example.android.implicitintents/MainActivity).
  2. Tambahkan variabel privat di bagian atas kelas untuk menampung objek EditText bagi URI lokasi.
    private EditText mLocationEditText;
    
  3. Dalam metode onCreate(), gunakan findViewByID() untuk mendapatkan referensi tentang contoh EditText dan menetapkannya ke variabel privat tersebut:
    mLocationEditText = (EditText) findViewById(R.id.location_edittext);
    
  4. Membuat metode baru bernama openLocation untuk digunakan sebagai metode onClick untuk tombol Open Location. Gunakan tanda tangan metode yang sama sebagai openWebsite().
  5. Dapatkan nilai string EditText mLocationEditText.
    String loc = mLocationEditText.getText().toString();
    
  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!");
    }

Tugas 4. Mengimplementasikan bagikan teks ini

4.1 Mengimplementasikan metode shareText

  1. Buka MainActivity.java.
  2. Tambahkan variabel privat di bagian atas kelas untuk menampung objek EditText untuk URI situs web.
    private EditText mShareTextEditText;
    
  3. Dalam metode onCreate(), gunakan findViewByID() untuk mendapatkan referensi tentang instance EditText dan menetapkannya ke variabel privat tersebut:
    mShareTextEditText = (EditText) findViewById(R.id.share_edittext);
    
  4. Membuat metode baru bernama shareThis() untuk digunakan sebagai metode onClick untuk tombol This Text. Gunakan tanda tangan metode yang sama sebagai openWebsite().
  5. Dapatkan nilai string EditText mShareTextEditText.
    String txt = mShareTextEditText.getText().toString();
    
  6. Definisikan tipe mime teks untuk dibagikan:
    String mimeType = "text/plain";
    
  7. Panggil ShareCompat.IntentBuilder dengan metode ini:

    ShareCompat.IntentBuilder
           .from(this)
           .setType(mimeType)
           .setChooserTitle("Share this text with: ")
           .setText(txt)
           .startChooser();
    

    Panggilan ke hareCompat.IntentBuilder ini menggunakan metode berikut:

    </tr> </table> Format ini, dengan semua metode setter builder dirangkai dalam satu pernyataan, adalah cara shorthand mudah untuk membuat dan meluncurkan intent. Anda bisa menambahkan metode tambahan apa pun ke daftar ini.

    Metode Keterangan
    from() Aktivitas yang meluncurkan intent berbagi (ini).
    setType() Tipe MIME item yang akan dibagikan.
    setChooserTitle() Judul yang muncul pada pemilih aplikasi sistem.
    setText() Teks sebenarnya yang akan dibagikan
    startChooser() Tunjukkan pemilih aplikasi sistem dan kirimkan intent.

Tugas 5. Menerima Intent Implisit

5.1 Membuat Proyek & Layout

  1. Mulai Android Studio dan buat proyek Android Studio baru.
  2. Panggil “Penerima Intent Implisit” aplikasi Anda.
  3. Pilih Empty Activity untuk template proyek.
  4. Terima nama aktivitas default (MainActivity). Klik Berikutnya.
  5. Pastikan kotak Generate Layout file dicentang. Klik Finish.
  6. Buka res/layout/activity_main.xml.
  7. Ubah TextView (“Hello World”) yang sudah ada dengan atribut berikut:

    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:

    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")

    <intent-filter>
       <action android:name="android.intent.action.MAIN" />
       <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

    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:

    Jenis Filter Nilai Kecocokan
    tindakan “android.intent.action.VIEW” Semua intent dengan tindakan tampilan.
    kategori “android.intent.category.DEFAULT” Semua intent implisit. Kategori ini harus disertakan agar aktivitas Anda menerima intent implisit apa pun.
    kategori “android.intent.category.BROWSABLE” Permintaan untuk tautan yang dapat dijelajahi dari laman web, email, atau sumber lainnya.
    data android:scheme=”http” android:host=”developer.android.com” URI yang berisi skema http DAN hostname dari developer.android.com.

    Catat bahwa filter (https://developer.android.com/guide/topics/manifest/data-element.html) [data] memiliki batasan untuk jenis tautan yang akan diterima dan hostname untuk URI tersebut. Jika Anda memilih agar penerima dapat menerima tautan apa pun, Anda bisa meninggalkan <data> elemen semuanya.

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();
    
  3. Dapatkan data intent. Data intent selalu objek URI:
    Uri uri = intent.getData();
    
  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);
    
  7. Jalankan aplikasi penerima.

    Menjalankan aplikasi itu sendiri menunjukkan aktivitas kosong tanpa teks. Ini karena aktivitas diaktifkan dari peluncur sistem, dan tidak dengan intent dari aplikasi lain.

  8. Jalankan aplikasi ImplicitIntents, dan klik Open Website dengan URI default.

    Pemilih aplikasi muncul menanyakan apakah Anda ingin menggunakan browser default atau aplikasi ImplicitIntentsReceiver. Pilih “Just Once” untuk aplikasi penerima. Aplikasi ImplicitIntentsReceiver terbuka dan pesan menunjukkan URI dari permintaan yang asli.

  9. Tap tombol kembali dan masukkan URI yang berbeda. Klik Open Website.

    Aplikasi penerima memiliki filter intent yang hanya cocok dengan protokol URI yang sama persis (http) and host (developer.android.com). URI lainnya terbuka pada browser web default.

hasil Run…

Leave a Reply

Your email address will not be published. Required fields are marked *