Chcę programowo włączyć przednią lampę błyskową (nie z podglądem aparatu) w systemie Android. Poszukałem go, ale pomoc, którą znalazłem, odniosła mnie do tej strony
Czy ktoś ma jakieś linki lub przykładowy kod?
źródło
Chcę programowo włączyć przednią lampę błyskową (nie z podglądem aparatu) w systemie Android. Poszukałem go, ale pomoc, którą znalazłem, odniosła mnie do tej strony
Czy ktoś ma jakieś linki lub przykładowy kod?
W przypadku tego problemu należy:
Sprawdź, czy latarka jest dostępna, czy nie?
Jeśli tak, to wyłącz / włącz
Jeśli nie, możesz zrobić cokolwiek, zgodnie z potrzebami aplikacji.
Aby sprawdzić dostępność lampy błyskowej w urządzeniu:
Możesz użyć następujących opcji:
context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
która zwróci true, jeśli flash jest dostępny, false jeśli nie.
Zobacz:
http://developer.android.com/reference/android/content/pm/PackageManager.html, aby uzyskać więcej informacji.
Aby włączyć / wyłączyć latarkę:
Wylogowałem się i dowiedziałem się o android.permission.FLASHLIGHT. Pozwolenie na manifesty Androida wygląda obiecująco:
<!-- Allows access to the flashlight -->
<permission android:name="android.permission.FLASHLIGHT"
android:permissionGroup="android.permission-group.HARDWARE_CONTROLS"
android:protectionLevel="normal"
android:label="@string/permlab_flashlight"
android:description="@string/permdesc_flashlight" />
Następnie skorzystaj z Camera i ustaw Camera.Parameters . Głównym zastosowanym tutaj parametrem jest FLASH_MODE_TORCH .
na przykład.
Fragment kodu, aby włączyć latarkę aparatu.
Camera cam = Camera.open();
Parameters p = cam.getParameters();
p.setFlashMode(Parameters.FLASH_MODE_TORCH);
cam.setParameters(p);
cam.startPreview();
Fragment kodu, aby wyłączyć światło LED kamery.
cam.stopPreview();
cam.release();
Właśnie znalazłem projekt, który korzysta z tego uprawnienia. Sprawdź kod src szybkich ustawień. tutaj http://code.google.com/p/quick-settings/ (Uwaga: ten link jest teraz uszkodzony)
W przypadku Flashlight bezpośrednio spójrz http://code.google.com/p/quick-settings/source/browse/trunk/quick-settings/#quick-settings/src/com/bwx/bequick/flashlight (Uwaga: ten link jest teraz zepsuty)
Update6 Możesz również spróbować dodać SurfaceView zgodnie z opisem w tej odpowiedzi Latarka LED na Galaxy Nexus sterowanym przez jaki interfejs API? To wydaje się być rozwiązaniem, które działa na wielu telefonach.
Aktualizacja 5 Ważna aktualizacja
Znalazłem alternatywny link (dla powyższych zepsutych linków): http://www.java2s.com/Open-Source/Android/Tools/quick-settings/com.bwx.bequick.flashlight.htm Możesz teraz użyć tego połączyć. [Aktualizacja: 14/9/2012 Ten link jest teraz uszkodzony]
Aktualizacja 1
Kolejny kod OpenSource: http://code.google.com/p/torch/source/browse/
Aktualizacja 2
Przykład pokazujący, jak włączyć diodę LED w telefonie Motorola Droid: http://code.google.com/p/droidled/
Kolejny kod Open Source:
http://code.google.com/p/covedesigndev/
http://code.google.com/p/search-light/
Aktualizacja 3 (Widget do włączania / wyłączania diody LED kamery)
Jeśli chcesz opracować widget, który włącza / wyłącza diodę kamery , musisz odesłać moją odpowiedź Widget do włączania / wyłączania latarki aparatu w Androidzie ..
Aktualizacja 4
Jeśli chcesz ustawić intensywność światła wychodzącego z kamery LED, możesz odnieść się do tego. Czy mogę zmienić intensywność LED urządzenia z Androidem? pełny post. Pamiętaj, że tylko zrootowane urządzenia HTC obsługują tę funkcję.
** Zagadnienia:**
Istnieją również pewne problemy podczas włączania / wyłączania latarki. na przykład. dla urządzeń, które nie mają, FLASH_MODE_TORCH
a nawet jeśli tak, to latarka się nie włącza itp.
Zazwyczaj Samsung stwarza wiele problemów.
Możesz odnieść się do problemów z poniższej listy:
Użyj latarki aparatu w systemie Android
Włączanie / wyłączanie diody LED / lampy błyskowej aparatu w Samsung Galaxy Ace 2.2.1 i Galaxy Tab
Z mojego doświadczenia wynika, że jeśli twoja aplikacja jest przeznaczona do pracy zarówno w orientacji pionowej, jak i poziomej, musisz zadeklarować zmienną
cam
jako statyczną. W przeciwnym razie,onDestroy()
zwany przełączaniem orientacji, niszczy go, ale nie zwalnia aparatu, więc nie można go ponownie otworzyć.aby się zamanifestować, musiałem umieścić tę linię
z http://developer.android.com/reference/android/hardware/Camera.html
sugerowane linie powyżej nie działały dla mnie.
źródło
you need to declare the variable cam as static
Camera
klasy należyAndroidStudio
zwrócić uwagę naandroid.hardware
klasę ...W API 23 lub nowszym (Android M, 6.0)
DODATKOWA EDYCJA
Ludzie wciąż oceniają moją odpowiedź, więc postanowiłem opublikować dodatkowy kod. Oto moje rozwiązanie problemu w przeszłości:
źródło
Mam lampę AutoFlash z poniżej prostymi trzema krokami.
Zrób to w kodzie aparatu.
Buduj + Uruchom -> Teraz przejdź do Przyciemnij obszar światła i Zrób zdjęcie, powinieneś dostać automatyczne światło lampy błyskowej, jeśli urządzenie obsługuje.
źródło
Android Lollipop wprowadził interfejs API camera2 i wycofał poprzedni interfejs API aparatu. Jednak użycie przestarzałego interfejsu API do włączenia pamięci flash nadal działa i jest znacznie prostsze niż użycie nowego interfejsu API.
Wygląda na to, że nowy interfejs API jest przeznaczony do użytku w dedykowanych aplikacjach z pełnymi funkcjami aparatu, a jego architekci tak naprawdę nie brali pod uwagę prostszych przypadków użycia, takich jak włączenie latarki. Aby to zrobić teraz, należy pobrać CameraManager, utworzyć CaptureSession z atrapą Surface, a na koniec utworzyć i uruchomić CaptureRequest. Uwzględniono obsługę wyjątków, czyszczenie zasobów i długie połączenia zwrotne!
Aby zobaczyć, jak włączyć latarkę w Lollipop i nowszych, spójrz na FlashlightController w projekcie AOSP (spróbuj znaleźć najnowsze, ponieważ starsze używają zmodyfikowanych interfejsów API). Nie zapomnij ustawić wymaganych uprawnień.
Android Marshmallow wreszcie wprowadził prosty sposób na włączenie flasha za pomocą setTorchMode .
źródło
Kompletny kod dla aplikacji Android Flashlight
Oczywisty
XML
MainActivity.java
źródło
Istnieją różne sposoby uzyskiwania dostępu do lampy błyskowej w różnych wersjach Androida. Kilka interfejsów API przestało działać w Lollipop, a następnie zostało ponownie zmienione w Marshmallow. Aby temu zaradzić, stworzyłem prostą bibliotekę, z której korzystałem w kilku moich projektach i daje dobre wyniki. Nadal jest niekompletny, ale możesz spróbować sprawdzić kod i znaleźć brakujące elementy. Oto link - NoobCameraFlash .
Jeśli chcesz po prostu zintegrować swój kod, możesz użyć do tego gradle. Oto instrukcje (zaczerpnięte bezpośrednio z Readme) -
Krok 1. Dodaj repozytorium JitPack do pliku kompilacji. Dodaj go do swojego root build.gradle na końcu repozytoriów:
Krok 2. Dodaj zależność
Stosowanie
Zainicjuj
NoobCameraManager
singletona.Opcjonalnie można ustawić poziom dziennika do rejestrowania debugowania. Rejestrowanie korzysta z biblioteki LumberJack . Domyślny LogLevel to
LogLevel.None
Następnie wystarczy zadzwonić do singletona, aby włączyć lub wyłączyć lampę błyskową aparatu.
Łatwo też przełączyć Flash
źródło
You have to take care of the runtime permissions to access Camera yourself, before initializing the NoobCameraManager. In version 0.1.2 or earlier we used to provide support for permissions directly from the library, but due to dependency on the Activity object, we have to remove it.
Zaimplementowałem tę funkcję w mojej aplikacji poprzez fragmenty korzystające z SurfaceView. Link do tego pytania dotyczącego przepełnienia stosu i jego odpowiedź można znaleźć tutaj
Mam nadzieję że to pomoże :)
źródło
W Marshmallow i nowszych wydaje się, że `setTorchMode () 'CameraManager jest odpowiedzią. To działa dla mnie:
źródło
Spróbuj tego.
źródło
Możesz również użyć następującego kodu, aby wyłączyć lampę błyskową.
źródło