0

フラッシュ 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 秒経過してもオフにならず、この関数に対して別の呼び出しが行われると、カメラ リソースがまだ使用中であり、解放されていないという例外がスローされます。

4

1 に答える 1