0

onCallStateChanged() リスナーやプログラム自体ではないことに問題があります。

1つのことを除いて、すべてが正常に機能します。にいるときは、通話状態からジャンプできません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動作します。 飛び込んできます。Switch LED ON... そしてOFF... 呼び出しを終了すると、 に戻りますIDLE。一度だけ...でも、電話が状態にある限り、彼にこれをしてもらいたいRING.

この問題を解決するためのアイデア..??

4

1 に答える 1

1

スレッドの問題のようです。Android メインスレッドで while-loop をプログラムしないでください。メインスレッドのブロックをブロックしないように、while-loop 用のスレッドを作成するだけです。

于 2013-07-31T05:49:37.060 に答える