2013-02-03 1 views
0

onCallStateChanged() 에 청취자 또는 프로그램 자체에 문제가 있습니다.onCallStateChanged가 상태를 변경하지 않습니다.

모든 것은 한 가지를 제외하고는 정상적으로 작동합니다. while()-Loop에있을 때 통화 상태를 뛰어 넘을 수 없습니다.

내가하려고하는 것은 전화가 울릴 때 LED가 깜박 거리도록하는 것입니다.

그래서 나는 뛰어 :

if (TelephonyManager.CALL_STATE_RINGING == state){ 
// Incoming call handling 

     Log.d(incomingNumber, "Ring"); 
     ring = true; 
     idle = false; 

     if (mCamera == null) { 
      mCamera = Camera.open(); 

      Parameters pLightOn = mCamera.getParameters(); 
      Parameters pLightOff = mCamera.getParameters(); 

      pLightOn.setFlashMode(Parameters.FLASH_MODE_TORCH); 
      pLightOff.setFlashMode(Parameters.FLASH_MODE_OFF); 

      mCamera.setParameters(pLightOn); 
      mCamera.startPreview(); 
      try { 
       Thread.sleep(30); 
      } catch (InterruptedException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 


      //########################################## 
      while(ring && !idle){ 

       try { 
        mCamera.setParameters(pLightOff); 
        Thread.sleep(1000); 

        mCamera.setParameters(pLightOn); 
        Thread.sleep(30); 

       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        idle = true; 
        pLightOff.setFlashMode(Parameters.FLASH_MODE_OFF); 
        e.printStackTrace(); 
       } 
       catch(RuntimeException ex){ 
        idle = true; 
        pLightOff.setFlashMode(Parameters.FLASH_MODE_OFF); 
        String errorMessage = "Error setting camera flash status. Your device may be unsupported."; 
       } 
      } 

      idle = true; 
      ring = false; 
      pLightOff.setFlashMode(Parameters.FLASH_MODE_OFF); 
      mCamera.stopPreview(); 
      mCamera.release(); 
      //##########################################     
     } 
    } 

하지만 문제는 내가 그것이 WHILE을 뛰어하지 않습니다 호출 종료 때. STATE은 변경되지 않고 그대로 RING에 있습니다. 그래서 끝이 깜박입니다. IDLE으로 돌아 오지 않습니다.

내가 while-loop을 제거하면 모든 것이 잘 작동합니다. 스위치가 LED ON ... then OFF ... 내가 끝내면 IDLE으로 돌아갑니다. 한 번만 ... 전화가 RING 인 상태에서이 작업을 수행하기를 원합니다.

이 문제를 해결하기위한 모든 아이디어 .. ??

답변

1

스레드 문제입니다. 안드로이드 메인 스레드에서 while 루프를 프로그래밍하지 마십시오. while-loop 용 스레드를 작성하여 블록 주 스레드 블록을 피하십시오.