Java 我的手电筒第一次工作,第二次强制关闭
我有一个torch类,当我使用Java 我的手电筒第一次工作,第二次强制关闭,java,android,Java,Android,我有一个torch类,当我使用ledon()我的手电筒打开时。 当我使用ledoff()时,它会关闭但是如果我再次尝试打开它,我会得到一个接近的力。 然后,如果我尝试,它会再次打开 部队关闭的原因是什么 import android.hardware.Camera; import android.util.Log; import static android.hardware.Camera.*; /** * Created by tyler on 8/13/13. */ public cla
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");
}
}
}
日志:
08-15 12:01:10.502 25951-25951/com.tyler.myapp W/dalvikvm:threadid=1:线程以未捕获异常退出(组=0x4170f898)
08-15 12:01:10.522 25951-25951/com.tyler.myapp E/AndroidRuntime:致命异常:main
java.lang.NullPointerException
在com.tyler.myapp.Torch.ledon(Torch.java:28)我不确定,因为我没有检查它,但我想是因为您正在更新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);
}
公共静态摄像机mCameraDevice;
私有静态列表模式;
私有静态字符串模式;
Camera.Parameters param=mCameraDevice.getParameters();
flashModes=param.getSupportedFlashModes();
如果(flashModes!=null){
currentFlashMode=param.getFlashMode();
if(currentFlashMode.equals(Parameters.FLASH\u MODE\u OFF)){
currentFlashMode=Parameters.FLASH\u MODE\u ON;
}
否则{
currentFlashMode=Parameters.FLASH\u MODE\u OFF;
}
参数setFlashMode(当前FlashMode);
mCameraDevice.setParameters(参数);
}
&&不要忘记使用这些权限
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
我不确定,因为我没有检查它,但我想是因为您正在更新指示灯中的MPA参数 试试这个方法
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);
}
公共静态摄像机mCameraDevice;
私有静态列表模式;
私有静态字符串模式;
Camera.Parameters param=mCameraDevice.getParameters();
flashModes=param.getSupportedFlashModes();
如果(flashModes!=null){
currentFlashMode=param.getFlashMode();
if(currentFlashMode.equals(Parameters.FLASH\u MODE\u OFF)){
currentFlashMode=Parameters.FLASH\u MODE\u ON;
}
否则{
currentFlashMode=Parameters.FLASH\u MODE\u OFF;
}
参数setFlashMode(当前FlashMode);
mCameraDevice.setParameters(参数);
}
&&不要忘记使用这些权限
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
没有你的日志,没有人能确定你的问题是什么,但我怀疑有什么。调用ledon
后,您应该调用mCamera.release()
告诉android系统您不再使用相机。如果不调用此函数,在下一次调用ledon
时,您尝试分配一个新的Camera
对象,但是id=0的Camera被应用程序使用,该应用程序就是您的应用程序,因此它抛出运行时异常。您捕获它,然后将mCamera
设置为null
,然后再引用mCamera
,因此出现了NullPointerException
,我怀疑这是原因。没有您的日志猫,没有人可以确定您的问题是什么,但我怀疑有什么。调用ledon
后,您应该调用mCamera.release()
告诉android系统您不再使用相机。如果不调用此函数,在下一次调用ledon
时,您尝试分配一个新的Camera
对象,但是id=0的Camera被应用程序使用,该应用程序就是您的应用程序,因此它抛出运行时异常。您捕获它,然后将mCamera
设置为null
,然后再引用mCamera
,因此出现了NullPointerException
,我怀疑这是原因。您在logcat上找到什么了吗?了解原因会有帮助。你能用open()中的代码更新你的问题吗代码>方法?Android调试的金科玉律:如果你的应用程序关闭,请发布logcat副本:)和双摄像头导入。。奇怪的事情正在发生。绝对需要一个日志猫。明天会发布日志猫,我的错。我看到了一些可能有用的答案,所以我也会更新。你有什么关于logcat的信息吗?了解原因会有帮助。你能用open()中的代码更新你的问题吗代码>方法?Android调试的金科玉律:如果你的应用程序关闭,请发布logcat副本:)和双摄像头导入。。奇怪的事情正在发生。绝对需要一个日志猫。明天会发布日志猫,我的错。我看到了一些可能有用的答案,所以我也会更新一下。很好地将我的答案与你的答案结合起来:)不,这并不困扰我,我只是很高兴有人这么做了:DNicely将我的答案与你的答案结合起来:)不,这不困扰我,我只是很高兴有人这么做了:请接受答案?(我想这对你有用)你能接受这个答案吗?(我想这对你有用)