Take Picture with Camera - Android Studio - Java
In this video, we will capture images with Camera using the Camera Intent. The camera will be opened after clicking the button. If an image is captured it will be set to an ImageView.
We will require the following permission:
1) CAMERA
2) WRITE_EXTERNAL STORAGE
So we will also handle Runtime Permission for OS Marshmallow and above.
>>Watch For Kotlin
>>Watch For Kotlin
VIDEO
Step 1: Create a new project OR Open your project
Step 2: Code
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.blogspot.atifsoftwares.takepicture_java"> <!--Adding Camera, Write External Storage Permission--> <uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.WRITE_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"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
activity_main.xml
<?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:gravity="center_horizontal" android:orientation="vertical" tools:context=".MainActivity"> <!--Image view in which image will be set--> <ImageView android:id="@+id/image_view" android:layout_width="400dp" android:layout_height="400dp" android:scaleType="centerCrop" android:src="@drawable/ic_image_black_24dp" /> <!--Button to capture image--> <Button android:id="@+id/capture_image_btn" style="@style/Base.Widget.AppCompat.Button.Colored" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Capture Image" /> </LinearLayout>
MainActivity.java
package com.technifysoft.myapplication; import androidx.activity.result.ActivityResult; import androidx.activity.result.ActivityResultCallback; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; import androidx.appcompat.app.AppCompatActivity; import android.Manifest; import android.app.Activity; import android.content.ContentValues; import android.content.Intent; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.provider.MediaStore; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; import java.util.Map; public class MainActivity extends AppCompatActivity { private static final String TAG = "MAIN_TAG"; private Button mCaptureBtn; private ImageView mImageView; private Uri image_uri; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mImageView = findViewById(R.id.image_view); mCaptureBtn = findViewById(R.id.capture_image_btn); //button click mCaptureBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //Camera is clicked we need to check if we have permission of Camera, Storage before launching Camera to Capture image if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { //Device version is TIRAMISU or above. We only need Camera permission String[] cameraPermissions = new String[]{android.Manifest.permission.CAMERA}; requestCameraPermissions.launch(cameraPermissions); } else { //Device version is below TIRAMISU. We need Camera & Storage permissions String[] cameraPermissions = new String[]{android.Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}; requestCameraPermissions.launch(cameraPermissions); } } }); } private ActivityResultLauncher<String[]> requestCameraPermissions = registerForActivityResult( new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback<Map<String, Boolean>>() { @Override public void onActivityResult(Map<String, Boolean> result) { Log.d(TAG, "onActivityResult: "); Log.d(TAG, "onActivityResult: " + result.toString()); //let's check if permissions are granted or not boolean areAllGranted = true; for (Boolean isGranted : result.values()) { areAllGranted = areAllGranted && isGranted; } if (areAllGranted) { //All Permissions Camera, Storage are granted, we can now launch camera to capture image pickImageCamera(); } else { //Camera or Storage or Both permissions are denied, Can't launch camera to capture image Toast.makeText(MainActivity.this, "Camera or Storage or both permissions denied...", Toast.LENGTH_SHORT).show(); } } } ); private void pickImageCamera() { Log.d(TAG, "pickImageCamera: "); //Setup Content values, MediaStore to capture high quality image using camera intent ContentValues contentValues = new ContentValues(); contentValues.put(MediaStore.Images.Media.TITLE, "TEMPORARY_IMAGE"); contentValues.put(MediaStore.Images.Media.DESCRIPTION, "TEMPORARY_IMAGE_DESCRIPTION"); //Uri of the image to be captured from camera image_uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues); //Intent to launch camera Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, image_uri); cameraActivityResultLauncher.launch(intent); } private final ActivityResultLauncher<Intent> cameraActivityResultLauncher = registerForActivityResult( new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() { @Override public void onActivityResult(ActivityResult result) { Log.d(TAG, "onActivityResult: "); //Check if image is picked or not if (result.getResultCode() == Activity.RESULT_OK) { //no need to get image uri here we will have it in pickImageCamera() function Log.d(TAG, "onActivityResult: imageUri: " + image_uri); } else { //Cancelled Toast.makeText(MainActivity.this, "Cancelled...!", Toast.LENGTH_SHORT).show(); } } } ); }
Step 3: Run Project
Comments
Post a Comment