Mengirim Dan Menerima Intent

Cara Mengirim dan Menerima Intent Dengan Android Studio

Mengirim dan menerima intent dengan menggunakan Android Studio sebenarnya cukup mudah, yaitu cukup dengan membuat beberapa permission pada AndroidManifest dan membuat fungsi untuk menerima intent di AndroidManifest. Kunci utama dari Mengirim dan Menerima Intent adalah pada AndroidManifest! Tanpa lama – lama lagi ini adalah cara mengirim dan menerima Intent dengan Android Studio.

Mengirim Dan Menerima Intent

Mengirim Dan Menerima Intent ( Source Image : luckytruedev.com )

Mengirim Dan Menerima Intent

Kali ini AksaraKode akan membuat aplikasi mengirim dan menerima intent dengan keterangan sebagai berikut :

Mengirim Intent :

  • Telepon
  • SMS
  • Browser
  • Email
  • Kalender
  • Maps

Menerima Intent :

  • Text
  • Gambar

Konfigurasi AndroidManifest.xml

Sebelum melakukan membuat aplikasi untuk mengirim dan menerima intent, kita tuliskan dulu beberapa akses yang akan kita perlukan seperti kalender / telepon / sms. Berikut ini adalah code dari AndroidManifes.xml :

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

    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.READ_CALENDAR" />
    <uses-permission android:name="android.permission.WRITE_CALENDAR" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

    <application
        android:allowBackup="true"
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:roundIcon="@drawable/icon"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".aboutme" />
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

        </activity>

        <activity android:name=".IntentReceived">

        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="image/*" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="text/plain" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.SEND_MULTIPLE" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="image/*" />
        </intent-filter>
        </activity>

    </application>



</manifest>

Berikut ini penjelasannya :

Kita akan meminta beberapa akses pada telepon seperti Telepon / SMS / Calender. Lalu pada activity IntentReceived kita akan menerima intent jika MIME / Content-Type dari yang dikirim merupakan image / text.

Membuat Layout

Sebelum kita membuat code untuk mengirim dan menerima intent, kita buat dahulu tampilan atau layout dari aplikasi tersebut. Sederhana saja, kita tambahkan beberapa TextView, dan EditText, Beberapa button. AksaraKode menggunakan 2 Layout XML dan 2 Java File Code, karena akan membuat aplikasi sederhana saja.

activity_main.xml akan dipergunakan sebagai pengirim intent. Berikut ini code xmlnya :

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:background="@drawable/background"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/numberToSend"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="@android:string/emptyPhoneNumber"
        android:importantForAutofill="no"
        android:inputType="phone"
        android:text="@string/_62"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.489"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.078" />

    <ImageButton
        android:id="@+id/callButton"
        android:layout_width="64dp"
        android:layout_height="68dp"
        android:background="@drawable/phone"
        android:contentDescription="@string/todo"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.288"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/numberToSend"
        app:layout_constraintVertical_bias="0.046" />

    <ImageButton
        android:id="@+id/smsButton"
        android:layout_width="64dp"
        android:layout_height="68dp"
        android:background="@drawable/sms"
        android:contentDescription="@string/todo"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.448"
        app:layout_constraintStart_toEndOf="@+id/callButton"
        app:layout_constraintTop_toBottomOf="@+id/numberToSend"
        app:layout_constraintVertical_bias="0.046" />

    <EditText
        android:id="@+id/websiteText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="@string/personalwebsite"
        android:importantForAutofill="no"
        android:inputType="textPersonName"
        android:text="@string/https_apapedulimu_click"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.505"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/callButton"
        app:layout_constraintVertical_bias="0.022" />

    <ImageButton
        android:id="@+id/websiteButton"
        android:layout_width="83dp"
        android:layout_height="82dp"
        android:background="@drawable/chrome"
        android:contentDescription="@string/todo"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.496"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/websiteText"
        app:layout_constraintVertical_bias="0.037" />

    <EditText
        android:id="@+id/textText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:ems="10"
        android:hint="@string/tempatmu"
        android:importantForAutofill="no"
        android:inputType="textPersonName"
        android:text="@string/stmik_yadika_bangil"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/websiteButton" />

    <ImageButton
        android:id="@+id/emailButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:contentDescription="@string/todo"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.242"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textText"
        app:srcCompat="@android:drawable/ic_dialog_email" />

    <ImageButton
        android:id="@+id/mapsButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="20dp"
        android:layout_marginTop="15dp"
        android:layout_marginEnd="20dp"
        android:contentDescription="@string/maps"
        app:layout_constraintEnd_toStartOf="@+id/calenderButton"
        app:layout_constraintStart_toEndOf="@+id/emailButton"
        app:layout_constraintTop_toBottomOf="@+id/textText"
        app:srcCompat="@android:drawable/ic_dialog_map" />

    <ImageButton
        android:id="@+id/calenderButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="104dp"
        android:layout_marginTop="15dp"
        android:contentDescription="@string/calender"
        app:layout_constraintStart_toEndOf="@+id/emailButton"
        app:layout_constraintTop_toBottomOf="@+id/textText"
        app:srcCompat="@android:drawable/ic_menu_my_calendar" />

    <ImageButton
        android:id="@+id/infoButton"
        android:onClick="info"
        android:layout_width="64dp"
        android:layout_height="68dp"
        android:layout_marginTop="75dp"
        android:layout_marginEnd="75dp"
        android:background="@drawable/aboutme"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="@+id/calenderButton"
        app:layout_constraintHorizontal_bias="1.0"
        app:layout_constraintStart_toStartOf="@+id/emailButton"
        app:layout_constraintTop_toTopOf="@+id/mapsButton"
        app:layout_constraintVertical_bias="0.083" />

</androidx.constraintlayout.widget.ConstraintLayout>

Lalu setelah itu kita membuat layout untuk menerima intentnya. Untuk menerima intent kita hanya membutuhkan 2 elemen yaitu TextView dan ImageView, karena kita hanya akan menerima intent tersebut.

activity_intent_received.xml : 

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".IntentReceived">

    <TextView
        android:id="@+id/sentText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="50dp"
        android:layout_marginEnd="50dp"
        android:text="@string/hello_world"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <ImageView
        android:id="@+id/sentImage"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/sentText"
        android:layout_centerHorizontal="true"
        app:layout_constraintStart_toStartOf="parent"
        tools:layout_editor_absoluteY="211dp"></ImageView>
</androidx.constraintlayout.widget.ConstraintLayout>

Mengirim Dan Menerima Intent Pada Android Studio

Menuliskan Code Java

Lalu kita akan menuliskan code java untuk mengirim atau menerima intent, sangat simpel karena kita hanya akan menerima inputan pada button lalu kita akan meneruskannya. Berikut ini adalah Code Javanya :

MainActivity.java berguna untuk handling pengiriman intent :

package com.arbukstudio.serbaguna;

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

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.provider.CalendarContract;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;

import java.util.GregorianCalendar;

public class MainActivity extends AppCompatActivity {

    private EditText numberToSend, websiteText, textText;

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

        ImageButton callButton = findViewById(R.id.callButton);
        ImageButton smsButton = findViewById(R.id.smsButton);
        ImageButton websiteButton = findViewById(R.id.websiteButton);
        ImageButton emailButton = findViewById(R.id.emailButton);
        ImageButton mapsButton = findViewById(R.id.mapsButton);
        ImageButton calenderButton = findViewById(R.id.calenderButton);



        numberToSend = findViewById(R.id.numberToSend);

        callButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String phone = numberToSend.getText().toString();
                Intent callIntent = new Intent(Intent.ACTION_CALL);
                callIntent.setData(Uri.parse("tel:" + phone));
                if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
                    Toast.makeText(getApplicationContext(),"aplikasi belum di izinkan oleh sistem!", Toast.LENGTH_SHORT).show();
                    return;
                }
                startActivity(callIntent);
            }
        });

        smsButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String phone = numberToSend.getText().toString();
                Intent sendIntent = new Intent(Intent.ACTION_VIEW);
                sendIntent.setData(Uri.parse("sms:"+phone));
                sendIntent.putExtra("sms_body", "saya dari gojek");
                startActivity(sendIntent);
            }
        });

        websiteText = findViewById(R.id.websiteText);

        websiteButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String website = websiteText.getText().toString();
                Intent openWebsite = new Intent(Intent.ACTION_VIEW);
                openWebsite.setData(Uri.parse(website));
                startActivity(openWebsite);

            }
        });

        textText = findViewById(R.id.textText);

        emailButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent email = new Intent(Intent.ACTION_SEND);
                String tempat = textText.getText().toString();
                email.putExtra(Intent.EXTRA_EMAIL, new String[]{ "systempatched@gmail.com"});
                email.putExtra(Intent.EXTRA_SUBJECT, "Jemput saya di ");
                email.putExtra(Intent.EXTRA_TEXT, tempat);

                email.setType("message/rfc822");

                startActivity(Intent.createChooser(email, "Choose an Email client :"));
            }
        });

        mapsButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String tempat = textText.getText().toString();
                Intent maps = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("google.navigation:q="+tempat));
                startActivity(maps);
            }
        });

        calenderButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String tempatEvent = textText.getText().toString();
                Intent intent = new Intent(Intent.ACTION_INSERT);
                intent.setType("vnd.android.cursor.item/event");
                intent.putExtra(CalendarContract.Events.TITLE, "Pengumpulan Tugas Android ");
                intent.putExtra(CalendarContract.Events.EVENT_LOCATION, tempatEvent);
                intent.putExtra(CalendarContract.Events.DESCRIPTION, "Pengumpulan berbentuk video karena adanya virus covid19");

                GregorianCalendar calDate = new GregorianCalendar(2020, 03, 20);
                intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME,
                        calDate.getTimeInMillis());
                intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME,
                        calDate.getTimeInMillis());
                intent.putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, true);
                intent.putExtra(CalendarContract.Events.ACCESS_LEVEL, CalendarContract.Events.ACCESS_PRIVATE);
                intent.putExtra(CalendarContract.Events.AVAILABILITY, CalendarContract.Events.AVAILABILITY_BUSY);
                startActivity(intent);
            }
        });
    }

    public void info(View view) {
        Intent profile = new Intent(MainActivity.this, aboutme.class);
        startActivity(profile);
    }
}

Kalau kita amati ini cuma menambahkan listener pada button lalu melakukan eksekusi terhadap intent yang dipilih. IntentReceived.java akan berguna untuk menerima intent yang dikirim berupa text atau image. Berikut ini adalah codenya :

package com.arbukstudio.serbaguna;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class IntentReceived extends AppCompatActivity {

    private ImageView picView;

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

        Intent intent = getIntent();
        String action = intent.getAction();
        String type = intent.getType();

        if (Intent.ACTION_SEND.equals(action) && type != null) {
            if ("text/plain".equals(type)) {
                handleSendText(intent);
            } else if (type.startsWith("image/")) {
                handleSendImage(intent);
            }
        }

    }

    private void handleSendText(Intent intent) {
        String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
        TextView sentText = findViewById(R.id.sentText);

        if (sharedText != null) {
            sentText.setText(sharedText);
        }
    }

    private void handleSendImage(Intent intent) {
        Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
        ImageView picView = findViewById(R.id.sentImage);

        if (imageUri != null) {
            picView.setImageURI(imageUri);
        } else {

            Toast.makeText(this, "Error occured, URI is invalid", Toast.LENGTH_LONG).show();

        }
    }
}

Dan, begitulah hasilnya! jika ingin menerima Intent, pergi ke Image / Text lalu Pilih Bagikan, maka akan tampil aplikasi yang telah kamu buat, seperti ini :

Menerima Intent pada Opsi “Bagikan”

Ya, begitulah cara dan code dalam mengirim dan menerima intent pada Android Studio, Memang sangat sederhadana baik code dan aplikasinya, semoga bermanfaat! Jika ada yang ditanyakan atau ada yang salah dalam artikel ini, bisa meninggalkan komentar ya!

Source Code dari tutorial ini bisa didapat di : https://github.com/aksarakode/Receive-and-Send-Intent-on-Java 

Leave a Reply