Так что у меня действительно странная проблема, я просто не могу понять, почему она не работает. Я создаю стробоскоп как часть своего приложения и создал отдельный класс Strobelight. Когда я вызываю метод TurnOn или метод обновления, интервалы никогда не меняются. Думаю, было бы проще объяснить с помощью некоторого кода:
public class Strobelight{
private int delayOn, delayOff;
public void turnStrobeOn(){...}
public void update(int a_delayOn, int a_delayOff){
delayOn = a_delayOn;
delayOff = a_delayOff;
}
public void turnOn(int a_delayOn, int a_delayOff){
delayOn = a_delayOn;
delayOff = a_delayOff;
this.turnStrobeOn();
}
В зависимости от того, включен ли стробоскоп или нет, один из этих методов вызывается для изменения включения стробоскопа с заданными интервалами или просто для изменения интервалов.
Вместо того, чтобы менять интервалы на что-то особенное, приложение просто использует минимально возможные интервалы при вызове Thread.sleep () для включения или выключения фонарика.
РЕДАКТИРОВАТЬ: это код потока и код, который включает фонарик
public void turnStrobeOn () {
for ( int i = 0; i < 3; i++){
isInCycle = true;
cam = Camera.open();
Parameters p = cam.getParameters();
p.setFlashMode(Parameters.FLASH_MODE_TORCH);
cam.setParameters(p);
cam.startPreview(); // the flashlight is now on
lightIsOn = true;
new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(delayOn);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
cam.stopPreview();
cam.release();
lightIsOn = false;
new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(delayOff);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
} //end of for loop
isInCycle = false;
} // end of turnStrobeOn