onCallStateChanged不会改变状态

时间:2013-02-03 20:21:00

标签: android phone-state-listener

我遇到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 个答案:

答案 0 :(得分:1)

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