एंड्रॉइड में कैमरा इंटेंट का उपयोग करके फोटो कैप्चर करना
यह गाइड दर्शाता है कि डिवाइस के कैमरा ऐप को लॉन्च करके फोटो कैसे लें और परिणाम को ImageView में प्रदर्शित करें।
आवश्यक अनुमतियाँ
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- API 28 तक -->
लेआउट (activity_main.xml)
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center_horizontal"
android:padding="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="नीचे बटन पर क्लिक करके कैमरा से फोटो लें" />
<ImageView
android:id="@+id/imageView"
android:layout_width="300dp"
android:layout_height="400dp"
android:layout_marginTop="16dp"
android:scaleType="centerCrop"
android:src="@drawable/placeholder_image" />
<Button
android:id="@+id/btnCaptureImage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="इमेज कैप्चर करें" />
</LinearLayout>
MainActivity.java - मॉडर्न दृष्टिकोण (FileProvider के साथ)
import android.content.ContentValues;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.MediaStore;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
public class MainActivity extends AppCompatActivity {
private static final int CAMERA_PERMISSION_CODE = 1000;
private static final int IMAGE_CAPTURE_CODE = 1001;
private ImageView imageView;
private Button captureBtn;
private Uri imageUri;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = findViewById(R.id.imageView);
captureBtn = findViewById(R.id.btnCaptureImage);
captureBtn.setOnClickListener(v -> checkCameraPermission());
}
private void checkCameraPermission() {
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA)
== PackageManager.PERMISSION_GRANTED) {
openCamera();
} else {
ActivityCompat.requestPermissions(this,
new String[]{android.Manifest.permission.CAMERA},
CAMERA_PERMISSION_CODE);
}
}
private void openCamera() {
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, "नई तस्वीर");
values.put(MediaStore.Images.Media.DESCRIPTION, "कैमरा से");
imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(cameraIntent, IMAGE_CAPTURE_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, "कैमरा अनुमति अस्वीकृत", Toast.LENGTH_SHORT).show();
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == IMAGE_CAPTURE_CODE && resultCode == RESULT_OK) {
imageView.setImageURI(imageUri);
}
}
}
महत्वपूर्ण नोट्स
- एंड्रॉइड 10+ (API 29+) के लिए
WRITE_EXTERNAL_STORAGEकी आवश्यकता नहीं है जब MediaStore का उपयोग कर रहे हों - FileProvider का उपयोग Uri एक्सपोज़र से बचने के लिए करें (उपरोक्त कोड MediaStore का उपयोग करता है जो सुरक्षित है)
- बड़े इमेज के लिए इन-सैंपलिंग का उपयोग करके OutOfMemoryError से बचें
- कैमरा इंटेंट सभी डिवाइस पर उपलब्ध नहीं हो सकता - जांचें
resolveActivity()
उन्नत: CameraX लाइब्रेरी (अनुशंसित)
नए प्रोजेक्ट्स के लिए, Jetpack CameraX लाइब्रेरी का उपयोग करें जो बेहतर API और डिवाइस संगतता प्रदान करती है:
dependencies {
implementation "androidx.camera:camera-core:1.3.0"
implementation "androidx.camera:camera-camera2:1.3.0"
implementation "androidx.camera:camera-view:1.3.0"
}