[JAVA] Ansicht über anderen Apps auf Android anzeigen (Zusammenfassung der Unterstützungsmethoden nach API-Version)

Als ich zum ersten Mal seit einiger Zeit wieder Android-Code schrieb, stieß ich auf den Versuch, die Ansicht anderer Apps zu überlagern, und machte mir eine Notiz. Da nur die Hauptpunkte extrahiert werden, finden Sie detaillierten Code unter dem als Referenzseite aufgeführten Link.

Android 4.0-5.0 (API-Level 14-22)

AndroidManifest.xml


<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

Übergeben Sie `WindowManager.LayoutParams.TYPE_SYSTEM_ALERT``` an den Layertyp (` int _type``` Variable des Konstruktors), wenn LayoutParams generiert wird.

Referenzseite: Anwendungsinformationen immer auf dem Bildschirm anzeigen

Android 6.0-7.1.1 (API-Level 23-25)

Zusätzlich zur Unterstützung von Android 5.0 ist die folgende Unterstützung erforderlich.

Die API wurde aktualisiert, sodass einige Berechtigungen vom Benutzer individuell benötigt werden.

Rufen Sie zuerst `` `Settings # canDrawOverlays``` auf, um die Berechtigungen der App zu überprüfen.

Wenn Sie nicht über die Berechtigung verfügen, rufen Sie den Bildschirm auf, um die Überlagerungsberechtigung zu ändern. Geben Sie für Intent `` `Settings.ACTION_MANAGE_OVERLAY_PERMISSION``` und den Paketnamen Ihrer eigenen Anwendung an. (Zeigen Sie es dem Benutzer an und bitten Sie ihn, die Berechtigungseinstellung zu Beginn der Verwendung zuzulassen.)

Wenn die Steuerung über den Bildschirm mit den Berechtigungseinstellungen zu Ihrer App zurückkehrt, überprüfen Sie die Berechtigung erneut. Wenn die Berechtigung aktiviert ist, fügen Sie die Ansicht auf die gleiche Weise wie bis zu Android 5.0 hinzu.

Referenzseite: Die Behandlung von SYSTEM_ALERT_WINDOW-Berechtigungen wurde in Marshmallow geändert

Android 8.0 ~ (API Level 26 ~)

Zusätzlich zur Unterstützung bis Android 7.1.1 ist die folgende Unterstützung erforderlich.

Die API wurde aktualisiert und die Ebene TYPE_SYSTEM_ALERT ist nicht mehr verfügbar. Daher führt die Verwendung desselben Layertyps "WindowManager.LayoutParams.TYPE_SYSTEM_ALERT" zu einem Fehler. (Die folgende Ausnahme tritt auf. Ich hatte Probleme, weil ich bei der Suche mit dieser Ausnahme keine Informationen finden konnte.)

java.lang.RuntimeException: Unable to start service com.example.app.TestService@57b8b88 with Intent { cmp=com.example.app/.TestService }: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@4938b2b -- permission denied for window type 2003



 Um dies zu vermeiden, übergeben Sie `` `WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY``` an den Ebenentyp, wenn Sie LayoutParams erstellen, wenn die API-Ebene 26 oder höher ist.

 Referenzseite: [Das Verhalten von WindowManager ändert sich mit Android O](http://keithyokoma.hatenablog.com/entry/2017/03/22/190000)



Recommended Posts

Ansicht über anderen Apps auf Android anzeigen (Zusammenfassung der Unterstützungsmethoden nach API-Version)
Zusammenfassung der Revisionen (neue Yuan-Probleme) nach Java-Version
[Android] Lassen Sie uns die Apps anderer Leute ausprobieren
Durchsuchen Sie eine Instanz von Tab's View unter Android
Zeigen Sie Text zeichenweise in der Oberflächenansicht auf Android an
Zusammenfassung der Java-Unterstützung 2018
Informationen zum Abschneiden von Zeichenfolgen um die Anzahl der Bytes unter Android