2016-07-22 3 views
-2

У меня есть переменная класса photoPath, которая инициализируется нулем.Android Camera API - как быть уведомленным, когда onPictureTaken() был выполнен и вернулся?

private static string photoPath = null; 

Тогда внутри тела onPictureTaken, эта переменная присваивается определенное значение String.

final PictureCallback pictureCallback = new PictureCallback() { 
    @Override 
    public void onPictureTaken(byte[] data, Camera camera) { 
     Log.i(TAG, "onPictureTaken() of Camera.PictureCallback called.");// check 
     ... 
     photoPath = aValidPathString; 
     ... 
    } 
} 

Затем в храповом слушателе кнопки, я назвал Camera.takePicture() методом. После этого я выписал значение photoPath. Это значение photoPathnull на выходе; и onPictureTaken() of Camera.PictureCallback called. никогда не печатается на выходе. ЭТО означает, что onPictureTaken() НЕ вызывается в момент, когда я выхожу из значения photoPath.

Так что я хочу знать, когда onPictureTaken() вернулся, так что я могу быть уверен, что onPictureTaken() была выполнена, и я выйти значение photoPath в этой точке. Как это сделать?

button.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Log.i(TAG, "onClick() of View.OnClickListener called.");// check 

     camera.takePicture(null, null, pictureCallback); 

       /*while(photoPath==null) { 
        Log.i(TAG, "PHOTO_NAME is null at the moment.");/* 
        new Handler().postDelayed(new Runnable() { 
         @Override 
         public void run() { 
          Log.i(TAG, "Waiting for half a second."); 
         } 
        }, 500);* 
       }*/ 

     Log.i(TAG, photoPath);// check 
    } 
} 
+1

'takePicture()' является асинхронным. Работа даже не начнется при съемке до тех пор, пока не вернется 'onClick()', AFAIK. Переместите свой код, которому нужен путь к 'onPictureTaken()'. – CommonsWare

+0

@CommonsWare Спасибо, я делаю это. Но вы изменили мой вопрос? Если да, не могли бы вы рассказать мне причину? – Solace

+0

«Но ты изменил мой вопрос?» -- нет, я не. – CommonsWare

ответ

0

Просто ждать, чтобы получать обратный вызов onCaptureCompleted из вашего pictureCallback:

private CameraCaptureSession.CaptureCallback pictureCallback = new CameraCaptureSession.CaptureCallback() { 

     @Override 
     public void onCaptureCompleted(@NonNull CameraCaptureSession session, 
             @NonNull CaptureRequest request, 
             @NonNull TotalCaptureResult result) { 

      // your picture has been taken 
    };