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


240

मैं एंड्रॉइड में प्रोग्रामेटिक रूप से फ्रंट फ्लैश लाइट (कैमरा पूर्वावलोकन के साथ नहीं) चालू करना चाहता हूं। मैंने इसके लिए गुगली की लेकिन मुझे जो मदद मिली, उसने मुझे इस पेज पर भेजा

क्या किसी के पास कोई लिंक या नमूना कोड है?

जवाबों:


405

इस समस्या के लिए आपको चाहिए:

  1. जांचें कि टॉर्च उपलब्ध है या नहीं?

  2. यदि ऐसा है तो चालू / बंद करें

  3. यदि नहीं, तो आप अपनी ऐप की जरूरतों के अनुसार, जो भी कर सकते हैं, करें।

डिवाइस में फ्लैश की उपलब्धता की जाँच के लिए :

आप निम्नलिखित का उपयोग कर सकते हैं:

 context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);

अगर एक फ्लैश उपलब्ध है, तो सच वापस आ जाएगा, अगर नहीं।

अधिक जानकारी के लिए देखें:
http://developer.android.com/reference/android/content/pm/PackageManager.html

टॉर्च चालू / बंद करने के लिए:

मैं बाहर चला गया और यह android.permission.FLASHLIGHT के बारे में मिला। Android मैनिफ़ेस्ट की अनुमति आशाजनक लगती है:

 <!-- Allows access to the flashlight -->
 <permission android:name="android.permission.FLASHLIGHT"
             android:permissionGroup="android.permission-group.HARDWARE_CONTROLS"
             android:protectionLevel="normal"
             android:label="@string/permlab_flashlight"
             android:description="@string/permdesc_flashlight" />

फिर कैमरा का उपयोग करें और Camera.Parameters सेट करें । यहां उपयोग किया जाने वाला मुख्य पैरामीटर FLASH_MODE_TORCH है

जैसे।

कैमरा टॉर्च चालू करने के लिए कोड स्निपेट।

Camera cam = Camera.open();     
Parameters p = cam.getParameters();
p.setFlashMode(Parameters.FLASH_MODE_TORCH);
cam.setParameters(p);
cam.startPreview();

कोड स्निपेट कैमरा बंद प्रकाश का नेतृत्व करने के लिए।

  cam.stopPreview();
  cam.release();

मुझे सिर्फ एक प्रोजेक्ट मिला है जो इस अनुमति का उपयोग करता है। त्वरित-सेटिंग 'src कोड की जाँच करें। यहाँ http://code.google.com/p/quick-settings/ (नोट: यह लिंक अब टूट गया है)

टॉर्च के लिए सीधे http://code.google.com/p/quick-settings/source/browse/trunk/quick-settings/#quick-settings/src/com/bwx/bequick-flashlight (नोट: यह लिंक है) देखें अब टूट गया)

Update6 आप भी इस जवाब में वर्णित के रूप में एक SurfaceView जोड़ने के लिए कोशिश कर सकते क्या एपीआई द्वारा गैलेक्सी नेक्सस चलाया पर एलईडी टॉर्च? यह एक समाधान प्रतीत होता है जो कई फोन पर काम करता है।

अद्यतन 5 प्रमुख अद्यतन

मुझे एक वैकल्पिक लिंक मिला है (ऊपर दिए गए टूटे हुए लिंक के लिए): http://www.java2s.com/Open-Source/Android/Tools/quick-settings/com.bwx.bequick.flashlight.htm अब आप इसका उपयोग कर सकते हैं संपर्क। [अपडेट: 14/9/2012 यह लिंक अब टूट गया है]

अपडेट १

एक और OpenSource कोड: http://code.google.com/p/torch/source/browse/

अपडेट २

उदाहरण दिखा रहा है कि मोटोरोला Droid पर एलईडी को कैसे सक्षम किया जाए: http://code.google.com/p/droidled/

एक और खुला स्रोत कोड:

