日期:2014-05-20  浏览次数:20764 次

关于Android Camera 新手求助
本帖最后由 syl7752 于 2012-02-10 11:15:02 编辑 一个测试用例 多处调用Camera 弹出错误fail to connect to camera service 
部分代码如下:
private void initializeMessageLooper(final int cameraId) throws Exception{
   final ConditionVariable startDone = new ConditionVariable();
   new Thread() {
       @Override
       public void run() {
           Log.v(TAG, "start loopRun");
           // Set up a looper to be used by camera.
           Looper.prepare();
           // Save the looper so that we can terminate this thread
           // after we are done with it.
           mLooper = Looper.myLooper();
           try{
           mCamera = Camera.open(cameraId);
           }catch (Exception e) {
// TODO: handle exception
           
}
           Log.v(TAG, "camera is opened");
           startDone.open();
           Looper.loop(); // Blocks forever until Looper.quit() is called.
           if (LOGV) Log.v(TAG, "initializeMessageLooper: quit.");
       
       }
   }.start();

   Log.v(TAG, "start waiting for looper");
   if (!startDone.block(WAIT_FOR_COMMAND_TO_COMPLETE)) {
       Log.v(TAG, "initializeMessageLooper: start timeout");
       fail("initializeMessageLooper: start timeout");
   }
}

private void terminateMessageLooper() throws Exception {
   mLooper.quit();
   // Looper.quit() is asynchronous. The looper may still has some
   // preview callbacks in the queue after quit is called. The preview
   // callback still uses the camera object (setHasPreviewCallback).
   // After camera is released, RuntimeException will be thrown from
   // the method. So we need to join the looper thread here.
   mLooper.getThread().join();
   mCamera.release();
   mCamera = null;

}

@UiThreadTest
public void testTakePicture() throws Exception {
  int nCameras = Camera.getNumberOfCameras();
  for (int id = 0; id < nCameras; id++) {