2010-10-07 17 views
7

मैं एक ऐप लिखने की कोशिश कर रहा हूं जिसके लिए एलईडी फ्लैश को मशाल मोड में जाना आवश्यक है। समस्या यह है कि एंड्रॉइड 2.1 इस मोड का समर्थन नहीं करता है और इसलिए मैं अभी तक प्लेटफार्म का समर्थन नहीं कर सकता। कोई मुद्दा नहीं होगा, लेकिन मैं इसे अपने मंगेतर के लिए लिख रहा हूं और उसके एपिक 4 जी में अभी 2.1 है। मुझे कुछ कोड नमूने मिले जो कुछ अनियंत्रित एपीआई कॉल का उपयोग करते हैं और इसलिए मोटोरोला Droid और इस तरह काम करते हैं, लेकिन वे एपिक पर काम नहीं करते हैं। क्या किसी को कोड खोजने के लिए कुछ सुझाव हैं कि मुझे यह काम करने में मदद करनी चाहिए?कैमरा। पैरामीटर। FLASH_MODE_TORCH प्रतिस्थापन Android 2.1

उत्तर

9

मुझे लगता है कि मशाल मोड आमतौर पर 2.1 पर ठीक काम कर रहा है लेकिन मुझे सैमसंग एपिक के साथ एक ही समस्या थी और इसके आसपास एक हैक मिला।

सैमसंग एपिक पर चलने पर कैमरा.getParameters() द्वारा दिए गए पैराम को देखते हुए, मैंने देखा कि फ्लैश-मोड का समर्थन करने का दावा है: फ्लैश-मोड-वैल्यू = ऑफ, ऑटो, ऑटो;

मशाल-मोड सूचीबद्ध नहीं है, जिसका अर्थ है कि यह समर्थित नहीं है।

हालांकि, मुझे पता चला कि यह मॉडल अभी भी उस मोड को स्वीकार करेगा और एलईडी चालू कर देगा! बुरी खबर यह थी कि जब बाद में फ़्लैश मोड को ऑटो या ऑफ पर वापस रखा गया तो एलईडी अभी भी जलाया गया! जब तक आप कैमरा कॉल नहीं करेंगे तब तक यह बंद नहीं होगा। कृपया()।

मुझे लगता है कि सैमसंग इसे समर्थित की सूची में शामिल नहीं करता है!

तो ... विधि मैं एक CameraHelper वर्ग है में मशाल टॉगल करने के लिए का उपयोग करें ...

/*** 
* Attempts to set camera flash torch/flashlight mode on/off 
* @param isOn true = on, false = off 
* @return boolean whether or not we were able to set it 
*/ 
public boolean setFlashlight(boolean isOn) 
{ 
    if (mCamera == null) 
    { 
     return false; 
    } 
    Camera.Parameters params = mCamera.getParameters(); 
    String value; 
    if (isOn) // we are being ask to turn it on 
    { 
     value = Camera.Parameters.FLASH_MODE_TORCH; 
    } 
    else // we are being asked to turn it off 
    { 
     value = Camera.Parameters.FLASH_MODE_AUTO; 
    } 

    try{  
     params.setFlashMode(value); 
     mCamera.setParameters(params); 

     String nowMode = mCamera.getParameters().getFlashMode(); 

     if (isOn && nowMode.equals(Camera.Parameters.FLASH_MODE_TORCH)) 
     { 
      return true; 
     } 
     if (! isOn && nowMode.equals(Camera.Parameters.FLASH_MODE_AUTO)) 
     { 
      return true; 
     } 
     return false; 
    } 
    catch (Exception ex) 
    { 
     MyLog.e(mLOG_TAG, this.getClass().getSimpleName() + " error setting flash mode to: "+ value + " " + ex.toString()); 
    } 
} 

का उपयोग करने वाले इस कॉल के रूप में निम्नानुसार गतिविधियों ...

private void toggleFlashLight() 
{ 
    mIsFlashlightOn = ! mIsFlashlightOn; 

    /** 
    * hack to fix an issue where the Samsung Galaxy will turn torch on, 
    * even though it says it doesnt support torch mode, 
    * but then will NOT turn it off via this param. 
    */ 
    if (! mIsFlashlightOn && Build.MANUFACTURER.equalsIgnoreCase("Samsung")) 
    { 
     this.releaseCameraResources(); 
     this.initCamera(); 
    } 
    else 
    { 
     boolean result = mCamHelper.setFlashlight(mIsFlashlightOn); 
     if (! result) 
     { 
      alertFlashlightNotSupported(); 
     } 
    } 
} 

जादू जो इस काम को रिलीज में बनाता है कैमरा रिसोर्सेज() यह है कि यह कैमरा.release() .... और फिर मुझे सैमसंग उपकरणों के लिए अपने सभी कैमरा सामान को फिर से शुरू करना होगा।

सुंदर नहीं है लेकिन बहुत सारे उपयोगकर्ताओं के लिए काम कर रहा है।

ध्यान दें कि मेरे पास मशाल मोड की एक रिपोर्ट है जो Nexus कोड पर इस कोड के साथ बिल्कुल काम नहीं कर रही है लेकिन इसमें खोदने में सक्षम है। यह निश्चित रूप से एचटीसी ईवीओ और सैमसंग एपिक पर काम करता है।

उम्मीद है कि इससे मदद मिलती है।

+0

सुनिश्चित नहीं हैं कि काम शुरू कर दिया है, लेकिन मैं एक सेना बंद हो रही है जब मैं डिबग करने की कोशिश यह। – smccloud

+2

कोई अपराध नहीं, लेकिन फोन निर्माता पर आधारभूत कार्यक्षमता जाने का आदर्श तरीका नहीं है। कौन जानता है कि उदाहरण के लिए सैमसंग फोन की आधा साल या उससे अधिक कार्यक्षमता क्या होगी? – ajacian81

+0

मैंने आपके कोड का उपयोग किया है। लेकिन कुछ सेकंड के बाद कैमरा फ्लैशलाइट स्वचालित रूप से बंद हो रहा है। मैंने सैमसंग गैलेक्सी ऐस 2.2.1 में कोड का परीक्षण किया .. इसके लिए कारण क्या हो सकता है? –

2

Samsung डिवाइस के लिए मेरे मामले में मैं अनंत को फोकस मोड सेट करने के लिए आवश्यक है और यह अगर मैंने कुछ गलत किया था

params.setFocusMode(Camera.Parameters.FOCUS_MODE_INFINITY); 
mCamera.setParameters(params); 
mCamera.startPreview(); 
+0

संकेत के लिए बहुत बहुत धन्यवाद :) मुझे फ्लैश मोड "ऑटो" के साथ गैलेक्सी एस 5 पर काम नहीं कर रहा फ्लैश के साथ समस्या थी, इसे "इन्फिनिटी" पर सेट करने से चाल चल रही थी: पी – Kervala