http://code.google.com/p/covedesigndev/
http://code.google.com/p/search-light/

अपडेट 3 (कैमरा चालू / बंद करने के लिए विजेट)

यदि आप एक ऐसा विजेट विकसित करना चाहते हैं जो आपके कैमरे को चालू / बंद करता है, तो आपको Android में कैमरा टॉर्च चालू / बंद करने के लिए मेरे उत्तर का संदर्भ देना होगा ।

अद्यतन ४

यदि आप कैमरा एलईडी से निकलने वाली प्रकाश की तीव्रता को सेट करना चाहते हैं, तो क्या आप उल्लेख कर सकते हैं कि क्या मैं एंड्रॉइड डिवाइस की एलईडी तीव्रता को बदल सकता हूं? पूरी पोस्ट। ध्यान दें कि केवल निहित HTC डिवाइस इस सुविधा का समर्थन करते हैं।

** मुद्दे:**

ऑन / ऑफ टॉर्च चालू करते समय कुछ समस्याएं भी हैं। जैसे। उपकरणों के होने FLASH_MODE_TORCHया न होने पर भी, तो टॉर्च चालू नहीं होती है आदि।

आमतौर पर सैमसंग बहुत सारी समस्याएं पैदा करता है।

आप नीचे दी गई सूची में समस्याओं का उल्लेख कर सकते हैं:

Android में कैमरा टॉर्च का उपयोग करें

सैमसंग गैलेक्सी ऐस 2.2.1 और गैलेक्सी टैब में कैमरा एलईडी / फ्लैश लाइट चालू करें


2
आपकी मदद के लिए धन्यवाद, यह मेरे लिए काम करता है! - मैं बस इंटरफ़ेस टॉर्च और वर्ग HtcLedFlashlight की नकल की तो मैं सच / गलत HtcLedFlashlight और कि यह के साथ setOn विधि कहते हैं। --- इंटरफ़ेस-फ़्लैशलाइट code.google.com/p/quick-settings/source/browse/trunk/... - कक्षा-HtcLedFlashlight code.google.com/p/quick-settings/source/browse/trunk/...
saiket

1
@saiket: स्वागत है .. यदि आपकी समस्या हल हो गई है तो इस उत्तर को हल के रूप में चिह्नित करें। ताकि यह दूसरों के लिए उपयोगी हो सके ..
कार्तिक डोमडिया

1
@PolamReddyRajaReddy: मुझे लगता है कि आप सैमसंग डिवाइस में परीक्षण कर रहे हैं। क्या मैं सही हूँ ?
कार्तिक डोमडिया

7
अनुमतियों के लिए, मैनिफ़ेस्ट फ़ाइल में सही कोड है: `<उपयोग-अनुमति एंड्रॉइड: नाम =" android.permission.CAMERA "/> <उपयोग-अनुमति एंड्रॉइड: नाम =" android.permission.FLASHLIGHT "/>`
ixeft

1
यह भी उपयोग करें: - camera.release ();
चेतन

37

API 23 या उच्चतर में (Android M, 6.0)

कोड चालू करें

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    CameraManager camManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
    String cameraId = null; 
    try {
        cameraId = camManager.getCameraIdList()[0];
        camManager.setTorchMode(cameraId, true);   //Turn ON
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }
}

कोड बंद करें

camManager.setTorchMode(cameraId, false);

और अनुमतियाँ

<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.FLASHLIGHT"/>

अतिरिक्त EDIT

लोग अभी भी मेरे उत्तर को गलत ठहरा रहे हैं, इसलिए मैंने अतिरिक्त कोड पोस्ट करने का फैसला किया। यह समस्या का समाधान दिन में वापस करने के लिए था:

