Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我的手电筒第一次工作,第二次强制关闭_Java_Android - Fatal编程技术网

Java 我的手电筒第一次工作,第二次强制关闭

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

我有一个torch类,当我使用
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将我的答案与你的答案结合起来:)不,这不困扰我,我只是很高兴有人这么做了:请接受答案?(我想这对你有用)你能接受这个答案吗?(我想这对你有用)