Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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_Button_Flashlight - Fatal编程技术网

Java 带频闪的手电筒:频闪不’;不要关掉

Java 带频闪的手电筒:频闪不’;不要关掉,java,android,button,flashlight,Java,Android,Button,Flashlight,我正在尝试创建一个带有频闪效果的手电筒应用程序。我的目标是用Btn开关打开/关闭手电筒,用seekbar增加频闪频率。如果seekbar值为0且开关Btn打开,则手电筒应打开(无任何闪光灯)。但现在,如果seekbar值为0,它仍在闪烁(选通效应开启)。你知道我怎样才能改变吗? 以下是一些我认为很重要的代码(我真的找不到保持stobe效果不变的部分: @Override protected void onCreate(Bundle savedInstanceState) { super.

我正在尝试创建一个带有频闪效果的手电筒应用程序。我的目标是用Btn开关打开/关闭手电筒,用seekbar增加频闪频率。如果seekbar值为0且开关Btn打开,则手电筒应打开(无任何闪光灯)。但现在,如果seekbar值为0,它仍在闪烁(选通效应开启)。你知道我怎样才能改变吗? 以下是一些我认为很重要的代码(我真的找不到保持stobe效果不变的部分:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mySwitch = (Switch) findViewById(R.id.mySwitch);

    //listener to check changes in state
    mySwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            turnOnOff(isChecked);
        }
    });
    skBar = (SeekBar) findViewById(R.id.seekBar);
    skBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            freq = progress;
        }
        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
        }
        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
        }
    });
}
@Override
protected void onResume() {
    super.onResume();
    try {
        cam = Camera.open();
        camParams = cam.getParameters();
        cam.startPreview();
        hasCam = true;
    }catch(Exception e){
    }
}
private void turnOnOff(boolean on){
    if(on) {
        if(freq != 0){
            sr = new StroboRunner();

            t = new Thread(sr);
            t.start();
            return;
        }else{
            camParams.setFlashMode(Parameters.FLASH_MODE_TORCH);
        }
    }else if(!on){
        if(t != null){
            sr.stopRunning = true;
            t =null;
            return;
        }else{
            camParams.setFlashMode(Parameters.FLASH_MODE_OFF);
        }
    }
    cam.setParameters(camParams);
    cam.startPreview();
}
private class StroboRunner implements Runnable {

    boolean stopRunning = false;
    @Override
    public void run() {
        Camera.Parameters paramsOn = cam.getParameters();
        Camera.Parameters paramsOff = camParams;
        paramsOn.setFlashMode(Parameters.FLASH_MODE_TORCH);
        paramsOff.setFlashMode(Parameters.FLASH_MODE_OFF);
        try {
            while (!stopRunning) {
                cam.setParameters(paramsOn);
                cam.startPreview();
                Thread.sleep(100 - freq);
                cam.setParameters(paramsOff);
                cam.startPreview();
                Thread.sleep(100 - freq);

            }
        }catch(Exception e){
            }
        }
    }

}

我要说的是,这可能是个坏主意。我可以看出这缩短了LED的寿命。@Carcigenicate为什么不好?谷歌Playstore上有很多带有频闪效应的手电筒应用程序。请仔细检查你的
sr.stopRunning=true
是否正常工作