public class FlashlightProvider {

private static final String TAG = FlashlightProvider.class.getSimpleName();
private Camera mCamera;
private Camera.Parameters parameters;
private CameraManager camManager;
private Context context;

public FlashlightProvider(Context context) {
    this.context = context;
}

private void turnFlashlightOn() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        try {
            camManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
            String cameraId = null; 
            if (camManager != null) {
                cameraId = camManager.getCameraIdList()[0];
                camManager.setTorchMode(cameraId, true);
            }
        } catch (CameraAccessException e) {
            Log.e(TAG, e.toString());
        }
    } else {
        mCamera = Camera.open();
        parameters = mCamera.getParameters();
        parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
        mCamera.setParameters(parameters);
        mCamera.startPreview();
    }
}

private void turnFlashlightOff() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        try {
            String cameraId;
            camManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
            if (camManager != null) {
                cameraId = camManager.getCameraIdList()[0]; // Usually front camera is at 0 position.
                camManager.setTorchMode(cameraId, false);
            }
        } catch (CameraAccessException e) {
            e.printStackTrace();
        }
    } else {
        mCamera = Camera.open();
        parameters = mCamera.getParameters();
        parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
        mCamera.setParameters(parameters);
        mCamera.stopPreview();
    }
}
}

2
"आमतौर पर फ्रंट कैमरा 0 स्थिति पर है" से आपका क्या अभिप्राय है? मैं कैसे जाँच कर सकता हूँ जो सामने है और जो नहीं है? BTW, फ्रंट फेसिंग कैमरा वह है जो वर्तमान उपयोगकर्ता को निर्देशित किया जाता है। बैक फेसिंग कैमरा वह है जिसमें शायद हमेशा फ्लैश होता है। और अगर फ्लैश चालू या बंद है तो मैं कैसे जांच सकता हूं?
Android डेवलपर

बूलियन b = getPackageManager ()। hasSystemFeature (PackageManager.FEATURE_CAMERA_FLASH); फ्लैश स्टेटस का यह रिटर्न बूलियन मूल्य
अहमद मोहम्मद

35

मेरे अनुभव से, यदि आपका एप्लिकेशन पोर्ट्रेट और लैंडस्केप ओरिएंटेशन दोनों में काम करने के लिए डिज़ाइन किया गया है, तो आपको वेरिएबल camको स्टेटिक घोषित करने की आवश्यकता है । अन्यथा, onDestroy()जिसे स्विचिंग ओरिएंटेशन कहा जाता है, उसे नष्ट कर देता है, लेकिन कैमरा रिलीज़ नहीं करता है, इसलिए इसे फिर से खोलना संभव नहीं है।

package com.example.flashlight;

import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.os.Bundle;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends Activity {

public static Camera cam = null;// has to be static, otherwise onDestroy() destroys it

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

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

public void flashLightOn(View view) {

    try {
        if (getPackageManager().hasSystemFeature(
                PackageManager.FEATURE_CAMERA_FLASH)) {
            cam = Camera.open();
            Parameters p = cam.getParameters();
            p.setFlashMode(Parameters.FLASH_MODE_TORCH);
            cam.setParameters(p);
            cam.startPreview();
        }
    } catch (Exception e) {
        e.printStackTrace();
        Toast.makeText(getBaseContext(), "Exception flashLightOn()",
                Toast.LENGTH_SHORT).show();
    }
}

public void flashLightOff(View view) {
    try {
        if (getPackageManager().hasSystemFeature(
                PackageManager.FEATURE_CAMERA_FLASH)) {
            cam.stopPreview();
            cam.release();
            cam = null;
        }
    } catch (Exception e) {
        e.printStackTrace();
        Toast.makeText(getBaseContext(), "Exception flashLightOff",
                Toast.LENGTH_SHORT).show();
    }
}
}

प्रकट करने के लिए मुझे यह लाइन लगानी पड़ी

    <uses-permission android:name="android.permission.CAMERA" />

से http://developer.android.com/reference/android/hardware/Camera.html

ऊपर सुझाई गई लाइनें मेरे लिए काम नहीं कर रही थीं।


