Kamis, 03 Juni 2021

BAB 8 Pengenalan Explicit Intent dan Implicit Intent


Terdapat 2 model Intent dalam pemrograman Android yaitu:

a) Explicit Intent berfungsi untuk mengaktifkan komponen-komponen dalam satu 
aplikasi yang sama. Misalnya seperti : Berpindah Activity.

b) Implicit Intent berfungsi untuk memanggil fungsi activity yang sudah ada di fungsi 
internal android seperti Dial Number, Open Browser dan lainnya.

Fungsi Intent

a) Untuk berpindah halaman dari satu Activity ke Activity lain. Contohnya : Kita membuat aplikasi dengan 3 Activity. Activity utama berisi tombol informasi dan login. Ketika tombol informasi di klik akan tampil activity informasi begitupun dengan tombol login ketika di klik akan menampilkan activity login.

b) Untuk transfer data dari satu Activity ke Activity lain. Contohnya : Pada saat kita mengisi data pada Activity login maka nanti akan ditampilkan informasinya pada Activity infomasi user.

c) Untuk memanggil activity pada internal android seperti Melakukan Dial Number, 
Open Email ataupun lainnya.

Intent merupakan sebuah mekanisme yang digunakan untuk melakukan sebuah aksi dari komponen aplikasi. Untuk dapat melakukan sebuah aksi pada sebuah intent, ada 3 cara yang dapat dilakukan:

1) Menjalankan sebuah activity lain baik dengan data ataupun tanpa data

2) Membuat sebuah service untuk menjalankan pekerjaan tertentu pada sebuah background/non main thread.

3) Mengirimkan sebuah broadcast. Pesan yang dikirimkan dalam keadaan tertentu, misalkan ketika booting atau sedang melakukan pengisian data baru mengirimkan data.

Explicit Intent

Explicit intent digunakan untuk memanggil Activity lain yang masih dalam satu project ataupun berbeda. Pemanggilan Intent secara explicit dengan menentukan nama Activity tujuan. Intent membutuhkan dua parameter, yang pertama adalah Context (dapat didapatkan dari Activity atau Application) dan berikutnya adalah nama NamaActivity.class.

Intent intent = new Intent(this, NextActivity.class);
startActivity(intent);


pada contoh berikut ini, kita akan membuat sebuah Apps dengan menggunakan fungsi intent explicit, langkahnya seperti berikut ini:

1. Pertama jalankan aplikasi IDE Android Studio, caranya :

a. Pilih Start -> Android Studio
b. Pilih > Start a new Android Studio Project
c. Pilih > Empty Activity > Next 
Configure Your Project

Maka akan Tampil IDE Android Studio, setelah itu Buka dan ketikan script
activity_main.xml seperti codingan dibawah ini :

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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=".MainActivity">

    <TextView
        android:id="@+id/text_header_reply"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/text_header_reply"
android:visibility="invisible"
android:layout_marginBottom="@dimen/activity_vertical_margin"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textStyle="bold"/>

    <TextView
        android:id="@+id/text_message_reply"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/text_header_reply"
        android:visibility="invisible"
        android:layout_marginLeft="@dimen/activity_horizontal_margin"
        android:layout_marginStart="@dimen/activity_horizontal_margin"
android:textAppearance="?android:attr/textAppearanceMedium"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_main"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:onClick="launchSecondActivity"/>
    <EditText
android:id="@+id/editText_main"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_toLeftOf="@+id/button_main"
        android:layout_toStartOf="@+id/button_main"
        android:hint="@string/editText_main"/>
</RelativeLayout>


Setelah itu Buka dan ubah script MainActivity.java menjadi Seperti ini:

package com.example.intenteksplisit;

import android.content.Intent;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    private static final String LOG_TAG = MainActivity.class.getSimpleName();
    public static final String EXTRA_MESSAGE = "com.example.intenteksplisit.extra.MESSAGE";
    public static final int TEXT_REQUEST = 1;

    private EditText mMessageEditText;
    private TextView mReplyHeadTextView;
    private TextView mReplyTextView;

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

        mMessageEditText = (EditText) findViewById(R.id.editText_main);
        mReplyHeadTextView = (TextView) findViewById(R.id.text_header_reply);
        mReplyTextView = (TextView) findViewById(R.id.text_message_reply);
    }
    public void launchSecondActivity(View view){
        Log.d(LOG_TAG, "Button clicked");

        Intent intent = new Intent(this, activity_second.class);
        String message = mMessageEditText.getText().toString();
        intent.putExtra(EXTRA_MESSAGE, message);
        startActivityForResult(intent,TEXT_REQUEST);
    }
    public void onActivity(int requestCode, int resultCode, Intent data){
        super.onActivityResult(requestCode,resultCode,data);

        if (requestCode == TEXT_REQUEST){
            if (resultCode == RESULT_OK){
                String reply = data.getStringExtra(activity_second.EXTRA_REPLY);
                mReplyHeadTextView.setVisibility(View.VISIBLE);
                mReplyTextView.setText(reply);
                mReplyTextView.setVisibility(View.VISIBLE);
            }
        }
    }
}
  

