電話の受信中にカメラの懐中電灯の点滅をシミュレートする単純な Android アプリケーションを作成しようとしています。ユーザーが電話に出るかキャンセルした場合、懐中電灯の点滅を止めたいです。Handler と Runnable を使用してまばたきをシミュレートしていますが、問題は、ユーザーが応答した後にハンドラーを停止したり、呼び出しをキャンセルしたりできないことです。私のソースコード:
public class CallReceiver extends BroadcastReceiver
{
private static Camera cam = null;
private Handler handler = new Handler();
@Override
public void onReceive(Context context, Intent intent)
{
//device is ringing
if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_RINGING))
{
if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH))
{
startFlashBlink();
}
}
//call was answered or canceled
else if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_IDLE)
|| intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_OFFHOOK))
{
stopFlashBlink();
}
}
//for simulating flash blink
Runnable flashBlinkRunnable = new Runnable()
{
public void run()
{
cam = Camera.open();
Parameters p = cam.getParameters();
p.setFlashMode(Parameters.FLASH_MODE_TORCH);
cam.setParameters(p);
cam.startPreview();
cam.stopPreview();
cam.release();
cam = null;
handler.post(flashBlinkRunnable);
}
};
//start flash blink light
public void startFlashBlink()
{
flashBlinkRunnable.run();
}
//stop flash blink light
public void stopFlashBlink()
{
handler.removeCallbacks(flashBlinkRunnable);
if (cam != null)
{
cam.stopPreview();
cam.release();
cam = null;
}
}
}