2013-02-03 153 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(); 
      //##########################################     
     } 
    } 

但问题是,当我结束调用它不会跳下WHILESTATE不变,它保持在RING。 所以我有无尽的眨眼。它永远不会回到IDLE

当我删除while-loop一切工作正常,但。 它跳入。开关LED ON ...然后OFF ...并且当我结束呼叫时返回到IDLE。 只是一次...但我希望他这样做,只要电话在RING状态。

任何想法来解决这个问题.. ??

回答

1

看来是线程问题。不要在android主线程中编程while循环。只需为while循环创建一个线程以避免阻塞主线程块。