2014-07-07 1 views
0

У меня есть код для создания снимка, который работает, но после того, как он добирается до PictureCallback(), он продолжает прерываться по коду, и я заканчиваю выполнение другого кода, прежде чем у меня есть свой байт массив. Есть ли способ остановить это? Это займет всего миллисекунды, и я не думаю, что я бы не отказался от потока пользовательского интерфейса.Android PictureCallback необходимо выполнить сначала, а затем продолжить с другим кодом

private static byte[] patronImage; 
. 
. 
. 
takePatronPicture(); 
//I want to do something with patronImage here, but the next line 
//gets executed almost immediately while getJpegCallback is still 
//doing its thing. 
code that does something with patronImage; 
. 
. 
. 
public void takePatronPicture(){ 
     if (camera != null) { 
      try { 
       SurfaceView surfaceView = (SurfaceView)getView().findViewById(R.id.surfaceView1); 
       camera.setPreviewDisplay(surfaceView.getHolder());  
       camera.startPreview(); 
       camera.takePicture(null, null, getJpegCallback); 
      } 
      catch(Exception e) { 
       e.printStackTrace(); 
      }   
     } 
    } 

    final PictureCallback getJpegCallback = new PictureCallback() { 
     @Override 
     public void onPictureTaken(byte[] data, Camera camera) { 
      try { 
       patronImage = data; 

       camera.release(); 
       camera = null; 
      } catch (final Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }; 

ответ

1

Целью обратного вызова является то, что он будет звонить вам позже, когда это будет сделано. Если у вас есть дополнительный код для запуска, который требует данных операции, вы помещаете его в обратный вызов. Вы не замораживаете текущий поток, ожидающий его. Фактически это может привести к тупиковой ситуации, если операция помещает событие в петлеучер главного потока.

+0

Спасибо. Иногда я не вижу корму для деревьев. – Clutch

Смежные вопросы