Code ab API26

  • Antworten:2
hub
  • Forum-Beiträge: 9

29.10.2019, 20:05:36 via Website

Hallo,
Ich übe mit vielen Beispielen aus dem Internet. Unter Android V5 laufen diese. Unter V9 oder V10 meistens nicht.
Im Editor wird dann bestimmter Code durchgestrichen dargestellt.
z.B.: WindowManager.LayoutParams.TYPE_SYSTEM_ALERT
Im Tooltip steht:
TYPE_SYSTEM_ALERT is deprecated as of API26 (oder API28)
Inspection info: Reports where deprecated code is used in the specified inspection scope.

Nach langen Suchen habe ich zwar gefunden, dass ich TYPE_SYSTEM_ALERT durch TYPE_APPLICATION_OVERLAY ersetzen muss/kann.
Aber ich habe zig andere Beispiele, wo ich nicht weiß, ob es Ersetzungen gibt, oder ob man den Code anders erstellen muss.
Und unter welchen Android-Versionen läuft dann der Code eigentlich noch?
Brauche ich dann für unterschiedliche Android-Versionen unterschiedlichen Code?
Oft weiß ich vorher gar nicht, welche Android-Version auf dem Zielgerät ist.

Kommentieren
Jokel
  • Forum-Beiträge: 1.527

29.10.2019, 20:46:30 via Website

Hallo
Wenn du wissen willst ab oder bis welcher API es eine Methode gibt dann schaue dir doch mal die Doku genauer an. Da steht immer bei ab wann die Methode added wurde und wann
deprecated.

Hier der Link zu deinem Beispiel.
https://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#TYPE_SYSTEM_ALERT

Du musst öfters verschiedenen Code benutzen wenn du viele API Versionen unterstützen willst.

Da musst du immer die aktuelle sdk Version abfragen und dann entsprechend reagieren.

if (android.os.Build.VERSION.SDK_INT>=23)
https://developer.android.com/reference/android/os/Build.VERSION_CODES

— geändert am 29.10.2019, 20:55:20

Hilfreich?
hub
Kommentieren
Rafael K.
  • Forum-Beiträge: 2.359

31.10.2019, 08:47:39 via Website

Häufig gibt es aus spezielle Compat-Klassen in der Support-Library, die dir diese Abfragen ersparen und intern die richtige Implementierung für den jeweiligen API Level aufrufen.

Beispiel (Sprache ist Kotlin):

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        resources.getColor(R.color.colorPrimary, activity?.theme)
    } else {
        resources.getColor(R.color.colorPrimary)
    }

Kann man auch einfacher schreiben als:

    ResourcesCompat.getColor(resources, R.color.colorPrimary, activity?.theme)

Es lohnt sich also immer einfach mal auf gut Glück zu gucken, ob es für den aktuellen Fall nicht auch eine AppCompat Klasse gibt. Es gibt hunderte davon.

Hilfreich?
hub
Kommentieren