다음과 같은 스트로브 라이트를 생성했습니다. 버튼을 누르면 시작되고 다시 누르면 중지됩니다. 지금 그것이 열려 있고 클릭 할 때, 닫히지 만, 다시 클릭 할 때 아무 일도 일어나지 않습니다!스트로브 라이트는 정상적으로 작동하지만 클릭시 잘 작동하지 않습니다
클릭 리스너가 없으면 앱 시작시 시작되지만 훌륭하게 작동하지만 중지 할 방법이 없습니다.
public class Small extends Activity {
private MMAdView adViewFromXml;
RefreshHandler handler;
ImageButton knob;
int n=100000;
Camera mCamera;
Parameters params;
int delay = 400; // in ms
public boolean on;
public boolean works;
Thread logotimer;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.act_small_button);
knob = (ImageButton) findViewById(R.id.pic);
strobe();
knob.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View iv) {
if(works == true){
logotimer.interrupt();
}else if(works != true)
{
strobe();
}
}
});
});
}
/** Turn the devices FlashLight on */
public void turnOn() {
if (mCamera != null) {
// Turn on LED
params = mCamera.getParameters();
params.setFlashMode(Parameters.FLASH_MODE_TORCH);
mCamera.setParameters(params);
mCamera.startPreview();
on = true;
}
}
/** Turn the devices FlashLight off */
public void turnOff() {
// Turn off flashlight
if (mCamera != null) {
params = mCamera.getParameters();
params.setFlashMode(Parameters.FLASH_MODE_OFF);
mCamera.setParameters(params);
mCamera.stopPreview();
}
on = false;
}
/** Toggle the flashlight on/off status */
/*public void toggleFlashLight() {
if (!on) { // Off, turn it on
turnOn();
} else { // On, turn it off
turnOff();
}
}*/
private void strobe(){
Thread logotimer = new Thread() {
public void run() {
try {
// Switch on the cam for app's life
if (mCamera == null) {
// Turn on Cam
try{
mCamera = Camera.open();
} catch (RuntimeException e) {
Log.e("Camera Error. Failed to Open. Error: ", e.getMessage());
}
try {
mCamera.setPreviewDisplay(null);
} catch (IOException e) {
e.printStackTrace();
}
mCamera.startPreview();
}
int logotimer = 0;
while(!interrupted() && logotimer <5000) {
logotimer = logotimer ++;
works = true;
if (!on) { // Off, turn it on
turnOn();
} else if(on == true) { // On, turn it off
turnOff();
}
sleep(delay);
}
if (mCamera == null) {
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
} catch (InterruptedException e){
e.printStackTrace();
}
}
};logotimer.start();
}
}
로그 캣 :
01-08 15:17:33.807: W/System.err(28814): java.lang.InterruptedException
01-08 15:17:33.808: W/System.err(28814): at java.lang.VMThread.sleep(Native Method)
01-08 15:17:33.808: W/System.err(28814): at java.lang.Thread.sleep(Thread.java:1013)
01-08 15:17:33.808: W/System.err(28814): at java.lang.Thread.sleep(Thread.java:995)
01-08 15:17:33.809: W/System.err(28814): at com.light.oid.Small$4.run(Small.java:163)
, 당신은 카메라를 출시하지만, 스트로브 루프를 중지하지 않습니다. – njzk2
onclick 메서드에서 루프를 중지하고 카메라를 스레드로 해제해야합니다. – njzk2
@ njzk2 더 구체적 일 수 있으시겠습니까? –