ошибка камеры Android 1001 - что это такое?
Я искал по всему интернету, и я не могу узнать, что это за ошибка 1001. Через несколько секунд после этого я получаю ошибку камеры 100, но я не могу узнать, какая первая ошибка. У кого-нибудь есть идеи?
4 ответов
я столкнулся с этой ошибкой также на моем S3. Я считаю, что я отследил его до того, как поверхность предварительного просмотра камеры использовалась MediaRecorder. В моем случае дисплей предварительного просмотра сбрасывался, когда я пытался начать запись. Я решил это, очистив свой код и просто использовал вызовы для установки, запуска и остановки предварительного просмотра в реализации SurfaceView ниже (из Android руководство разработчика камеры):
public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder mHolder;
private Camera mCamera;
public CameraPreview(Context context, Camera camera) {
super(context);
mCamera = camera;
// Install a SurfaceHolder.Callback so we get notified when the
// underlying surface is created and destroyed.
mHolder = getHolder();
mHolder.addCallback(this);
// deprecated setting, but required on Android versions prior to 3.0
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void surfaceCreated(SurfaceHolder holder) {
// The Surface has been created, now tell the camera where to draw the preview.
try {
mCamera.setPreviewDisplay(holder);
mCamera.startPreview();
} catch (IOException e) {
Log.d(TAG, "Error setting camera preview: " + e.getMessage());
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
// empty. Take care of releasing the Camera preview in your activity.
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
// If your preview can change or rotate, take care of those events here.
// Make sure to stop the preview before resizing or reformatting it.
if (mHolder.getSurface() == null){
// preview surface does not exist
return;
}
// stop preview before making changes
try {
mCamera.stopPreview();
} catch (Exception e){
// ignore: tried to stop a non-existent preview
}
// set preview size and make any resize, rotate or
// reformatting changes here
// start preview with new settings
try {
mCamera.setPreviewDisplay(mHolder);
mCamera.startPreview();
} catch (Exception e){
Log.d(TAG, "Error starting camera preview: " + e.getMessage());
}
}
}
просто подумал, что я добавлю сообщение здесь для дальнейшего использования. Этот вопрос беспокоил меня долгое время. Оказывается, моя проблема была вызвана неправильным размером предварительного просмотра, хотя набор разрешений был получен из метода getSupportedPictureSize.
Так, например, вы можете сделать размеры следующим образом:
//first entry in list is 1392x1392 for front facing camera on an S3
List<Camera.Size> supportedPictureSizes = params.getSupportedPictureSizes();
установка этого разрешения или игнорирование установки размера изображения alltogether вызовет страшную ошибку 1001.
Если вы столкнулись с это на любом другом устройстве я бы рекомендовал попробовать разные размеры изображения.
итак, была еще одна причина, почему я получил его на своем Galaxy S3. Я использовал TextureView, чтобы показать предварительный просмотр камеры и получил эту страшную ошибку при нажатии кнопки "домой" после успешного предварительного просмотра, а затем снова вошел в приложение. В функции onResume() я снова запустил предварительный просмотр и обнаружил, что не выпустил переменную экземпляра SurfaceTexture в функции onSurfaceTextureDestroyed ().
Я добавил строку выпуска в эту функцию, и теперь она выглядит так это и работает отлично:
@Override public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
mSurfaceTexture = null; //This was the offending culprit.
releaseMediaPlayer();
releaseVideoRecorder();
releaseCamera();
return false;
}
в моем случае в Samsung S3 параметр размера видео не был установлен, и это привело к ошибке 1001. Установка размера видео на media recorder с помощью размера предварительного просмотра Исправлена проблема. Однако это изменение может завершиться ошибкой на других устройствах, так как параметр может быть или не быть доступен / установлен на всех устройствах. Следующий код адресует большинство устройств:
if(params.get("video-size") != null && params.get("video-size").isEmpty()) {
int videoWidth = params.getPreviewSize().width;
int videoHeight = params.getPreviewSize().height;
mediaRecorder.setVideoSize(videoWidth, videoHeight);
} else {
mediaRecorder.setVideoSize(profile.videoFrameWidth, profile.videoFrameHeight);
}