Intent implicit adalah jenis intent pada Android yang tidak secara langsung menyebutkan komponen spesifik yang akan dijalankan. Sistem Android akan mencari dan menentukan komponen yang sesuai berdasarkan intent filter yang telah didefinisikan.
sekarang kita akan mempraktekannya dengan membuat sebuah aplikasi share image. aplikasi tersebut dapat membagikan foto yang kita pilih dari penyimpanan perangkat untuk dibagikan ke aplikasi lain. misal whatsapp atau telegram.
Langkah-Langkah Membuat Aplikasi
1. Buat MainActivity.java
Tempelkan kode berikut pada MainActivity.java
package com.example.photoshare;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
private static final int CAMERA_PERMISSION_CODE = 100;
private static final int CAMERA_REQUEST_CODE = 101;
private ImageView imageView;
private Button btnCapture, btnShare;
private Bitmap photo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = findViewById(R.id.imageView);
btnCapture = findViewById(R.id.btnCapture);
btnShare = findViewById(R.id.btnShare);
btnCapture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
checkCameraPermission();
}
});
btnShare.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (photo != null) {
shareImage();
} else {
Toast.makeText(MainActivity.this, "Ambil foto terlebih dahulu", Toast.LENGTH_SHORT).show();
}
}
});
}
private void checkCameraPermission() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, CAMERA_PERMISSION_CODE);
} else {
openCamera();
}
}
private void openCamera() {
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_REQUEST_CODE);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == CAMERA_PERMISSION_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
openCamera();
} else {
Toast.makeText(this, "Izin kamera ditolak", Toast.LENGTH_SHORT).show();
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CAMERA_REQUEST_CODE && resultCode == RESULT_OK && data != null) {
photo = (Bitmap) data.getExtras().get("data");
imageView.setImageBitmap(photo);
}
}
private void shareImage() {
try {
File cachePath = new File(getCacheDir(), "images");
cachePath.mkdirs();
File imageFile = new File(cachePath, "shared_image.jpg");
FileOutputStream stream = new FileOutputStream(imageFile);
photo.compress(Bitmap.CompressFormat.JPEG, 100, stream);
stream.close();
Uri contentUri = Uri.fromFile(imageFile);
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("image/jpeg");
shareIntent.putExtra(Intent.EXTRA_STREAM, contentUri);
startActivity(Intent.createChooser(shareIntent, "Bagikan foto melalui"));
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(this, "Gagal membagikan foto", Toast.LENGTH_SHORT).show();
}
}
}
2. Buat activity_main.xml
Tempelkan kode berikut pada activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<ImageView
android:id="@+id/imageView"
android:layout_width="300dp"
android:layout_height="300dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:scaleType="centerCrop"/>
<Button
android:id="@+id/btnCapture"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="Ambil Foto" />
<Button
android:id="@+id/btnShare"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="Bagikan Foto" />
</LinearLayout>
3. Modifikasi File AndroidManifest.xml
Tempelkan kode berikut pada manifest/AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.photoshare">
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<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"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
4. Buat File Styles.xml
klik kanan pada folder res/values, lalu pilih new. beri nama styles. lalu tempelkan kode berikut
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Base application theme -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Primary brand color -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<!-- Text appearance -->
<item name="android:textViewStyle">@style/CustomTextViewStyle</item>
<item name="buttonStyle">@style/CustomButtonStyle</item>
</style>
<!-- Custom Button style -->
<style name="CustomButtonStyle" parent="Widget.AppCompat.Button">
<item name="android:background">@drawable/button_background</item>
<item name="android:textColor">@color/white</item>
<item name="android:textSize">16sp</item>
<item name="android:padding">12dp</item>
<item name="android:layout_margin">4dp</item>
</style>
<!-- Custom TextView style -->
<style name="CustomTextViewStyle" parent="Widget.AppCompat.TextView">
<item name="android:textColor">@color/black</item>
<item name="android:textSize">14sp</item>
<item name="android:padding">4dp</item>
</style>
</resources>
5. Modifikasi file colors.xml
tempelkan kode berikut pada file res/value/colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#2196F3</color>
<color name="colorPrimaryDark">#1976D2</color>
<color name="colorAccent">#FF4081</color>
<color name="white">#FFFFFF</color>
<color name="black">#000000</color>
<color name="gray">#757575</color>
<color name="light_gray">#EEEEEE</color>
</resources>
6. Buat file button_background.xml
klik kanan pada folder res/drawable, lalu pilih new. beri nama button_backgroun. lalu tempelkan kode berikut
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Pressed state -->
<item android:state_pressed="true">
<shape android:shape="rectangle">
<corners android:radius="8dp" />
<solid android:color="@color/colorPrimaryDark" />
<padding
android:bottom="8dp"
android:left="16dp"
android:right="16dp"
android:top="8dp" />
</shape>
</item>
<!-- Focused state -->
<item android:state_focused="true">
<shape android:shape="rectangle">
<corners android:radius="8dp" />
<solid android:color="@color/colorPrimaryDark" />
<padding
android:bottom="8dp"
android:left="16dp"
android:right="16dp"
android:top="8dp" />
</shape>
</item>
<!-- Default state -->
<item>
<shape android:shape="rectangle">
<corners android:radius="8dp" />
<solid android:color="@color/colorPrimary" />
<padding
android:bottom="8dp"
android:left="16dp"
android:right="16dp"
android:top="8dp" />
</shape>
</item>
</selector>
Komentar
Posting Komentar