यदि कैमरा बंद है, तो आपको सिस्टम सुविधा की जांच करने की आवश्यकता नहीं है। यदि कैम! = अशक्त है, तो इसे चालू किया गया
ग्रेग एननिस

1
मेरे लिए सबसे उपयोगी हिस्सा थाyou need to declare the variable cam as static
एलेक्स जोलीग

जब Cameraकक्षा में AndroidStudio ध्यान देने के लिए कक्षा का आयात करें android.hardware...
AN

13

मुझे ऑटोफ्लैश लाइट सिंपल थ्री स्टेप्स के साथ मिली।

  • मैंने सिर्फ Manifest.xml फ़ाइल में कैमरा और फ्लैश की अनुमति जोड़ी है
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />

<uses-permission android:name="android.permission.FLASHLIGHT"/>
<uses-feature android:name="android.hardware.camera.flash" android:required="false" />
  • अपने कैमरा कोड में इस तरह से करते हैं।

    //Open Camera
    Camera  mCamera = Camera.open(); 
    
    //Get Camera Params for customisation
    Camera.Parameters parameters = mCamera.getParameters();
    
    //Check Whether device supports AutoFlash, If you YES then set AutoFlash
    List<String> flashModes = parameters.getSupportedFlashModes();
    if (flashModes.contains(android.hardware.Camera.Parameters.FLASH_MODE_AUTO))
    {
         parameters.setFlashMode(Parameters.FLASH_MODE_AUTO);
    }
    mCamera.setParameters(parameters);
    mCamera.startPreview();
    
  • बिल्ड + रन -> अब डिम लाइट एरिया और स्नैप फोटो पर जाएं, अगर डिवाइस सपोर्ट करता है तो आपको ऑटो फ्लैश लाइट मिलनी चाहिए।


9

एंड्रॉइड लॉलीपॉप ने कैमरा 2 एपीआई पेश किया और पिछले कैमरा एपीआई को हटा दिया। हालाँकि, फ़्लैश चालू करने के लिए पदावनत एपीआई का उपयोग करना अभी भी काम करता है और नए एपीआई का उपयोग करने की तुलना में बहुत सरल है।

ऐसा लगता है कि नई एपीआई समर्पित पूर्ण विशेषताओं वाले कैमरा ऐप में उपयोग के लिए है और इसके आर्किटेक्ट वास्तव में टॉर्च का उपयोग करने जैसे सरल उपयोग के मामलों पर विचार नहीं करते हैं। अब ऐसा करने के लिए, एक CameraManager को प्राप्त करना है, डमी सरफेस के साथ कैप्चर सेशन बनाना है, और अंत में कैप्चरप्रिसेस्ट बनाना और शुरू करना है। अपवाद हैंडलिंग, संसाधन सफाई और लंबी कॉलबैक शामिल!

लॉलीपॉप और नए पर टॉर्च को कैसे चालू किया जाए, यह देखने के लिए , AOSP प्रोजेक्ट में FlashlightController पर एक नज़र डालें (पुराने उपयोग किए गए एपीआई के रूप में नए को खोजने की कोशिश करें जो संशोधित किए गए हैं)। आवश्यक अनुमतियाँ सेट करना न भूलें।


Android मार्शमैलो ने आखिरकार setTorchMode के साथ फ्लैश चालू करने का एक सरल तरीका पेश किया ।


1
पुराना android.hardware.Camera API पहले की तरह कार्य करता रहता है, इसलिए टॉर्च के लिए Android.hardware.camera2 का उपयोग करने के लिए आपको कोई मौलिक कारण नहीं चाहिए। यह संभव है कि आप कैमरा 2 के साथ बिजली की खपत और सीपीयू लोड को कम कर सकते हैं, हालांकि, टॉर्च को सक्षम करने के लिए आपको एक सक्रिय पूर्वावलोकन रखने की आवश्यकता नहीं है।
एडी तलवाला

