Android Studio Examples

100+ tutorials, source code, and examples to help you develop creative and technical skills.

choose image from camera and gallery in android

main_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<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:gravity="center"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <androidx.appcompat.widget.AppCompatButton
        android:id="@+id/chooseImageBtn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:text="Choose Image" />

    <androidx.appcompat.widget.AppCompatButton
        android:id="@+id/takePhotoBtn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:text="Take Photo" />
</LinearLayout>

MainActivity.java

import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.AppCompatButton;

import java.util.List;

public class MainActivity extends AppCompatActivity {

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

        ImageView imageView = findViewById(R.id.imageView);

        AppCompatButton chooseImage = findViewById(R.id.chooseImageBtn);
        AppCompatButton takePhoto = findViewById(R.id.takePhotoBtn);

        // creating object of ImageChooser
        final ImageChooser imageChooser = new ImageChooser(this, getActivityResultRegistry());

        // add Observer to activity lifecycle
        getLifecycle().addObserver(imageChooser);

        chooseImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                imageChooser.selectImages(new ImagesSelectedListener() {
                    @Override
                    public void images(List<Bitmap> bitmaps, List<Uri> uris, int selectedImagesCount) {
                        if (selectedImagesCount > 0) {
                            imageView.setImageBitmap(bitmaps.get(0));
                        }
                    }
                });
            }
        });

        takePhoto.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                imageChooser.takeImage(new ImagesSelectedListener() {
                    @Override
                    public void images(List<Bitmap> bitmaps, List<Uri> uris, int selectedImagesCount) {
                        if (selectedImagesCount > 0) {
                            imageView.setImageBitmap(bitmaps.get(0));
                        }
                    }
                });
            }
        });
    }
}

ImageChooser.java

import android.content.Context;
import android.graphics.Bitmap;
import android.net.Uri;
import android.provider.MediaStore;

import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.ActivityResultRegistry;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.LifecycleOwner;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ImageChooser implements DefaultLifecycleObserver {

    private final ActivityResultRegistry mRegistry;
    private final Context context;
    private ActivityResultLauncher<String> chooseImage;
    private ActivityResultLauncher<Void> takeImage;
    private ImagesSelectedListener imagesSelectedListener;

    ImageChooser(Context context, @NonNull ActivityResultRegistry registry) {
        this.mRegistry = registry;
        this.context = context;
    }

    public void onCreate(@NonNull LifecycleOwner owner) {
        chooseImage = mRegistry.register("chooseImage", owner, new ActivityResultContracts.GetMultipleContents(), new ActivityResultCallback<List<Uri>>() {
            @Override
            public void onActivityResult(List<Uri> uri) {

                final List<Bitmap> bitmaps = new ArrayList<>();

                // convert uri to bitmaps
                try {
                    for (int i = 0; i < uri.size(); i++) {
                        Bitmap bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(), uri.get(i));
                        bitmaps.add(bitmap);
                    }
                    imagesSelectedListener.images(bitmaps, uri, uri.size());
                } catch (IOException exception) {
                    exception.printStackTrace();
                }
            }
        });

        takeImage = mRegistry.register("takeImage", owner, new ActivityResultContracts.TakePicturePreview(), new ActivityResultCallback<Bitmap>() {
            @Override
            public void onActivityResult(Bitmap bitmap) {
                final List<Bitmap> bitmaps = new ArrayList<>();
                bitmaps.add(bitmap);

                imagesSelectedListener.images(bitmaps, null, 1);
            }
        });
    }

    public void selectImages(ImagesSelectedListener imagesSelectedListener) {
        this.imagesSelectedListener = imagesSelectedListener;
        chooseImage.launch("image/*");
    }

    public void takeImage(ImagesSelectedListener imagesSelectedListener) {
        this.imagesSelectedListener = imagesSelectedListener;
        takeImage.launch(null);
    }
}

ImagesSelectedListener.java

import android.graphics.Bitmap;
import android.net.Uri;

import androidx.annotation.Nullable;

import java.util.List;

public interface ImagesSelectedListener {

    void images(List<Bitmap> bitmaps, @Nullable List<Uri> uris, int selectedImagesCount);
}

Projects with Source Code + Video Tutorials

You can download our Java and Android Studio Projects with Source Code and Video Tutorials.

Simple-Music-Player-App-for-Android-(Offline-Version)
Simple Music Player App for Android (Offline Version)
Programming-Quiz-App-for-Android-(Offline-Version)
Programming Quiz App for Android (Offline Version)
Online-Tic-Tac-Toe-game-Using-Firebase-Database-in-Android-Studio
Online Tic Tac Toe game Using Firebase Database in Android Studio

If you have any Questions or Queries
You can mail us at info.learnoset@gmail.com

Follow us to learn Coding and get in touch with new Technologies.