如何在Samsung Galaxy Tab上使用相机闪光灯/ led作为手电筒?

我正面临三星Galaxy Tab的问题。 我想用相机闪光灯作为手电筒。

有谁知道如何启用它?

这里有一个代码,用于启用/禁用HTC Desire上的相机闪光灯,但在Samsung Galaxy Tab上失败。

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> 

layout / 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> 

谢谢 !

Solutions Collecting From Web of "如何在Samsung Galaxy Tab上使用相机闪光灯/ led作为手电筒?"

你没有做错什么。 事实上,你做的一切都是正确的。 您正遇到Android世界中非常普遍的设备特定问题。 我发现了FLASH_MODE_TORCH的以下行为模式:

  • 在所有情况下工作正常
  • 工作正常,但没有自动对焦
  • 根本不起作用

令人沮丧的是,getSupportedFlashModes()几乎在每一个设备上都会返回FLASH_MODE_TORCH,只有less数设备支持它。

此外,一些设备实现调整支持的闪光灯模式。 如果你通过Camera.Parameters你可以尝试设置闪光模式FLASH_MODE_ON,FLASH_MODE_AUTO或FLASH_MODE_RED_EYE,看看他们是否有任何工作。 注 – 这是一个设备特定的黑客。

我已经向Google提交了有关DroidX和Nexus S的这些types的错误 。他们将其作为设备特定的问题closures。 我想说这个报告给三星希望驱动程序或固件修复,但他们的Android支持渠道不存在 。

花了我一段时间,但我认为你错过了一个startPreview()那里。

在你完成你的Camera.open()之后,你设置参数后,做一个mCamera.startPreview() 。 这应该够了吧。

我就是这样做的。

 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."); } 

这就是我在LG Nexus 4和三星Galaxy Ace 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"); } } }