मैंने दो लॉलीपॉप उपकरणों पर सरल कार्यान्वयन में से एक की कोशिश की है और यह फ्लैश पर चालू नहीं हुआ, भले ही यह कई प्री-लॉलीपॉप डिवाइसों पर काम किया हो, जिन पर मैंने इसे आजमाया है। शायद वह लॉलीपॉप में सिर्फ एक बग है। यदि पुरानी विधियां अभी भी आपके लिए काम करती हैं और यदि आप जावा
प्यूरिस्ट नहीं हैं

मेरे पास वर्तमान में लॉलीपॉप के साथ नेक्सस 5 है और यह पूरी तरह से काम करता है। मेरे पास स्वयं के द्वारा बनाए गए एप्लिकेशन का भी काम है और इन विधियों के साथ कार्यान्वित किया जाता है। मामले में कोई भी इसे आजमाना चाहता है। मैंने प्ले स्टोर के लिए एक लिंक डाला: play.google.com/store/apps/details?id=com.fadad.linterna महत्वपूर्ण बात यह है कि कैमरा फ्लैश या अनुमतियों को चलाने से पहले सक्रिय या अक्षम है।
फेरदिडो 19

माफ कीजिएगा यह मेरी गलती है। जब मैं पुराने एपीआई के साथ फ्लैश चालू करने की कोशिश कर रहा था तो एक और ऐप शायद कैमरे का उपयोग कर रहा था। मैंने जवाब अपडेट कर दिया है।
लुकासिको

8

विभिन्न एंड्रॉइड संस्करणों में कैमरा फ्लैश तक पहुंचने के विभिन्न तरीके हैं। कुछ एपीआई ने लॉलीपॉप में काम करना बंद कर दिया और फिर इसे मार्शमैलो में फिर से बदल दिया गया। इसे दूर करने के लिए, मैंने एक साधारण पुस्तकालय बनाया है जिसका उपयोग मैं अपनी कुछ परियोजनाओं में कर रहा हूं और यह अच्छे परिणाम दे रहा है। यह अभी भी अधूरा है, लेकिन आप कोड की जांच करने और लापता टुकड़ों को खोजने की कोशिश कर सकते हैं। यहाँ लिंक है - NoobCameraFlash

यदि आप अपने कोड में एकीकृत करना चाहते हैं, तो आप इसके लिए ग्रेडेल का उपयोग कर सकते हैं। यहां निर्देश दिए गए हैं (सीधे पढ़ें से लिया गया है) -

चरण 1. अपनी बिल्ड फ़ाइल में JitPack रिपॉजिटरी जोड़ें। इसे अपने मूल build.gradle में रिपॉजिटरी के अंत में जोड़ें:

allprojects {
        repositories {
            ...
            maven { url "https://jitpack.io" }
        }
}

चरण 2. निर्भरता जोड़ें

dependencies {
        compile 'com.github.Abhi347:NoobCameraFlash:0.0.1'
  }

प्रयोग

NoobCameraManagerसिंगलटन को इनिशियलाइज़ करें ।

NoobCameraManager.getInstance().init(this);

आप डिबग लॉगिंग के लिए लॉग स्तर को वैकल्पिक रूप से सेट कर सकते हैं। लॉगिंग लंबरजैक लाइब्रेरी का उपयोग करता है । डिफ़ॉल्ट LogLevel हैLogLevel.None

NoobCameraManager.getInstance().init(this, LogLevel.Verbose);

उसके बाद आपको बस कैमरे के फ्लैश को चालू या बंद करने के लिए सिंगलटन को कॉल करना होगा।

NoobCameraManager.getInstance().turnOnFlash();
NoobCameraManager.getInstance().turnOffFlash();

NoobCameraManager को इनिशियलाइज़ करने से पहले आपको कैमरा को एक्सेस करने के लिए रनटाइम परमिशन का ध्यान रखना होगा। संस्करण 0.1.2 या पूर्व में हम लाइब्रेरी से सीधे अनुमतियों के लिए समर्थन प्रदान करते थे, लेकिन गतिविधि ऑब्जेक्ट पर निर्भरता के कारण, हमें इसे निकालना होगा।

