フラッシュ LED を一定時間オンにしようとしていますが、コードが期待どおりに動作しません。
if(context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH))
{
Log.i("Flash Present", "Yes");
//Camera Has Flash
final Camera cam = Camera.open();
Parameters p = cam.getParameters();
p.setFlashMode(Parameters.FLASH_MODE_TORCH);
cam.setParameters(p);
ExecutorService service = Executors.newSingleThreadExecutor();
try {
Runnable r = new Runnable() {
@Override
public void run() {
Log.i("Starting Flash", "Now");
cam.startPreview();
}
};
Future<?> f = service.submit(r);
f.get(10, TimeUnit.SECONDS); // attempt the task for two minutes
}
catch (final InterruptedException e) {
// The thread was interrupted during sleep, wait or join
}
catch (final TimeoutException e) {
// Took too long!
cam.stopPreview();
cam.release();
}
catch (final ExecutionException e) {
// An exception from within the Runnable task
}
finally {
cam.stopPreview();
cam.release();
service.shutdown();
}
}
LED は 10 秒経過してもオフにならず、この関数に対して別の呼び出しが行われると、カメラ リソースがまだ使用中であり、解放されていないという例外がスローされます。