2013-01-23 25 views
10

Mam działającą tapetę na żywo i reaguję na zdarzenie SCREEN_ON, aby wyświetlić zmiany na kanwie. Jednak w niektórych telefonach użytkownik może ustawić inną tapetę blokady i ekranu głównego (Touchwiz, niektóre urządzenia Xperia). Gdy użytkownik ustawi inną tapetę na ekranie blokady, moja animowana tapeta nie zostanie wyświetlona.Sprawdź, czy są ustawione inne tapety do tapet i blokad.

W Galaxy S3 użyłem WallpaperService.Engine.isVisible() i poprawnie zwróciłem false, gdy użytkownik ustawił inną tapetę blokady. Na Galaxy S3 Mini to jednak nie działa, ponieważ isVisible() zwraca true, czy moja tapeta na żywo jest aktywną tapetą lockscreen.

WallpaperManager.getWallpaperInfo() lub WallpaperManager.peekDrawable() nie działa albo, ponieważ getWallpaperInfo() zwraca moje żywo tapety niezależnie od aktualnego lockscreen tapety i peekDrawable() zwraca poprawny rozciągliwej nawet jeśli moje tapety na żywo jest ustawiony na obu ekranach. Próbowałem odsłuchać WallpaperService.Engine.onTouchEvent(..), ale wydarzenia dotykowe z ekranu blokady nie przenikają do mojej tapety na żywo, ponieważ są pochłaniane przez suwak odblokowujący.

Czy istnieje inny sposób wykrywania, czy moja tapeta na żywo jest tapetą ekranu blokady? Nie mam nic przeciwko refleksyjnym hackom, obejściom, wszystkim, co pozwoli mi to zrobić.

EDIT: działa również na Galaxy Note 2, bot nie na Xperia T LT30p

+0

Czy próbowałeś WallpaperService.Engine.onVisibilityChanged (..)? – StarPinkER

+0

Tak, 'isVisible()' właśnie zwraca ostatnią wartość przekazaną do 'onVisibilityChanged()', więc obaj pracują na tej samej bazie danych – Thrakbad

+0

Czy w końcu rozwiązałeś to? Jeśli tak, niektóre kod byłoby bardzo cenione –

Odpowiedz

2

lockscreen tapety nie jest obsługiwany przez AOSP wersji Androida. Funkcja jest w całości produkowana przez producentów OEM (Samsung, Sony, LG itp.), A zatem interfejsy API do obsługi tapety na ekranie blokady są zupełnie inne wśród producentów OEM. Co więcej, niektórzy producenci OEM nie obsługują tylko tapet na żywo na ekranach loock, podczas gdy inni.

Ponieważ są one dodawane przez APIS do OEM, należy użyć refleksów, aby uzyskać do nich dostęp. Będzie jednak działać na jednym urządzeniu OEM, ale ten sam kod nie będzie działać na innych urządzeniach OEM.

+0

Dzięki, wiem o tym wszystkim i na razie nie mam problemów z hackami specyficznymi dla urządzenia. – Thrakbad