我有一个火炬课,当我使用ledon()
我的手电筒开启时。
当我使用ledoff()
时,它会关闭。 但是如果我再次尝试重新开启它,我会收紧力量。
然后,如果我尝试,它会再次打开。
部队关闭的原因是什么?
import android.hardware.Camera;
import android.util.Log;
import static android.hardware.Camera.*;
/**
* Created by tyler on 8/13/13.
*/
public class Torch {
private static final String TAG = "Light";
private static Camera mCamera;
private static Camera.Parameters mParameters;
public static Camera getCameraInstance() {
Camera c = null;
try {
c = open();
} catch (Exception e) {
}
return c;
}
public static void ledon()
{
mCamera = getCameraInstance();
mParameters = mCamera.getParameters();
mParameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
mCamera.setParameters(mParameters);
Log.d(TAG, "Turn On");
}
public static void ledoff(MainActivity activity) {
String flashMode = mParameters.getFlashMode();
if (Camera.Parameters.FLASH_MODE_OFF.equals(flashMode)) {
mCamera = getCameraInstance();
}
mParameters = mCamera.getParameters();
mParameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
mCamera.setParameters(mParameters);
Log.d(TAG, "Turn Off");
}
}
编辑:这是我更新的代码,它会关闭并打开我想要的所有代码,但是当我打开然后再打开时,它会强制关闭。 Logcat下面的代码。
import android.hardware.Camera;
import android.util.Log;
/**
* Created by tyler on 8/13/13.
*/
public class Torch {
private static final String TAG = "Light";
private static Camera mCamera;
private static Camera.Parameters mParameters;
public static Camera getCameraInstance() {
Camera c = null;
try {
c = mCamera.open();
} catch (Exception e) {
}
return c;
}
public static void ledon() {
mCamera = getCameraInstance();
mParameters = mCamera.getParameters();
String flashMode = mParameters.getFlashMode();
if (! flashMode.equals(Camera.Parameters.FLASH_MODE_TORCH)) {
mParameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
mCamera.setParameters(mParameters);
Log.d(TAG, "Turn On");
}
}
public static void ledoff() {
String flashMode = mParameters.getFlashMode();
if (! flashMode.equals(Camera.Parameters.FLASH_MODE_OFF)) {
mParameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
mCamera.setParameters(mParameters);
mCamera.release();
Log.d(TAG, "Turn Off");
}
}
}
logcat的:
08-15 12:01:10.502 25951-25951 / com.tyler.myapp W / dalvikvm:threadid = 1:线程退出,未捕获异常(group = 0x4170f898) 08-15 12:01:10.522 25951-25951 / com.tyler.myapp E / AndroidRuntime:FATAL EXCEPTION:main 显示java.lang.NullPointerException 在com.tyler.myapp.Torch.ledon(Torch.java:28)
答案 0 :(得分:3)
我不确定,因为我没有检查它,但我认为因为你正在更新ledOff中的mParameters。
尝试这种方法
public static void ledSwitch() {
mCamera = getCameraInstance();
mParameters = mCamera.getParameters();
String flashMode = mParameters.getFlashMode();
if (Camera.Parameters.FLASH_MODE_OFF.equals(flashMode)) {
mParameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
Log.d(TAG, "Turn On");
} else {
mCamera.release()
mParameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
Log.d(TAG, "Turn Off");
}
}
这种方法会检查它是否会关闭,如果它关闭则会启用它。
我从Levente Kurusa那里拿走了.release():D
已更新 -
尝试这个,作为HTC用户,我在阅读时使用不同的相机方式,所以我在网上搜索了你。
public static Camera mCameraDevice;
private static List<String> flashModes;
private static String currentFlashMode;
Camera.Parameters param = mCameraDevice.getParameters();
flashModes = param.getSupportedFlashModes();
if (flashModes != null) {
currentFlashMode = param.getFlashMode();
if (currentFlashMode.equals(Parameters.FLASH_MODE_OFF)) {
currentFlashMode = Parameters.FLASH_MODE_ON;
}
else {
currentFlashMode = Parameters.FLASH_MODE_OFF;
}
param.setFlashMode(currentFlashMode);
mCameraDevice.setParameters(param);
}
&安培;&安培;不要忘记使用这些权限
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
答案 1 :(得分:3)
没有你的logcat,没有人可以确定你的问题是什么,但我怀疑是什么。调用ledon
后,您应该调用mCamera.release()
告诉Android系统您不再使用相机。如果你不打电话,在下次调用ledon
时,你会尝试分配一个新的Camera
对象,但是一个应用程序使用id = 0的Camera,这是你的应用程序,因此它会抛出一个RuntimeException
。你抓住它,然后将mCamera
设置为null
,然后再引用mCamera
,因此我怀疑是NullPointerException
。