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

एंड्रॉइड में कोटलिन का उपयोग करके फ्लैशलाइट को प्रोग्रामेटिकली कैसे चालू/बंद करें?

एंड्रॉइड में Camera2 API के साथ फ्लैशलाइट नियंत्रण

यह उदाहरण दर्शाता है कि आधुनिक Camera2 API का उपयोग करके डिवाइस के कैमरा फ्लैश (टॉर्च) को प्रोग्रामेटिकली कैसे चालू/बंद किया जाए।

चरण 1: नया प्रोजेक्ट बनाएं

एंड्रॉइड स्टूडियो में File → New Project चुनें।

चरण 2: लेआउट (activity_main.xml)

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    tools:context=".MainActivity"> 
    
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="50dp"
        android:text="Tutorials Point"
        android:textAlignment="center"
        android:textColor="@android:color/holo_green_dark"
        android:textSize="32sp"
        android:textStyle="bold" /> 
    
    <ImageView
        android:id="@+id/imageViewFlashlight"
        android:layout_width="120dp"
        android:layout_height="120dp"
        android:layout_centerInParent="true"
        android:src="@android:drawable/btn_star"
        android:contentDescription="फ्लैशलाइट आइकन"
        tools:src="@android:drawable/btn_star" /> 
    
    <ToggleButton
        android:id="@+id/toggleFlashlight"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/imageViewFlashlight"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="30dp"
        android:textOff="फ्लैशलाइट चालू करें"
        android:textOn="फ्लैशलाइट बंद करें"
        android:checked="false" /> 
        
    <TextView
        android:id="@+id/textViewStatus"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/toggleFlashlight"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="16dp"
        android:text="स्थिति: अज्ञात"
        android:textSize="16sp" /> 
        
</RelativeLayout>

चरण 3: MainActivity.kt

import android.content.Context
import android.content.pm.PackageManager
import android.hardware.camera2.CameraAccessException
import android.hardware.camera2.CameraManager
import android.os.Build
import android.os.Bundle
import android.widget.CompoundButton
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import android.widget.ToggleButton
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat

class MainActivity : AppCompatActivity() {
    private lateinit var cameraManager: CameraManager
    private var cameraId: String = ""
    private lateinit var toggleButton: ToggleButton
    private lateinit var imageView: ImageView
    private lateinit var textViewStatus: TextView
    private var isFlashOn = false
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        title = "KotlinApp"
        
        // UI तत्व
        toggleButton = findViewById(R.id.toggleFlashlight)
        imageView = findViewById(R.id.imageViewFlashlight)
        textViewStatus = findViewById(R.id.textViewStatus)
        
        // फ्लैश उपलब्धता जांचें
        val hasFlash = packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)
        val hasCamera = packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA)
        
        if (!hasFlash || !hasCamera) {
            showNoFlashError()
            return
        }
        
        // CameraManager प्राप्त करें
        cameraManager = getSystemService(Context.CAMERA_SERVICE) as CameraManager
        
        // पहला कैमरा ID प्राप्त करें (आमतौर पर बैक कैमरा)
        try {
            cameraId = cameraManager.cameraIdList.firstOrNull() ?: ""
            if (cameraId.isEmpty()) {
                showNoFlashError()
                return
            }
        } catch (e: CameraAccessException) {
            e.printStackTrace()
            showNoFlashError()
            return
        }
        
        // टॉगल बटन लिस्टनर
        toggleButton.setOnCheckedChangeListener { _, isChecked ->
            toggleFlashlight(isChecked)
        }
        
        // प्रारंभिक स्थिति अपडेट
        updateUI(false)
    }
    
    private fun toggleFlashlight(turnOn: Boolean) {
        try {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                // Android 6.0+ (API 23) - setTorchMode का उपयोग करें
                cameraManager.setTorchMode(cameraId, turnOn)
                isFlashOn = turnOn
                updateUI(turnOn)
            } else {
                // पुराने API के लिए फॉलबैक (कम विश्वसनीय)
                Toast.makeText(this, "इस संस्करण पर फ्लैशलाइट समर्थित नहीं", Toast.LENGTH_SHORT).show()
                toggleButton.isChecked = false
            }
        } catch (e: CameraAccessException) {
            e.printStackTrace()
            Toast.makeText(this, "फ्लैशलाइट त्रुटि: ${e.message}", Toast.LENGTH_SHORT).show()
            toggleButton.isChecked = false
            updateUI(false)
        } catch (e: Exception) {
            e.printStackTrace()
            Toast.makeText(this, "अप्रत्याशित त्रुटि: ${e.message}", Toast.LENGTH_SHORT).show()
            toggleButton.isChecked = false
            updateUI(false)
        }
    }
    
    private fun updateUI(isOn: Boolean) {
        isFlashOn = isOn
        val statusText = if (isOn) "चालू" else "बंद"
        val iconRes = if (isOn) android.R.drawable.btn_star_big_on else android.R.drawable.btn_star_big_off
        
        textViewStatus.text = "स्थिति: $statusText"
        imageView.setImageResource(iconRes)
    }
    
    private fun showNoFlashError() {
        AlertDialog.Builder(this)
            .setTitle("फ्लैश उपलब्ध नहीं")
            .setMessage("इस डिवाइस में कैमरा फ्लैश नहीं है।")
            .setPositiveButton("OK") { _, _ -> finish() }
            .setCancelable(false)
            .show()
        
        toggleButton.isEnabled = false
        toggleButton.alpha = 0.5f
    }
    
    override fun onStop() {
        super.onStop()
        // ऐप बैकग्राउंड में जाने पर फ्लैशलाइट बंद करें
        if (isFlashOn) {
            try {
                cameraManager.setTorchMode(cameraId, false)
            } catch (e: Exception) {
                e.printStackTrace()
            }
        }
    }
}

