2011-02-16 18 views
14

मैं एक सैमसंग गैलेक्सी टैब के साथ एक समस्या को सामना करना पड़ रहा हूँ। मैं मशाल के रूप में कैमरा फ्लैश का उपयोग करना चाहता हूँ।कैमरा फ्लैश का उपयोग कैसे करें/सैमसंग गैलेक्सी टैब पर मशाल के रूप में नेतृत्व किया जाए?

किसी को भी इसे सक्षम करना पता है?

इसके द्वारा एक कोड सक्षम करने के लिए/एक एचटीसी डिजायर पर कैमरा फ्लैश को निष्क्रिय काम करता है लेकिन सैमसंग गैलेक्सी टैब पर विफल रहता है कि।

FlashLight.java:

package com.example.FlashLight; 

import android.app.Activity; 
import android.hardware.Camera; 
import android.hardware.Camera.Parameters; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 

public class FlashLight extends Activity { 
    private final static String LOG_TAG = "FlashLight"; 

    private Button mOnBtn; 
    private Button mOffBtn; 

    private Camera mCamera; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     mOnBtn = (Button) findViewById(R.id.on_btn); 
     mOnBtn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       processOnClick(); 
      } 
     }); 

     mOffBtn = (Button) findViewById(R.id.off_btn); 
     mOffBtn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       processOffClick(); 
      } 
     }); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     try{ 
      mCamera = Camera.open(); 
     } catch(Exception e){ 
      Log.e(LOG_TAG, "Impossible d'ouvrir la camera"); 
     } 
    } 

    @Override 
    protected void onPause() { 
     if(mCamera != null){ 
      mCamera.release(); 
      mCamera = null; 
     } 
     super.onPause(); 
    } 

    private void processOffClick(){ 
     if(mCamera != null){ 
      Parameters params = mCamera.getParameters(); 
      params.setFlashMode(Parameters.FLASH_MODE_OFF); 
      mCamera.setParameters(params); 
     } 
    } 

    private void processOnClick(){ 
     if(mCamera != null){ 
      Parameters params = mCamera.getParameters(); 
      params.setFlashMode(Parameters.FLASH_MODE_TORCH); 
      mCamera.setParameters(params); 
     } 
    } 
} 

AndroidManifest.xml:

<application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:name=".FlashLight" 
        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> 

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

ला yout/main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <Button 
     android:id="@+id/on_btn" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Flash ON" /> 

    <Button 
     android:id="@+id/off_btn" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Flash OFF" /> 
</LinearLayout> 

धन्यवाद!

+1

इसके अलावा, मैं एक टैग के रूप में "फ्लैश" को हटा दूंगा क्योंकि यह रनटाइम पर्यावरण फ्लैश के साथ भ्रमित कर रहा है। –

+0

धन्यवाद willytate, मैं "एलईडी" – Sly

+0

@TeddyBearFr द्वारा "फ्लैश" को प्रतिस्थापित करता हूं, मैंने अपने एचटीसी वाइल्डफायर ए 3333 में अपना कोड आजमाया है, यह फ्लैश लाइट ऑन और ऑफ के साथ ठीक काम कर रहा है, लेकिन उसी कोड एंड्रॉइड सैमसंग गैलेक्सी ऐस एस- 5830 मोबाइल दोनों डिवाइसों में काम करने का अधिकार करने का कोई विचार है। आपके उत्तर के लिए – Herry

उत्तर

22