Buat sebuah Activity baru dengan Nama SecondActivity dengan cara seperti gambar di bawah ini 

Selanjutnya Buka dan ubah script activity_second.xml menjadi seperti bawah ini :

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    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_hotizontal_margin"
    android:paddingRight="@dimen/activity_hotizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".activity_second">

    <TextView
        android:id="@+id/text_header"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/text_header"
        android:layout_marginBottom="@dimen/activity_vertical_margin"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textStyle="bold"/>
    <TextView
android:id="@+id/text_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/text_header"
        android:layout_marginLeft="@dimen/activity_hotizontal_margin"
        android:layout_marginStart="@dimen/activity_hotizontal_margin"
android:textAppearance="?android:attr/textAppearanceMedium"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_second"
android:id="@+id/button_second"
   android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:onClick="returbReply"/>
    <EditText
        android:id="@+id/editText_second"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_toLeftOf="@+id/button_second"
        android:layout_toStartOf="@+id/button_second"
        android:hint="@string/editText_second"/>
</RelativeLayout>


Selanjutnya Buka dan ubah script SecondActivity.java menjadi seperti dibawah ini :

package com.example.intenteksplisit;

import android.content.Intent;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class activity_second extends AppCompatActivity {
    public static final String EXTRA_REPLY ="com.example.intenteksplisit.extra.REPLY";
    private EditText mReply;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        mReply = (EditText) findViewById(R.id.editText_second);
        Intent intent = getIntent();
        String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
        TextView textView = (TextView) findViewById(R.id.text_message);
        if (textView !=null){
            textView.setText(message);
        }
    }
    public void returnReply(View view){
        String reply = mReply.getText().toString();
        Intent replyIntent = new Intent();
        setResult(RESULT_OK, replyIntent);
        finish();
    }
}

Setelah itu Buka dan ubah script String.xml menjadi seperti di bawah ini

<resources>
    <string name="app_name">IntentEksplisit</string>
    <string name="text_header_reply"></string>
    <string name="button_main"></string>
    <string name="editText_main"></string>
    <string name="text_header"></string>
    <string name="button_second"></string>
    <string name="editText_second"></string>
</resources>

Buat file dimens.xml di dalam folder Res/Values lalu ketikan script nya seperti 
dibawah ini 
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="activity_vertical_margin"></dimen>
    <dimen name="activity_hotizontal_margin"></dimen>
</resources>

Sesuaikan script AndroidManifest.xml seperti di bawah ini untuk mendaftarkan 
komponen Intent Filter yang ada 
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example intenteksplisit">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".activity_second"></activity>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Lalu coba jalankan menggunakan emulator yang ada tersedia di Android Studio Anda,
maka akan tampil seperti gabar dibawah ini :

Ketika nama kemudian klik SEND maka akan seperti gambar dibawah ini



Implicit Intent

Intent Implisit adalah Intent yang tidak memiliki target dan melempar tugas ke 
aplikasi lainnya. Intent jenis ini mengirim pesan dan permintaan, lalu System Android akan mencari aplikasi yang dapat mengabulkan permintaan Intent. Aplikasi yang siap akan 
menangkap tugas yang diberikan menjalankan tugas.Gambaran Sorce code dari intent implisit, Source di dibawah ini dapat memanggil 
komponen browser untuk URL tertentu menggunakan intent. 

Intent intent = new Intent(Intent.ACTION_VIEW, 
Uri.parse("http://www.unggasid.com"));
startActivity(intent);

Aplikasi yang umum digunakan antara lain:
 Call
 Dialpad
 Contact
 Browser
 Call Log
 Gallery
 Camera
Sebagai contoh pemanggilan Gallery yang berisi gambar, dapat dilihat pada kode berikut.

Intent intent = new 
Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CO
NTENT_URI);

