Langsung ke konten utama

Membuat Aplikasi Share Image Menggunakan Android Studio : Intent Implicit

 


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

Postingan populer dari blog ini

Membuat Tampilan Aplikasi Android Menggunakan Constraint Layout

 Hai Sobat Blogger... Kali ini saya akan membuat tampilan aplikasi menggunakan constraint layout dan juga menggunakan scroll view ConstraintLayout merupakan salah satu komponen penting dalam pengembangan aplikasi Android modern. Layout ini hadir sebagai solusi untuk menciptakan antarmuka pengguna yang kompleks namun tetap efisien. Berbeda dengan layout tradisional seperti RelativeLayout atau LinearLayout, ConstraintLayout memungkinkan kita untuk membangun tampilan yang responsif dengan cara yang lebih fleksibel dan terstruktur. Bayangkan ConstraintLayout seperti sebuah kanvas digital di mana setiap elemen dapat dihubungkan satu sama lain menggunakan constraint atau batasan. Misalnya, kita bisa mengatur sebuah tombol agar selalu berada di tengah layar, atau memastikan sebuah teks selalu berjarak tetap dari gambar di atasnya. Keunggulan utama ConstraintLayout adalah kemampuannya untuk menciptakan layout yang kompleks tanpa perlu menumpuk banyak layout bersarang, yang pada akhirnya me...

Tutorial Penggunaan Fragment pada Aplikasi Pendataan Penduduk Android

     Fragment adalah komponen UI yang dapat digunakan kembali dalam aplikasi Android. Mereka memungkinkan kita untuk membagi tampilan aplikasi menjadi beberapa bagian yang dapat dikelola secara independen. Dalam tutorial ini, kita akan membuat aplikasi pendataan penduduk sederhana menggunakan Fragment untuk mengelola tampilan daftar penduduk, detail penduduk, dan form input data baru. 1. Buat proyek Android baru dengan nama "Penduduk". Pastikan untuk memilih minimum SDK yang sesuai yaitu API. 17 (Android 4.2 : Jelly Bean  ) 2. Tambahkan dependensi berikut di file build.gradle (Module: app): implementation 'androidx.recyclerview:recyclerview:1.2.1' 3. Buat Layout Main Activity pada file activity_main.xml <? xml version ="1.0" encoding ="utf-8" ?> <FrameLayout xmlns: android ="http://schemas.android.com/apk/res/android" android :id ="@+id/fragment_container" android :layout_width ="match_parent" ...