2014-04-25 21 views
6

Pracuję nad aplikacją latarki, w której znajduje się normalna latarka w jednym działaniu i światło stroboskopowe w jednym działaniu. Teraz przejmuję kamerę w trybie onCreate of Flashlight. Ale kiedy mam zamiar wykonywać działania stroboskopowe, muszę zwolnić kamerę nabytą przez działanie FlashLight. Nie chcę zwolnić kamery w trybie "Wstrzymaj aktywność FlashLight", ponieważ zatrzymałoby to kamerę, nawet jeśli użytkownik naciśnie przycisk powrotu. Chcę zwolnić kamerę tylko wtedy, gdy użytkownik przejdzie do aktywności stroboskopowej, lub opuści aplikację przez przycisk Wstecz. Również chcę ponownie pozyskać kamerę, jeśli użytkownik wróci do aktywności latarki od aktywności stroboskopowej. Czy tak czy owak to zrobić?Czy jest jakiś sposób na zwolnienie kamery z innej aktywności po nabyciu jej z innej aktywności.?

+1

Jaki jest przypadek użycia? Dlaczego chcesz, aby kamera pozostała włączona, gdy użytkownik naciska w domu? – Joffrey

+0

W rzeczywistości latarka powinna być włączona, chyba że użytkownik naciśnie przycisk exit lub go wyłączy .. – Akshat

+0

W jaki sposób użytkownik przechodzi do 'Strobe Activity'? Powinien być jakiś przycisk lub coś w tym stylu. Możesz zwolnić kamerę, gdy użytkownik naciśnie ten przycisk tuż przed przejściem do tej czynności! –

Odpowiedz

7

Inne odpowiedzi powiedziały, że nie należy tego robić i dlaczego. Ale odpowiadając na twoje pytanie:

zachować odwołanie do instancji Camera w zmiennej składowej statycznej, najlepiej w oddzielnej klasie, tak:

public class Globals { 
    public static Camera myCamera; 
} 

Zmienna ta jest dostępna dla wszystkich swoich działaniach jak Globals.myCamera .

Umieść instancję Camera, którą otrzymasz od wywołania Camera.open() do Globals.myCamera. Będzie to dostępne dla obu działań. Gdy będziesz gotowy do zwolnienia aparatu, zadzwoń pod numer Globals.myCamera.release(), a następnie ustaw Globals.myCamera na null, aby wskazać, że nie masz już kontroli nad aparatem.

+1

to jest idealne w tym przypadku użycia :) głosowanie w górę –

+0

Prawidłowe wdrożenie –

1

I want to release the camera only when user goes to strobe activity or else he exits the app by back button.

Jeśli nie zwolnić zasoby aparatu jak najszybciej, użytkownik nie będzie mógł korzystać z aparatu z innych aplikacji. Jeśli na przykład użytkownik aplikacji naciśnie przycisk strony głównej, obiekt aparatu zostanie zablokowany przez aplikację. Spowoduje to kłopotliwe zachowanie: na przykład użytkownik nie uruchomi aplikacji Aparat.

official docs Jak sugerują:

Ważne: uwalnianie call(), aby zwolnić aparat do wykorzystania przez inne aplikacje. Wnioski należy natychmiast zwolnić aparatu w OnPause()

I want to release the camera only when user goes to strobe activity or else he exits the app by back button

Jeśli nie release zasobów aparatu ręcznie, oni nie zostanie zwolniony po prostu naciskając przycisk Wstecz i „wychodzenia” swoją aplikację.

Also I want to reacquire the camera if the user is coming back to flashlight activity from strobe activity. Is their anyway to do this.?

Wystarczy podłączyć do aparatu w onResume() i zwolnić zasoby OnPause().

0

Nie będę prosić, abyś przestał robić to, co chcesz lub opowiedział ci o oficjalnych sugestiach.

Możesz osiągnąć tę funkcjonalność, używając oddzielnej klasy do pracy z kamerą i deklarując wszystkie jej funkcje i członków jako statyczne.

  • Za każdym razem, gdy przełączasz się na aktywność stroboskopu, zwolnij aparat, używając statycznej funkcji tej klasy w trybie on na Tworzenie aktywności stroboskopu.
  • Czy to samo w onDestroy() aktywności latarkę Ale jeśli finish() aktywność latarką po włączeniu do aktywności Strobe wówczas nie trzeba wykonywać powyżej kroku a praca zostanie wykonana tylko z tego kroku.
0

Najlepszym wytłumaczeniem tego jest Dawid Wasser. Możemy stworzyć globalną instancję kamery, a następnie użyć jej wszędzie tam, gdzie jest to wymagane.

publiczna klasa Globals { public static Camera myCamera; }

Mimo że innym sposobem obejścia problemu jest utworzenie przycisków do przejścia do każdego rodzaju światła i do każdego z osobna posiadającego różne klasy. W takim przypadku możemy zostawić na ekranie kamerę w takiej postaci, w jakiej się znajduje, a więc nie zamyka aparatu po naciśnięciu przycisku Home, ale możemy zwolnić kamerę, gdy tylko użytkownik przejdzie do czynności, która zawiera przyciski do wyboru kamery rodzaje światła. Dzięki temu aparat będzie zawsze wolny podczas wybierania.