pada contoh berikut ini, kita akan membuat sebuah Apps dengan menggunakan fungsi intent implicit, langkahnya seperti berikut ini:

1. Pertama jalankan aplikasi IDE Android Studio, caranya :

a. Pilih Start > Android Studio
b. Pilih > Start a new Android Studio Project



c. Pilih > Empty Activity > Next 
Configure Your Project

Name : ImplicitIntents
Package Name : ubah menjadi nama blog kalian masing-masing, disini saya menggunakan blog bawaan com.example.implisitintents
Save Location :  D:\Implisit
Language : Java
Minimum API Level : API 16 > Klik Finish


Maka akan Tampil IDE Android Studio, setelah itu Buka dan ubah script string.xml menjadi seperti di bawah ini :

<resources>
    <string name="app_name">ImplisitIntents</string>
    <string name="edittext_url">https://07nenengevi.blogspot.com</string>
    <string name="button_url">Open Website</string>
    <string name="edittext_loc">Stikom-Poltek Cirebon.com</string>
    <string name="button_loc">Open Location</string>
    <string name="edittext_share">Belajar Android</string>
    <string name="button_share">Share This Text</string>

</resources>

Setelah itu Buka dan ubah script activity_main.xml menjadi seperti di bawah ini

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margim"
    android:paddingLeft="@dimen/activity_horizontal_margim"
    android:paddingRight="@dimen/activity_horizontal_margim"
    android:paddingTop="@dimen/activity_vertical_margim"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/website_edittext"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/button_url"/>

    <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/edittext_loc"/>

    <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: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>

Selanjutnya Buka dan ubah script AndroidManifest.xml untuk mendaftarkan 
komponen Intent filter menjadi seperti dibawah ini

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.implisitintents">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        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>

Buat file dimens.xml di dalam folder Res/Values lalu ketikan script nya seperti 
dibawah ini
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="activity_horizontal_margim">16dp</dimen>
    <dimen name="activity_vertical_margim">16dp</dimen>
</resources>

Selanjutnya ubah script MainActivity.java menjadi seperti di bawah ini

package com.example.implisitintents;

import android.content.Intent;
import android.os.Bundle;
import android.net.Uri;
import android.util.Log;
import android.view.View;
import android.widget.EditText;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ShareCompat;

public class MainActivity extends AppCompatActivity {

    private EditText mWwebsiteEditText;
    private EditText mLocationEditText;
    private EditText mShareTextEditText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mWwebsiteEditText = (EditText) findViewById(R.id.website_edittext);
        mLocationEditText = (EditText) findViewById(R.id.location_edittext);
        mShareTextEditText = (EditText) findViewById(R.id.share_edittext);
    }

    public void openWebsite(View view) {
        String url = mWwebsiteEditText.getText().toString();
        Uri webpage = Uri.parse(url);
        Intent intent = new Intent(Intent.ACTION_VIEW,webpage);
        if (intent.resolveActivity(getPackageManager()) != null) {
            startActivity(intent);
        } else {
            Log.d("ImplicitIntents", "Can't handle this intent");
        }
    }

    public void openLocation(View view) {
        String loc = mLocationEditText.getText().toString();
        Uri addressUri = Uri.parse("geo:0,0?q="+loc);
        Intent intent = new Intent(Intent.ACTION_VIEW,addressUri);
        if (intent.resolveActivity(getPackageManager())!=null) {
            startActivity(intent);
        } else {
            Log.d("ImplicitIntents", "Can't handle this intents!");
        }

    }
    public void shareText(View view) {
        String loc = mShareTextEditText.getText().toString();
        String mimeType = "text/plain";
        ShareCompat.IntentBuilder
                .from(this)
                .setType(mimeType)
                .setChooserTitle("Share this text with:")
                .setText("txt")
                .startChooser();
    }
}

Lalu coba jalankan menggunakan emulator yang tersedia di Android Studio Anda, maka akan tampil seperti gabar dibawah ini


Ketika kita tekan tombol OPEN WEBSITE maka akan tampil web browser seperti 
gambar di bawah ini



Ketika kita tekan tombol SHARE THIS TEXT maka akan tampil pilihan Apps yang dapat melakukan share dalam system default android seperti gambar di bawah ini

Tidak ada komentar:

Posting Komentar

BAB 13 CRUD Database MySQL dengan PHP Pada Apk Android Studio

CRUD adalah singkatan dari create, read, update, and delete. Akronim CRUD mengidentifikasi semua fungsi utama yang melekat pada database re...