Неожиданно неожиданно произошла авария в галактике nexus

У меня странная проблема в приложении для камеры при тестировании с галактикой nexus. Просто сбой при попытке начать работу с камерой. Но она отлично работает практически со всеми другими устройствами. Это мои функции …..

@Override public void surfaceCreated(SurfaceHolder holder) { // TODO Auto-generated method stub try { camera = Camera.open(); camera.setPreviewDisplay(holder); Camera.Parameters parameters = camera.getParameters(); if (Integer.parseInt(Build.VERSION.SDK) >= 8) setDisplayOrientation(camera, 90); else parameters.set("orientation", "portrait"); parameters.setPictureFormat(PixelFormat.JPEG); camera.setParameters(parameters); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub if(previewing){ camera.stopPreview(); previewing = false; } if (camera != null){ try { camera.setPreviewDisplay(surfaceHolder); camera.startPreview(); previewing = true; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 

Может кто-нибудь мне помочь ?

Наконец, я получил ответ. У Nexus есть как передние, так и задние камеры. Таким образом, проблема заключалась в коде, который использовался для открытия камеры (необходимо установить идентификатор камеры для передней камеры), а также нам нужно установить соответствующий предварительный просмотр Размер .. Вот модифицированный код ..

 @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { List<Size> sizes = parameters.getSupportedPreviewSizes(); Size optimalSize = getOptimalPreviewSize(sizes, width, height); parameters.setPreviewSize(optimalSize.width, optimalSize.height); camera.setParameters(parameters); camera.startPreview(); startPreview(); } @Override public void surfaceCreated(SurfaceHolder holder) { try { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) { Camera.CameraInfo info=new Camera.CameraInfo(); for (int i=0; i < Camera.getNumberOfCameras(); i++) { Camera.getCameraInfo(i, info); if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { camera=Camera.open(i); defaultCameraId = i; } } } if (camera == null) { camera=Camera.open(); } try { camera.setPreviewDisplay(surfaceHolder); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } Camera.Parameters parameters = camera.getParameters(); android.hardware.Camera.CameraInfo info = new android.hardware.Camera.CameraInfo(); android.hardware.Camera.getCameraInfo(defaultCameraId, info); int rotation = this.getWindowManager().getDefaultDisplay() .getRotation(); if (Integer.parseInt(Build.VERSION.SDK) >= 8) { int degrees = 0; switch (rotation) { case Surface.ROTATION_0: degrees = 0; break; case Surface.ROTATION_90: degrees = 90; break; case Surface.ROTATION_180: degrees = 180; break; case Surface.ROTATION_270: degrees = 270; break; } int result; if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { result = (info.orientation + degrees) % 360; result = (360 - result) % 360; } else { // back-facing result = (info.orientation - degrees + 360) % 360; } camera.setDisplayOrientation(result); } else { parameters.set("orientation", "portrait"); } camera.setParameters(parameters); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private Size getOptimalPreviewSize(List<Size> sizes, int w, int h) { final double ASPECT_TOLERANCE = 0.1; double targetRatio = (double) w / h; if (sizes == null) return null; Size optimalSize = null; double minDiff = Double.MAX_VALUE; int targetHeight = h; for (Size size : sizes) { double ratio = (double) size.width / size.height; if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE) continue; if (Math.abs(size.height - targetHeight) < minDiff) { optimalSize = size; minDiff = Math.abs(size.height - targetHeight); } } if (optimalSize == null) { minDiff = Double.MAX_VALUE; for (Size size : sizes) { if (Math.abs(size.height - targetHeight) < minDiff) { optimalSize = size; minDiff = Math.abs(size.height - targetHeight); } } } return optimalSize; } 
Intereting Posts
Получил стек из Android Market, в котором упоминается приложение конкурента Как запустить приложение meteor на устройстве Android? Виджеты, настроенные с помощью android: configure будут получать onUpdate, даже если конфигурация не завершена IntentService и Threadpool Совместное использование временных файлов между приложениями без SD-карты Переключение с полноэкранного режима на полноэкранный режим / слайд Обновление TextView каждые N секунд? Почему проверка подписи на удаленном сервере более безопасна, чем на устройстве? Tabhost – установить положение значка на вкладках Android Android Невозможно удалить цвет сверху и снизу Как использовать isInEditMode (), чтобы увидеть макет с пользовательским представлением в редакторе Как добавить логотип в экран согласия Google? Программирование IDE на рынке Android Использование Google Breakpad для Android NDK? Могу ли я подчеркнуть текст в макете Android?