Mam klasyczną aplikację na Androida z podglądem kamery (wspólne wdrożenie, które można znaleźć w wielu samouczkach [marakana itp.]), Która ma zrobić zdjęcie w danym przedziale czasu. Gwintowanie i zabijanie wątków jest wykonywane, obsługiwane są błędy takie jak "method called after release"
. Ale czasami pojawia się znany błąd: 100
. Zgadzam się z faktem, że to się dzieje i starałem się też z tym poradzić. Wdrożyłem metodę ErrorCallback
i jej metodę onError
, w której obecny obiekt kamery został zwolniony i utworzono nowy, zgodnie z oficjalną dokumentacją.odtworzenie obiektu kamery po błędzie 100 (serwer kamery zginął)
Ale (bez zaskoczenia) to nie wystarczy. Prawdopodobnie nowa kamera jest niepoprawnie przydzielona, ponieważ pojawia się teraz komunikat "CameraDemo has been exited unexpectedly"
. Czytałem wiele dokumentów i przykładów w nadziei, że odpowiednie postępowanie będzie gdzieś wyjaśnione, ale nikt nie ma takiego problemu. Więc chciałbym zapytać, co jeszcze powinienem zrobić, puszczając i tworząc nowy aparat? Oto kod:
ErrorCallback CEC = new ErrorCallback()
{
public void onError(int error, Camera camera)
{
Log.d("CameraDemo", "camera error detected");
if(error == Camera.CAMERA_ERROR_SERVER_DIED)
{
Log.d("CameraDemo", "attempting to reinstantiate new camera");
camera.stopPreview();
camera.setPreviewCallback(null);
camera.release(); //written in documentation...
camera = null;
camera = Camera.open();
}
}
};
Krótko - gdybym zwolnić i ponownie aparat w onError
zwrotnego następnie RuntimeException
Metoda nazywa się po zwolnieniu (takePicture) jest podniesiona. Czy powinienem w jakiś sposób ponownie przypisać uchwyt do kamery lub odtworzyć również uchwyt powierzchniowy?
Wystarczy skierować do mnie np. na niektóre fora, gdzie jest opisane lub rozwiązane itp. Dzięki za pomoc.
znalazłeś rozwiązania? Proszę udostępnić – Gena