2012-04-21 16 views
14

Na to pytanie mam zamiar zacytować innego użytkownika, który dostał żadnej odpowiedzi na ich pytanie:Sprawdź użycie przycisków głośności, gdy ekran jest wyłączony

Pisałem o Andoid aplikację, która korzysta z przycisków głośności dla sprzętu inny cel.

Działa poprawnie, gdy aplikacja jest uruchomiona i widoczna, ale po wyłączeniu ekranu lub przekroczeniu limitu czasu, kliknięcia przycisków nie wchodzą do moich sterowników .

Czy ktoś wie, czy istnieje sposób, aby wykryć kliknięcia przycisku, gdy ekran jest wyłączony, gdy ? Źródło: AV695's question

Pracuję nad app sobie, że korzysta z przycisków głośności, ale jako ten użytkownik zauważył również, normalne zachowanie kontroli przyciski z onkeypress przestaje działać, gdy ekran jest wyłączony. Dzieje się tak dlatego, że działanie zostaje wstrzymane na ekranie.

Czy istnieje sposób na utrzymanie aktywności podczas wyłączania ekranu lub sprawdzanie użycia przycisków głośności, gdy ekran jest wyłączony? Próbowałem wcześniej korzystać z usługi, ale nie można sprawdzić kluczy woluminu tak, jak podano w Commonsware.

+0

Czy masz jakieś przykłady czegoś, co wydaje się to robić, co sugeruje, że jest to możliwe? Poza ograniczonym przypadkiem, w którym działa procesor aplikacji, ale ekran jest wyłączony, czy jest jakieś wskazanie, że jądro się obudziło i uświadomiło sobie, że klawisz został naciśnięty? Gdyby nie potrzebne były modemy sprzętowe lub co najmniej radiowe. Tylko wtedy, gdy/jądro zda sobie sprawę z kluczowego zdarzenia może stać się problemem w przekonaniu platformy, aby twój kod o tym wiedział. –

+0

Niestety nie. Jedyne, o czym mogę pomyśleć, to mediaplayer. Zaczynam wierzyć, że mój pomysł jest tak prosty, jak to tylko możliwe (sprawdź powiadomienia bez konieczności wyjmowania telefonu z kieszeni, po prostu naciskając przycisk głośności, który spowoduje, że urządzenie będzie wibrować, jeśli oczekują powiadomienia) po prostu zbyt skomplikowane, by je stworzyć. –

+0

Czy dioda LED zwykle nie miga, jeśli na pasku stanu pojawiają się nowe powiadomienia, w tym niestandardowe z aplikacji innych firm? –

Odpowiedz

6

wątpię, że to jest obsługiwane (bez uciekania się do baterii odprowadzanie blokada wybudzenia) na każdym peronie, jądra lub podstawowych poziomach oprogramowania radiowego bez modyfikacji do ostatniego przynieść głośności naciska podczas snu na uwagę jądra.

W zakresie rozsądnych modyfikacji systemu ROM, bardziej sensownym rozwiązaniem może być modyfikacja istniejącej otwartej pamięci ROM dla urządzenia, aby wstawić niestandardowy kod poziomu platformy do obsługi przycisku zasilania zwykle używanego do wybudzenia urządzenie przygotowawcze do jego odblokowania - przynajmniej wiemy, że przyciąga uwagę jądra. Ten kod mógłby następnie poinformować użytkownika dźwiękiem lub wibracjami, jeśli istnieją niepotwierdzone powiadomienia.

Można opcjonalnie czekać krótko, sprawdzić orientację urządzenia lub poszukać innego naciśnięcia klawisza, aby uniknąć tego w irytujący sposób, gdy użytkownik trzyma urządzenie poza swoją kieszenią i próbuje je odblokować.


Albo nie można używać klawisza głośności i po prostu ustawić czas obudzić się co 15 minut i wibrować, jeżeli istnieją niepotwierdzone powiadomienia, unikając konieczności grzebać w kieszeniach Ones.


można wspomnieć, że jest to żądanie zwyczaj: jeśli oznacza to jednorazowa lub niskiej głośności, inna opcja do rozważenia jest to, że kilku dostawców mają „Bluetooth zegarki” out z SDK, który pozwala powiadomienia push ze związku urządzenie z Androidem.

Jeśli możesz przechwycić powiadomienie, gdy jest ono generowane, możesz popchnąć je na nadgarstek użytkownika, a następnie pozwolić, by telefon znów zasnął.

+3

Dzięki za obszerny komentarz. Niestety, po prostu przestanę myśleć o tym małym projekcie i pójdę dalej, ewentualnie wypróbuję go ponownie w odległej przyszłości, gdzie takie rzeczy są nieco łatwiejsze. To był jeden z tych "Gee, wiesz, co byłoby fajne?" rodzaju pomysłów od przypadkowego nieznajomego online, więc myślę, że pomysł na zegarek bluetooth jest trochę za duży. Dzięki za pomysł :) –