चरण 4: AndroidManifest.xml (अनुमतियां और फीचर)

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="https://schemas.android.com/apk/res/android" 
    package="com.example.flashlight"> 
    
    <!-- कैमरा अनुमति (फ्लैशलाइट के लिए आवश्यक) -->
    <uses-permission android:name="android.permission.CAMERA" />
    
    <!-- फ्लैश फीचर घोषित करें (Play Store फ़िल्टरिंग के लिए) -->
    <uses-feature 
        android:name="android.hardware.camera.flash" 
        android:required="false" /> 
    <uses-feature 
        android:name="android.hardware.camera" 
        android:required="false" />
    <uses-feature 
        android:name="android.hardware.camera.autofocus" 
        android:required="false" />
    
    <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>

रनटाइम अनुमति अनुरोध (Android 6.0+):

import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.result.ActivityResultLauncher

class MainActivity : AppCompatActivity() {
    // आधुनिक अनुमति अनुरोध API
    private val requestCameraPermission = registerForActivityResult(
        ActivityResultContracts.RequestPermission()
    ) { granted ->
        if (granted) {
            initializeCamera()
        } else {
            showPermissionDeniedDialog()
        }
    }
    
    private fun checkAndRequestPermission() {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) 
            != PackageManager.PERMISSION_GRANTED) {
            requestCameraPermission.launch(Manifest.permission.CAMERA)
        } else {
            initializeCamera()
        }
    }
    
    private fun showPermissionDeniedDialog() {
        AlertDialog.Builder(this)
            .setTitle("अनुमति आवश्यक")
            .setMessage("फ्लैशलाइट के लिए कैमरा अनुमति आवश्यक है। सेटिंग्स से अनुमति दें।")
            .setPositiveButton("सेटिंग्स खोलें") { _, _ ->
                val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply {
                    data = Uri.fromParts("package", packageName, null)
                }
                startActivity(intent)
            }
            .setNegativeButton("रद्द") { _, _ -> finish() }
            .show()
    }
}

महत्वपूर्ण नोट्स:

  • FEATURE_CAMERA_FLASH: `FEATURE_CAMERA_FRONT` नहीं - मूल कोड में बग था
  • setTorchMode: API 23+ के लिए उपलब्ध, सीधे टॉर्च मोड नियंत्रित करता है
  • onStop में बंद करें: ऐप बैकग्राउंड में जाने पर फ्लैशलाइट बंद करें
  • रियल डिवाइस पर टेस्ट करें: एमुलेटर में फ्लैशलाइट काम नहीं करता
  • कैमरा ID: `cameraIdList[0]` आमतौर पर बैक कैमरा होता है जिसमें फ्लैश होता है

सामान्य समस्याएं:

  1. Android में प्रोग्रामेटिकली फ्लैशलाइट (टॉर्च) कैसे चालू/बंद करें? Android में प्रोग्रामेटिकली फ्लैशलाइट (टॉर्च) कैसे चालू/बंद करें?

    Android Camera2 API का उपयोग करके फ्लैशलाइट कंट्रोल करना ToggleButton के साथ कैमरा फ्लैश को टॉर्च की तरह चालू/बंद करने का आधुनिक तरीका (Camera2 API)। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project। चरण 2: लेआउट में ToggleButton res/layout/activity_main.xml: <?xml version=1.0 e

  1. Android में बटन क्लिक पर WiFi प्रोग्रामेटिकली ऑन/ऑफ कैसे करें? Android में बटन क्लिक पर WiFi प्रोग्रामेटिकली ऑन/ऑफ कैसे करें?

    Android में WifiManager से WiFi टॉगल करना (बटन ऑनक्लिक) दो बटनों (On/Off) का उपयोग करके WiFi चालू/बंद करने का सरल उदाहरण। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project। चरण 2: लेआउट में दो बटन res/layout/activity_main.xml: <?xml version=1.0 encoding=utf-8?> <LinearLayou

  1. - Kotlin का उपयोग करके Android पर प्रोग्रामेटिक रूप से Wi-Fi नेटवर्क से कैसे कनेक्ट करें?

    परिचय यह उदाहरण दर्शाता है कि Kotlin का उपयोग करके Android पर प्रोग्रामेटिक रूप से Wi-Fi नेटवर्क से कैसे कनेक्ट किया जाए। चरण 1: नया प्रोजेक्ट बनाएं Android Studio खोलें, File → New Project पर जाएं और आवश्यक विवरण भरकर एक नया प्रोजेक्ट बनाएं। चरण 2: activity_main.xml लेआउट जोड़ें res/layout/activi

© कॉपीराइट https://in.wsxdn.com सर्वाधिकार सुरक्षित
समस्यासमाधान
फ्लैशलाइट चालू नहीं होतीकैमरा अनुमति जांचें, रियल डिवाइस पर टेस्ट करें
अन्य ऐप द्वारा उपयोग में`CameraAccessException` पकड़ें, उपयोगकर्ता को सूचित करें
बैकग्राउंड में बंद हो जाती है`onStop()` में बंद करना सामान्य व्यवहार है
UI फ्रीजकैमरा ऑपरेशन मुख्य थ्रेड पर ब्लॉक कर सकते हैं