我遇到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
...然后OFF
...当我结束通话时,它会返回IDLE
。
只有一次......但只要手机处于RING
状态,我希望他这样做。
有任何想法解决这个问题.. ??
答案 0 :(得分:1)
似乎是线程问题。不要在android主线程中编程while循环。只需为while循环创建一个线程,以避免阻塞主线程阻塞。