फ़्लैश को भी टॉगल करना आसान है

if(NoobCameraManager.getInstance().isFlashOn()){
    NoobCameraManager.getInstance().turnOffFlash();
}else{
    NoobCameraManager.getInstance().turnOnFlash();
}

कृपया गतिविधि के बजाय संदर्भ का उपयोग करने के लिए समर्थन जोड़ें। धन्यवाद!
वजिरा लसंथा

@VajiraLasantha अनुमति लेने के लिए गतिविधि ऑब्जेक्ट आवश्यक है। मैं किसी तरह अनुमतियों को अलग करके आवश्यकता को पूरी तरह से हटाने की योजना बना रहा था। इसे यहां ट्रैक किया गया है - github.com/Abhi347/NoobCameraFlash/issues/3 इस बीच, यदि आप चाहें तो आवश्यकता को हटाने के लिए आप कोड को संशोधित कर सकते हैं। मुझे इस पर काम करने के लिए कुछ समय चाहिए।
नोब

हाँ मैंने वो देखा। मैंने पहले ही अनुमति सामग्री को हटाकर संदर्भ के साथ काम करने के लिए आपके परिवाद को बदल दिया है। क्योंकि मेरा ऐप पहले से ही अनुमति मान्य करता है। कृपया मुझे बताएं कि आपने कब एक उचित कार्यान्वयन जारी किया जो संदर्भ का समर्थन करता है। धन्यवाद!
वजिरा लसंथा

You have to take care of the runtime permissions to access Camera yourself, before initializing the NoobCameraManager. In version 0.1.2 or earlier we used to provide support for permissions directly from the library, but due to dependency on the Activity object, we have to remove it.
प्रतीक बुटानी

क्या होगा अगर डिवाइस पर कई फ्लैश हैं? कुछ में सामने की तरफ कैमरा है ...
एंड्रॉइड डेवलपर

7

Android टॉर्च ऐप के लिए पूरा कोड

प्रकट

  <?xml version="1.0" encoding="utf-8"?>
  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.user.flashlight"
      android:versionCode="1"
      android:versionName="1.0">

      <uses-sdk
          android:minSdkVersion="8"
          android:targetSdkVersion="17"/>

      <uses-permission android:name="android.permission.CAMERA" />
      <uses-feature android:name="android.hardware.camera"/>

      <application
          android:allowBackup="true"
          android:icon="@mipmap/ic_launcher"
          android:label="@string/app_name"
          android:theme="@style/AppTheme" >
          <activity
              android:name=".MainActivity"
              android:label="@string/app_name" >
              <intent-filter>
                  <action android:name="android.intent.action.MAIN" />

                  <category android:name="android.intent.category.LAUNCHER" />
              </intent-filter>
          </activity>
      </application>

  </manifest>

एक्सएमएल

<RelativeLayout 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:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="OFF"
        android:id="@+id/button"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:onClick="turnFlashOnOrOff" />
</RelativeLayout>

