2013-01-24 13 views
8

Szukałem w całym Internecie i nie mogę się dowiedzieć, co to jest błąd 1001. Kilka sekund później dostaję błąd kamery 100, ale nie mogę się dowiedzieć, jaki jest pierwszy błąd. Czy ktoś ma jakieś pomysły?Błąd aparatu Android 1001 - co to do cholery jest?

+0

Cokolwiek to było moje wycofywania do wcześniejszej wersji mojego kodu naprawił ale nadal chcieliby wiedzieć wtf tym 1001 Błąd jest więc mogę uniknąć go w przyszłości . –

Odpowiedz

5

Ten błąd wystąpił również na moim S3. Sądzę, że wyśledziłem to, w jaki sposób powierzchnia podglądu kamery była używana przez MediaRecorder. W moim przypadku wyświetlacz podglądu został zresetowany, gdy próbowałem rozpocząć nagrywanie. Rozwiązałem go poprzez czyszczenie mój kod i po prostu stosować połączenia ustawić, uruchomić i zatrzymać wyświetlanie podglądu w realizacji SurfaceView poniżej (z Android Camera developer guide):

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()); 
    } 
} 
} 
3

Wystarczy, że chciałbym dodać post tutaj na przyszłość odniesienie. Ten problem przez długi czas przeszkadzał mi. Okazuje się, że mój problem spowodowany był niepoprawnym rozmiarem podglądu, chociaż zestaw rozdzielczości uzyskano z metody getSupportedPictureSize.

Tak na przykład można dostać rozmiary następująco:

//first entry in list is 1392x1392 for front facing camera on an S3 
List<Camera.Size> supportedPictureSizes = params.getSupportedPictureSizes(); 

Ustawienie rozdzielczości lub zaniedbując ustawić rozmiar obrazu alltogether spowoduje błąd bał 1001.

przypadku napotkania tego na żadnym inne urządzenie polecam próbować różnych rozmiarów obrazu.

0

Więc był inny powód, dla którego dostałem go na moim Galaxy S3. Używałem TextureView do pokazania podglądu kamery i otrzymałem ten przerażający błąd po naciśnięciu przycisku strony głównej po pomyślnym przejrzeniu, a następnie ponownym uruchomieniu aplikacji. W funkcji onResume() ponownie uruchomiłem podgląd i odkryłem, że nie zwolniłem zmiennej instancji SurfaceTexture w funkcji onSurfaceTextureDestroyed().

dodałem linię zwalniającą do tej funkcji, a teraz wygląda i działa perfekcyjnie:

@Override public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { 
    mSurfaceTexture = null; //This was the offending culprit. 

    releaseMediaPlayer(); 
    releaseVideoRecorder(); 
    releaseCamera(); 

    return false; 
} 
0

W moim przypadku, Samsung S3 parametr wideo rozmiar nie został ustalony, a to doprowadziło do Błąd 1001. Ustawienie rozmiaru wideo na nagrywarce z wykorzystaniem rozmiaru podglądu rozwiązało problem. Jednak ta zmiana może się nie udać na innych urządzeniach, ponieważ parametr może, ale nie musi być dostępny/ustawiony na wszystkich urządzeniach. Poniższy kod rozwiązuje większość urządzeń:

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); 
}