2011-06-29 17 views
7

Mam aplikację, która pokazuje podgląd kamery i chciałbym, aby użytkownik mógł odłożyć telefon w tryb uśpienia, a następnie obudzić go, aby moja aplikacja odzyskała poprawnie. Problem polega na tym, że po powrocie z trybu podglądu kamery nie uruchomi się ponownie.Jak odzyskać podgląd kamery ze snu?

Mam zaimplementowany podgląd kamery, jak przedstawiono na demo api, ale wygląda na to, że przykład api demo działa tylko dzięki szczęściu. W tym przykładzie orientacja ekranu jest zmuszana do pejzażu, co oznacza, że ​​telefon przechodzi przez zmianę konfiguracji za każdym razem, gdy telefon przechodzi w stan uśpienia, ponieważ ekran blokady znajduje się w trybie portretu. Jeśli w aplikacji podglądu z kamery (np. W moim) używany jest tryb portretu, pojawia się błąd.

Zauważyłem, że błąd związany jest z odtwarzaniem widoku powierzchni. Powierzchnia powinna zostać zniszczona zawsze, gdy przechodzimy do trybu onPause, a następnie odtwarzana po onResume, ale tak się nie dzieje, gdy idziemy spać. Wygląda na to, że muszę zniszczyć całą aktywność, a następnie odtworzyć ją, aby podgląd kamery znów zadziałał. Chciałbym móc odtworzyć widok powierzchni.

Czy istnieje sposób na wymuszenie odtworzenia widoku powierzchni poza odtworzeniem całej aktywności?

Odpowiedz

5

Jednym rozwiązaniem może być ustawienie widoku powierzchni na niewidoczny i widoczny ponownie w onResume(), dzięki czemu widok powierzchni zostanie zniszczony i odtworzony.

+0

+1 Dzięki, że rzeczywiście pomogło! Jednak: W implementacji kamery musiałem również przekazać plik Uri obrazu, który zrobiłem i zapisałem, zamiast przekazywania tablicy surowych bajtów z powrotem do działania, które wywołało kamerę, ponieważ próba przekazania tablicy bajtów spowodowała błąd Transakcja po śnie. – AgentKnopf

+0

Rozwiązanie Jason'a działało na moich urządzeniach 4.0 i nowszych, ale moje urządzenia 3.0 i poniżej wciąż wykazują te same objawy. Jakieś wskazówki? – rotinegg

3

miałem ten sam problem i oto dlaczego:

Sposób OnPause nie recyklingu klasę CameraPreview zrobiłem (który implementuje SurfaceView oddzwaniania). Zamiast próbować ponownie się instancję, że cały obiekt, ja tylko uaktualnił odwołanie do obiektu kamery Przejeżdzałem to być albo

null 

lub

cameraPreview.setCamera(mCamera); 

Zadzwoniłem metodę getCameraInstance ponownie zainicjować aparat , a następnie przekazał go do obiektu preivew.

Teraz problem jest tutaj:

private void initializeCameraView(){ 

    RelativeLayout preview = (RelativeLayout)rootView.findViewById(R.id.camera_preview); 

    preview.addView(cameraPreview); 
} 

w onResume, zadzwoniłem do tej metody, aby ponownie zainicjować obiektu cameraPreview. Jednak, było zimno, ponieważ próbowałem dodać kolejny cameraPreview do widoku podglądu. To była moja poprawka, prosta i prosta. Jeśli już istnieje, usuń go, a następnie umieść z powrotem. Miej nadzieję, że to pomoże!

private void initializeCameraView(){ 

    RelativeLayout preview = (RelativeLayout)rootView.findViewById(R.id.camera_preview); 
    //removes the problem with the camera freezing onResume 
    if(cameraPreview != null) { 
     preview.removeView(cameraPreview); 
    } 
    preview.addView(cameraPreview); 
} 
+0

Mężczyzna to jest odpowiedź na problem, który prześladował mnie przez 3 dni bez możliwości spania: D Dzięki! –

+0

Dlaczego nikt nie głosuje na tę odpowiedź? Pomaga mi! – DYS

Powiązane problemy