MainActivity.java

  import android.app.AlertDialog;
  import android.content.DialogInterface;
  import android.content.pm.PackageManager;
  import android.hardware.Camera;
  import android.hardware.Camera.Parameters;
  import android.support.v7.app.AppCompatActivity;
  import android.os.Bundle;
  import android.view.View;
  import android.widget.Button;

  import java.security.Policy;

  public class MainActivity extends AppCompatActivity {

      Button button;
      private Camera camera;
      private boolean isFlashOn;
      private boolean hasFlash;
      Parameters params;

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

          button = (Button) findViewById(R.id.button);

          hasFlash = getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);

          if(!hasFlash) {

              AlertDialog alert = new AlertDialog.Builder(MainActivity.this).create();
              alert.setTitle("Error");
              alert.setMessage("Sorry, your device doesn't support flash light!");
              alert.setButton("OK", new DialogInterface.OnClickListener() {
                  @Override
                  public void onClick(DialogInterface dialog, int which) {
                      finish();
                  }
              });
              alert.show();
              return;
          }

          getCamera();

          button.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {

                  if (isFlashOn) {
                      turnOffFlash();
                      button.setText("ON");
                  } else {
                      turnOnFlash();
                      button.setText("OFF");
                  }

              }
          });
      }

      private void getCamera() {

          if (camera == null) {
              try {
                  camera = Camera.open();
                  params = camera.getParameters();
              }catch (Exception e) {

              }
          }

      }

      private void turnOnFlash() {

          if(!isFlashOn) {
              if(camera == null || params == null) {
                  return;
              }

              params = camera.getParameters();
              params.setFlashMode(Parameters.FLASH_MODE_TORCH);
              camera.setParameters(params);
              camera.startPreview();
              isFlashOn = true;
          }

      }

      private void turnOffFlash() {

              if (isFlashOn) {
                  if (camera == null || params == null) {
                      return;
                  }

                  params = camera.getParameters();
                  params.setFlashMode(Parameters.FLASH_MODE_OFF);
                  camera.setParameters(params);
                  camera.stopPreview();
                  isFlashOn = false;
              }
      }

      @Override
      protected void onDestroy() {
          super.onDestroy();
      }

      @Override
      protected void onPause() {
          super.onPause();

          // on pause turn off the flash
          turnOffFlash();
      }

      @Override
      protected void onRestart() {
          super.onRestart();
      }

      @Override
      protected void onResume() {
          super.onResume();

          // on resume turn on the flash
          if(hasFlash)
              turnOnFlash();
      }

      @Override
      protected void onStart() {
          super.onStart();

          // on starting the app get the camera params
          getCamera();
      }

      @Override
      protected void onStop() {
          super.onStop();

          // on stop release the camera
          if (camera != null) {
              camera.release();
              camera = null;
          }
      }

  }

यदि फ्लैश आपके उदाहरण को शुरू करने से पहले ही चालू है, तो फ्लैश बंद करने की कोशिश करने से काम नहीं चलेगा ... क्या आपके पास उस मुद्दे का समाधान है?
तैफुन

0

मैंने सरफेस व्यू का उपयोग करके टुकड़ों के माध्यम से अपने फ़ंक्शन में इस फ़ंक्शन को लागू किया है। इस स्टैकओवरफ्लो प्रश्न और उसके उत्तर का लिंक यहां पाया जा सकता है

उम्मीद है की यह मदद करेगा :)


0

मार्शमैलो और इसके बाद के संस्करण में, CameraManager का `setTorchMode () 'उत्तर प्रतीत होता है। यह मेरे लिए काम करता है:

 final CameraManager mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
 CameraManager.TorchCallback torchCallback = new CameraManager.TorchCallback() {
     @Override
     public void onTorchModeUnavailable(String cameraId) {
         super.onTorchModeUnavailable(cameraId);
     }

     @Override
     public void onTorchModeChanged(String cameraId, boolean enabled) {
         super.onTorchModeChanged(cameraId, enabled);
         boolean currentTorchState = enabled;
         try {
             mCameraManager.setTorchMode(cameraId, !currentTorchState);
         } catch (CameraAccessException e){}



     }
 };

 mCameraManager.registerTorchCallback(torchCallback, null);//fires onTorchModeChanged upon register
 mCameraManager.unregisterTorchCallback(torchCallback);

0

इसे इस्तेमाल करे।

CameraManager camManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
    String cameraId = null; // Usually front camera is at 0 position.
    try {
        cameraId = camManager.getCameraIdList()[0];
        camManager.setTorchMode(cameraId, true);
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }

-3

फ्लैश बंद करने के लिए आप निम्न कोड का भी उपयोग कर सकते हैं।

Camera.Parameters params = mCamera.getParameters()
p.setFlashMode(Parameters.FLASH_MODE_OFF);
mCamera.setParameters(params);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.