2011-01-17 9 views
13

Przed dzisiejszym powiedziałbym, że to nie jest możliwe, aby aplikacja była nakładana na wszystko inne: ekrany główne, aplikacje, dialer itp.Aplikacja na Androida, która działa na WSZYSTKICH innych aplikacjach?

Jeśli wypróbujesz darmową aplikację "Super Manager" robi dokładnie to. Ma ikonę i widżet jak ekran, który pojawi się zawsze i wszędzie. Podczas gdy ikona lub widżet jest na ekranie, możesz nadal wchodzić w interakcje z uruchomioną aplikacją.

Jak to możliwe i jak odtworzyć tę funkcjonalność?

Aktualizacja: Oto niektóre z jego zdjęć w akcji. Możesz zobaczyć nałożoną aplikację działającą jak mała strzałka nad Dolphin. Następnie, gdy go naciśniesz, zobaczysz, że aplikacja działa jako duży widget. Nawet gdy widget jest już gotowy, nadal możesz korzystać z aplikacji w tle. W tym przykładzie delfin jest aplikacją w tle.

Image 1

alt text

+0

Co powiesz na lepszy opis lub zrzut ekranu. – Falmarri

+1

Dodałem kilka zrzutów ekranu. Nie wiem, jak to wyjaśnić lepiej. Jest to aplikacja, która jest uruchamiana na wszystkich innych aplikacjach. – pcm2a

Odpowiedz

6

Zobacz to:

Creating a system overlay window (always on top)

Sprawdź sekcję komentarz zaakceptowanej odpowiedzi. Znajdziesz link do przykładowego projektu.

== EDIT ==

Link to the project

+0

Podany przykład prawie działa. OnTouch zostanie nawet uruchomiony dla nakładki i aplikacji, która działa za nim. Na przykład naciśnięcie nakładki znajdującej się na górze ikony powoduje wyświetlenie ikony znajdującej się za nią. W przykładzie Super Managera aktywność uruchomiona za nim nie jest wyzwalana. – pcm2a

+0

Proszę połączyć się bezpośrednio z przykładowym projektem, wice wysyłając nas na pościg dzikich gęsi! –

+0

@RubberDuck: Link został dodany. Tylko uwaga, zamierzam zaktualizować ten projekt w przyszłym tygodniu. Opublikuję zaktualizowany link do projektu tutaj. Naprawdę muszę zaktualizować dla innego projektu, nad którym pracuję. –

4

Można to zrobić poprzez połączenie rzeczy. Początkowy przycisk polega na utworzeniu okna typu TYPE_SYSTEM_OVERLAY. Te okna nie mogą uzyskać fokusu, ale możesz użyć FLAG_WATCH_OUTSIDE_TOUCH, aby uzyskać zdarzenia dotykowe i dopasować współrzędne do zrealizowanego dotknięcia.

Podobnie jest http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#TYPE_SYSTEM_ALERT (I TYPE_SYSTEM_DIALOG).

Wreszcie, można utworzyć działanie za pomocą http://developer.android.com/reference/android/R.style.html#Theme_Translucent (lub wariantów).

+0

W jaki sposób uzyskasz półprzezroczystą aktywność, aby umożliwić interakcję z oddzielną aplikacją działającą pod nią? Kiedy utworzyłem okno podręczne, nie można było dotknąć działania za nim.W aplikacji powyżej uruchomiona aplikacja może nadal być przedmiotem interakcji. Na przykład przeglądarka delfinów może być przewijana, podczas gdy Super Menedżer ma na górze swoją aktywność. – pcm2a

+0

Myślę, że chcesz SYSTEM_ALERT z FLAG_NOT_TOUCH_MODAL zamiast półprzezroczystej działalności następnie –

5

Począwszy od Android 4.x, Android team Android naprawiono potencjalny problem bezpieczeństwa poprzez dodanie nowego adjustWindowParamsLw function(), w którym to doda FLAG_NOT_FOCUSABLE , FLAG_NOT_TOUCHABLE i usuń flagi FLAG_WATCH_OUTSIDE_TOUCH dla okna TYPE_SYSTEM_OVERLAY.

To okno TYPE_SYSTEM_OVERLAY nie otrzyma żadnego zdarzenia dotyku na platformie ICS, a korzystanie z TYPE_SYSTEM_OVERLAY nie będzie działać na ICS ani na przyszłych urządzeniach.

Zaktualizowano: 2016/5/4 TYPE_TOAST nie może odbierać zdarzeń dotykowych w systemie Android 4.0 ~ 4.3. Jest taki sam jak TYPE_SYSTEM_OVERLAY. W Androidzie 4.4+ usunięto TYPE_TOAST z listy wykluczonej, więc możesz także używać TYPE_TOAST do odbierania zdarzeń dotykowych na urządzeniach z Androidem 4.4+.

+1

masz rację, zastąp TYPE_SYSTEM_OVERLAY TYPE_PHONE, będzie działać na ICS. –

Powiązane problemy