마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

버튼 이벤트 처리 중 다른 버튼 클릭

0 추천

플래시를 켰다가 껏다가 하는 코드입니다.

while 반복문을 통해 작업하고 있고요

함수는 밖에서 선언하고 Thread도 적용시켰습니다

public class MainActivity extends AppCompatActivity {

    boolean STATUS;
    void StartFlashLoop() {
       new Thread(new Runnable() {
           @Override
           public void run() {
               while (STATUS) {
                   CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
                   try {


                       String cameraId = cameraManager.getCameraIdList()[0];
                       cameraManager.setTorchMode(cameraId, true);
                       try {
                           Thread.sleep(30);
                       } catch (InterruptedException e) {

                       }
                       cameraManager.setTorchMode(cameraId, false);
                       try {
                           Thread.sleep(30);
                       } catch (InterruptedException e) {

                       }

                   } catch (CameraAccessException e) {

                   }
               }
           }
       }).run();
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ////////////////////////////////플래시 키는거//////////////////////////
        View.OnClickListener listener = new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                STATUS = true;
                StartFlashLoop();
            }
        };
        android.widget.Button bntflashon = (android.widget.Button) findViewById(R.id.flash_on);
        bntflashon.setOnClickListener(listener);

        /////////////////////////////////플래시 끄는거/////////////////////////////
        View.OnClickListener listener1 = new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                STATUS = false;
            }
        };
        android.widget.Button bntflashoff = (android.widget.Button) findViewById(R.id.flashoff);
        bntflashoff.setOnClickListener(listener1);

    }

플래시On 버튼이 돌아가는 도중 플래시off 버튼을 클릭할수 있는 방법이 없을까요?

slimfit (120 포인트) 님이 2018년 8월 27일 질문
slimfit님이 2018년 8월 27일 수정

1개의 답변

0 추천
왜 30ms 주기로 플레쉬를 켜고 끄는지 이해가 안가네요..

30ms마다 키고 끄는걸 반복 하지 않으셔도 된다면 ,

아래와 같이 구현 하시는게 깔끔 할 듯 합니다.

public class MainActivity extends AppCompatActivity {
 

  final Handler handler = new Handler(){
    public void handleMessage(Message msg){
      switch(msg.what) {
        case 0:
          String cameraId = cameraManager.getCameraIdList()[0];
          cameraManager.setTorchMode(cameraId, true);

          break;
        case 1:
          String cameraId = cameraManager.getCameraIdList()[0];
          cameraManager.setTorchMode(cameraId, false);
          break;
      }

    }};

 

 

 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ////////////////////////////////플래시 키는거//////////////////////////
        View.OnClickListener listener = new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                handler.sendEmptyMessage(0);
            }
        };
        android.widget.Button bntflashon = (android.widget.Button) findViewById(R.id.flash_on);
        bntflashon.setOnClickListener(listener);
 
        /////////////////////////////////플래시 끄는거/////////////////////////////
        View.OnClickListener listener1 = new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                handler.sendEmptyMessage(1);
            }
        };
        android.widget.Button bntflashoff = (android.widget.Button) findViewById(R.id.flashoff);
        bntflashoff.setOnClickListener(listener1);
 
    }
}
익명사용자 님이 2018년 8월 27일 답변
ㅠㅠ 경보음을 울려주고 플래시까지 막 번쩍이는 어플을 만들고 있어서요
한 버튼이 이벤트를 처리하고있고 그 작업이 끝나기 전 까지는 다른 버튼은 클릭 조차 할수 없는건가요? ㅠ
핸들러를 응용하시면 됩니다.
번쩍이는게 필요하다면, 아래와 같이 해 보세요..
public class MainActivity extends AppCompatActivity {
 
  final Handler handler = new Handler(){
    public void handleMessage(Message msg){
      switch(msg.what) {
        case 0:
          String cameraId = cameraManager.getCameraIdList()[0];
          cameraManager.setTorchMode(cameraId, true);
          handler.sendEmptyMessageDelayed(1, 30); // 30ms 이후 플레시 off 요청
          break;
        case 1:
          String cameraId = cameraManager.getCameraIdList()[0];
          cameraManager.setTorchMode(cameraId, false);
          handler.sendEmptyMessageDelayed(0, 30); // 30ms 이후 플레시 on 요청
          break;
        case 2:
          handler.removeMessages(0); // 플레시 on 시키는 이벤트 제거
          handler.removeMessages(1);  // 플레시 off 시키는 이벤트 제거
          String cameraId = cameraManager.getCameraIdList()[0];
          cameraManager.setTorchMode(cameraId, false); // 플레시를 맨마지막 무조건 끄는 코드
          break;
      }

    }};

 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ////////////////////////////////플래시 키는거//////////////////////////
        View.OnClickListener listener = new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                handler.sendEmptyMessage(0);
            }
        };
        android.widget.Button bntflashon = (android.widget.Button) findViewById(R.id.flash_on);
        bntflashon.setOnClickListener(listener);
 
        /////////////////////////////////플래시 끄는거/////////////////////////////
        View.OnClickListener listener1 = new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               handler.sendEmptyMessage(2);  
            }
        };
        android.widget.Button bntflashoff = (android.widget.Button) findViewById(R.id.flashoff);
        bntflashoff.setOnClickListener(listener1);
 
    }
}
감사합니다 제가 원하던데로 작동을 하네용 감사합니다
...