Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

एंड्रॉइड में प्रोग्रामेटिकली कैमरा से फोटो कैसे लें?

एंड्रॉइड में कैमरा इंटेंट का उपयोग करके फोटो कैप्चर करना

यह गाइड दर्शाता है कि डिवाइस के कैमरा ऐप को लॉन्च करके फोटो कैसे लें और परिणाम को 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"
}
  1. एंड्रॉइड में प्रोग्रामेटिक रूप से फोन नंबर कैसे प्राप्त करें? एंड्रॉइड में प्रोग्रामेटिक रूप से फोन नंबर कैसे प्राप्त करें?

    TelephonyManager से फोन नंबर पढ़ना (परमिशन के साथ) यह उदाहरण दर्शाता है कि TelephonyManager.getLine1Number() का उपयोग करके डिवाइस का फोन नंबर कैसे प्राप्त करें और रनटाइम परमिशन कैसे संभालें। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project चुनें। चरण 2: लेआउट में TextView res/layou

  1. Android में इनकमिंग कॉल को प्रोग्रामेटिकली कैसे उठाएं? Android में इनकमिंग कॉल को प्रोग्रामेटिकली कैसे उठाएं?

    Android में इनकमिंग कॉल प्रोग्रामेटिकली उठाना ⚠️ महत्वपूर्ण चेतावनी: Android 4.1 (API 16) से, थर्ड-पार्टी ऐप्स प्रोग्रामेटिकली कॉल नहीं उठा सकते। यह सुरक्षा प्रतिबंध है। केवल सिस्टम ऐप्स या डिफॉल्ट डायलर (CALL_PRIVILEGED परमिशन के साथ) ऐसा कर सकते हैं। इतिहास और वर्तमान स्थिति Android वर्जनकॉल उठा

  1. Android ऐप को प्रोग्रामेटिकली कैसे बंद करें? Android ऐप को प्रोग्रामेटिकली कैसे बंद करें?

    यह उदाहरण दर्शाता है कि Android ऐप को बटन क्लिक पर प्रोग्रामेटिकली कैसे बंद किया जाता है। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project। चरण 2: लेआउट XML res/layout/activity_main.xml: <?xml version=1.0 encoding=utf-8?> <RelativeLayout xmlns:android=https://schemas