2011-01-17 5 views
13

Vor heute hätte ich gesagt, das ist einfach nicht möglich, eine App zu haben, die Overlay über allem anderen läuft: Startbildschirme, Apps, Dialer, etc.Android App, die auf allen anderen Apps läuft?

Wenn Sie die kostenlose Anwendung "Super Manager" ausprobieren es macht genau das. Es hat ein Symbol und ein Widget wie Bildschirm, der immer und überall angezeigt wird. Während das Symbol oder das Widget auf dem Bildschirm angezeigt wird, können Sie weiterhin mit der dahinter laufenden App interagieren.

Wie ist das möglich und wie können wir diese Funktionalität wiederherstellen?

Update: Hier sind einige Bilder davon in Aktion. Sie können die überlagerte Anwendung als kleinen Pfeil oberhalb von Dolphin sehen. Dann, wenn Sie es drücken, können Sie sehen, dass die Anwendung als eine große Art von Widget ausgeführt wird. Selbst während das Widget aktiv ist, können Sie immer noch mit der Hintergrund-App interagieren. In diesem Beispiel ist Delphin die Hintergrund-App.

Image 1

alt text

+0

Wie wäre es mit einer besseren Beschreibung oder einem Screenshot? – Falmarri

+1

Ich habe einige Screenshots hinzugefügt. Ich weiß es nicht besser zu erklären. Es ist eine Anwendung, die auf allen anderen Anwendungen ausgeführt wird. – pcm2a

Antwort

6

sehen:

Creating a system overlay window (always on top)

den Kommentarbereich der Antwort akzeptiert prüfen. Sie finden einen Link zu einem funktionierenden Beispielprojekt.

== == EDIT

Link to the project

+0

Das Beispiel, das Sie erwähnen, funktioniert fast. Das onTouch wird sogar für das Overlay UND die dahinter laufende Anwendung ausgelöst. Wenn Sie zum Beispiel auf die Überlagerung eines Symbols drücken, wird das dahinter liegende Symbol ausgelöst. Im Super-Manager-Beispiel wird die Aktivität, die dahinter läuft, nicht ausgelöst. – pcm2a

+0

Bitte verlinken Sie direkt zum Beispielprojekt, das uns auf eine wilde Jagd schickt! –

+0

@ RubberDuck: Link hinzugefügt. Nur eine Anmerkung, ich werde dieses Projekt nächste Woche aktualisieren. Ich werde den aktualisierten Projektlink hier veröffentlichen. Ich muss eigentlich für ein anderes Projekt aktualisieren, an dem ich arbeite. –

4

Dies kann durch eine Kombination von Dingen getan werden. Die erste Schaltfläche wird durch Erstellen eines Fensters vom Typ TYPE_SYSTEM_OVERLAY erstellt. Diese Fenster können den Fokus nicht erreichen, jedoch können Sie FLAG_WATCH_OUTSIDE_TOUCH verwenden, um Berührungsereignisse zu erhalten und die Koordinaten zu vergleichen, um zu erkennen, dass Sie berührt wurden.

Ähnlich gibt es http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#TYPE_SYSTEM_ALERT (und TYPE_SYSTEM_DIALOG).

Schließlich kann eine Aktivität mit http://developer.android.com/reference/android/R.style.html#Theme_Translucent (oder Varianten) erstellt werden.

+0

Wie würden Sie die durchscheinende Aktivität erhalten, um die Interaktion mit einer separaten Anwendung zu ermöglichen, die dahinter läuft? Wenn ich eine Popup-Box-Aktivität erstellt habe, konnte die Aktivität dahinter nicht berührt werden.In der App oben kann noch mit der laufenden Anwendung interagiert werden. Zum Beispiel kann der Delphin-Browser immer noch gescrollt werden, während der Super Manager seine Aktivität oben hat. – pcm2a

+0

Ich denke, Sie möchten ein SYSTEM_ALERT mit FLAG_NOT_TOUCH_MODAL anstelle einer transluzenten Aktivität dann –

5

ab Android 4.x, Android Team Android-Team fixiert ein potenzielles Sicherheitsproblem durch eine neue Funktion adjustWindowParamsLw Hinzufügen(), in dem es FLAG_NOT_FOCUSABLE hinzufügen , FLAG_NOT_TOUCHABLE, und entfernen Sie FLAG_WATCH_OUTSIDE_TOUCH-Flags für das Fenster TYPE_SYSTEM_OVERLAY.

Das TYPE_SYSTEM_OVERLAY-Fenster empfängt auf der ICS-Plattform kein Berührungsereignis, und die Verwendung von TYPE_SYSTEM_OVERLAY ist auf ICS oder zukünftigen Geräten natürlich nicht möglich.

Aktualisiert: 2016/5/4 TYPE_TOAST kann Touch-Ereignisse unter Android 4.0 ~ 4.3 nicht empfangen. Es ist das gleiche wie TYPE_SYSTEM_OVERLAY. Unter Android 4.4+ wurde TYPE_TOAST aus der Ausschlussliste entfernt. Sie können TYPE_TOAST also verwenden, um Berührungsereignisse auf Android 4.4 + -Geräten zu empfangen.

+1

Sie haben Recht, ersetzen Sie TYPE_SYSTEM_OVERLAY mit TYPE_PHONE es wird auf ICS funktionieren. –

Verwandte Themen