+0

Jak byś to zrobił, gdy faktycznie uciekłbyś się do blokady wybudzania? Wydaje mi się, że po wyłączeniu ekranu działanie zostaje wstrzymane i klucze nie są dostarczane? – ondra

2

Nie można przechwycić klucza, gdy aplikacja działa w tle, ale zamiast słuchać samej KeyPress. Możesz zarejestrować ContentObserver, jak opisano w this question.

0

Jak wspomniał Chris Stratton, jedynym sposobem na utrzymanie żywej aplikacji jest używanie blokujących baterię blokad wybudzania.

Ponieważ jednak znalazłem się w podobnej sytuacji, znalazłem inne rozwiązanie. Niestety będziesz potrzebować zarówno zrootowanego urządzenia, jak i struktury Xposed.

Z Xposed, który zastępuje proces zygot, dzięki czemu można podłączyć się do dowolnego konstruktora i metody systemu, będziesz mógł złapać surowe KeyEvents zanim system je obsłuży.

Dokonuje się tego w PhoneWindowManager.interceptKeyBeforeQueueing(). Korzystając z XC_MethodHook, możesz użyć metody beforeHookedMethod() w wyżej wymienionej metodzie, aby wychwycić każde zdarzenie przycisku sprzętowego, nawet jeśli urządzenie znajduje się w stanie głębokiego uśpienia.

Po przechwyceniu wydarzeń, które Cię interesują, możesz utworzyć tymczasową blokadę wybudzania, aby robić swoje rzeczy, ale nie zapomnij zwolnić blokady wybudzania po zakończeniu pracy.

Dobrym przykładem, jak to zrobić, jest moduł Xposed Torch. Jeśli jednak polegasz na systemie nierozwiązanym, zła wiadomość jest taka, że ​​po prostu nie jest to możliwe bez wyczerpania baterii ...

0

Próbowałem też zaimplementować wykrywanie naciśnięcia przycisku głośności w mojej aplikacji i zostawiłem to część zostanie opracowana później po zakończeniu głównej części. Udało mi się wykryć naciśnięcie klawisza głośności, gdy ekran jest włączony, nawet gdy telefon jest zablokowany, z usługi w tle.

Nagrywarka wideo w tle 2 (BVR2) (i możliwe, że BVR1 również, nie próbowałem) jest jedną z aplikacji, która wykrywa naciśnięcie klawisza głośności, nawet gdy ekran jest wyłączony. Próbując zaimplementować wykrywanie klucza głośności, gdy ekran jest wyłączony w mojej aplikacji, zainstalowałem BVR2, mając nadzieję, że dowiem się, jak to działa. Ku mojemu zaskoczeniu dało to mojej aplikacji możliwość wykrycia klawiszy głośności, nawet gdy ekran jest wyłączony. Moja aplikacja miała ContentObserver do monitorowania zmian głośności, ale nie działała, gdy ekran jest wyłączony. Gdy funkcja BVR2 jest aktywna, moja aplikacja może również wykrywać naciśnięcie klawisza głośności, gdy ekran jest wyłączony. Wciąż kopie.

Ale BVR2 ma własne działanie wyzwalacza, czyli nagrywanie wideo, działanie, którego może nie chcieć wystąpić tylko ze względu na to, że aplikacja wykrywa naciśnięcia klawiszy objętości.

Inną aplikacją jest QuickClick. Ta aplikacja może dać Twojej aplikacji to, czego jej brakuje, moc wykrywania naciśnięć klawiszy, nawet gdy ekran jest wyłączony, bez dodatkowych niechcianych działań. Po prostu zainstaluj QuickClick i nie konfiguruj żadnej akcji. Utwórz ContentObserver, aby monitorować zmiany głośności strumienia i jesteś gotowy. Twoja aplikacja będzie teraz mogła wykrywać naciśnięcia przycisków głośności, nawet gdy ekran jest wyłączony.

Należy pamiętać, że moja aplikacja działa jako usługa w tle.

Obie wyżej wymienione aplikacje są przeznaczone do innych zastosowań, ale do wykonania działania wykorzystuje wykrywanie klucza głośności. Nie jestem w żaden sposób połączony z żadną z wymienionych aplikacji.

Jeśli te aplikacje i prawdopodobnie dziesiątki innych osób mogą wykrywać naciśnięcie klawisza głośności, można to zrobić.Poproszę ekspertów, aby dowiedzieli się, jak to zrobić, abyśmy mogli wdrożyć w naszej aplikacji bez polegania na innej aplikacji.

Jeśli uważasz, że ta odpowiedź jest przydatna, przeprowadź głosowanie w górę.

Powiązane problemy