आप कुछ गलत नहीं कर रहे हैं। वास्तव में, आप सबकुछ सही कर रहे हैं। आप एक डिवाइस-विशिष्ट समस्या का सामना कर रहे हैं जो एंड्रॉइड दुनिया में बहुत प्रचलित है। मैं FLASH_MODE_TORCH निम्नलिखित व्यवहारिक प्रतिरूप पाया है:
सभी मामलों

  • काम करता है ठीक है, लेकिन नहीं
  • पर ऑटोफोकस के साथ में

    • वर्क्स ठीक सभी

    पर Frustratingly काम नहीं करता, getSupportedFlashModes() लगभग हर डिवाइस पर FLASH_MODE_TORCH लौट जब केवल एक मुट्ठी भर वास्तव में यह समर्थन करेंगे।

    इसके अलावा, कुछ डिवाइस कार्यान्वयन समर्थित फ्लैश मोड धूर्तता। आप Camera.Parameters के माध्यम से जाना है, तो आप FLASH_MODE_ON, FLASH_MODE_AUTO या FLASH_MODE_RED_EYE के लिए फ्लैश मोड सेट करने का प्रयास और देखें कि क्या उनमें से किसी को काम कर सकते हैं। नोट - यह एक डिवाइस-विशिष्ट हैक है।

    मैं DroidX और नेक्सस एस वे एक उपकरण-विशिष्ट मुद्दे के रूप में इसे बंद कर दिया के बारे में गूगल के साथ these types of bugs दर्ज किया है। मैं एक ड्राइवर या फर्मवेयर सुधार के लिए उम्मीद में सैमसंग को यह रिपोर्ट करने के लिए कहेंगे, लेकिन उनके Android सहायता चैनल do not exist

  • +0

    टैंक त्रुटि 454। getSupportedFlashModes() गैलेक्सी टैब पर "चालू", "बंद", "ऑटो" और "मशाल" मान देता है लेकिन उनमें से कोई भी कैमरा एलईडी सक्षम करने के लिए काम नहीं करता है। मैं एंड्रॉइड बाजार से "टिनी फ्लैशलाइट + एलईडी" नामक एक मुफ्त एप्लिकेशन डाउनलोड करता हूं और निकोले अनानीव द्वारा जारी किया जाता है। यह एक गैलेक्सी टैब के साथ काम करता है! हालांकि, मुझे नहीं पता कि उसने कैसे किया ... – Sly

    +0

    कभी-कभी, पैरामीटर को सीधे सेट करना एक हैक के रूप में काम करेगा। तो * params.setFlashMode (पैरामीटर। FLASH_MODE_TORCH) * के बजाय * आप * params.set ("फ्लैश-मोड", "मशाल") आज़मा सकते हैं * "मशाल" को "चालू" या "ऑटो" के साथ बदलने का प्रयास करें। –

    +1

    टेडीबीयरएफआर - क्या आपको पता चला कि params.set() सुझाव काम करता है या नहीं? मेरे पास एक कैमरा ऐप है जहां एक उपयोगकर्ता ने गैलेक्सी टैब पर इस सटीक मुद्दे की सूचना दी है, लेकिन मुझे ऐसा डिवाइस नहीं है, इसलिए मैं इसका परीक्षण नहीं कर सकता। धन्यवाद। – hrstrand

    7

    मुझे एक समय लगा, लेकिन मुझे लगता है कि आप एक startPreview() वहाँ खो रहे हैं।

    अपने Camera.open() करने के बाद और पैरामीटर सेट करने के बाद, mCamera.startPreview() करें। यह ट्रिक काम आना चाहिए।

    +3

    जुप, मैं इसकी पुष्टि कर सकता हूं। – nisc

    2

    यह कैसे मैं यह काम कर दिया है।

    if (Build.MODEL.equals("GT-P1000")) { 
    
          Log.d(FlashlightActivity.TAG, "This is Samsung Galaxy Tab."); 
    
          params.setFlashMode(Parameters.FLASH_MODE_ON); 
          camera.setParameters(params); 
          camera.startPreview(); 
          camera.autoFocus(new AutoFocusCallback() { 
           public void onAutoFocus(boolean success, Camera camera) { 
           } 
          }); 
    
          isLEDturnedOn = true; 
          Log.d(FlashlightActivity.TAG, "LED turned ON."); 
    
    } 
    
    2

    इस प्रकार मैं एलजी नेक्सस 4 और सैमसंग गैलेक्सी ऐस 2 में मशाल चालू करता हूं।

    public void changeTorch() { 
          try { 
           camera = Camera.open(); 
           // try to open the camera to turn on the torch 
           Camera.Parameters param = camera.getParameters(); 
           param.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 
           camera.setParameters(param); 
           camera.startPreview(); // needed for some devices 
           Log.v("BSW torch", "Torch ON"); 
          } catch (Exception e) { 
           // if open camera fails, try to release camera 
           Log.w("BSW torch", "Camera is being used trying to turn Torch OFF"); 
           try { 
            camera.release(); 
           } catch (Exception ex) { 
            Log.e("BSF torch", "Error releasing camera"); 
           } 
          } 
         } 
    
    +0

    यह मेरे नेक्सस 4 पर काम करता है – hB0