Android: Wie wird abhängig von der Version der API codiert?

9

In Android bekomme ich leicht die Version des SDK ( Build.VERSION.SDK ), aber ich muss LabeledIntent nur verwenden, wenn die Plattform neuer als 1.6 ist ( >Build.VERSION_CODES.DONUT )

Ich nehme an, dass Reflektion notwendig ist (ich habe diesen Link gelesen) > aber es ist nicht klar für eine Klasse oder für mich).

Dies ist der Code, aber es gibt mir eine Ausnahme, denn in meinem Android 1.6 überprüft der Compiler, ob das Paket existiert, selbst wenn die Bedingung nicht angewendet wird:

%Vor%

Wie ich es gelöst habe, einige Anmerkungen zur richtigen Antwort

@Commonsware zeige mir den Weg, es zu tun. Wir erstellen eine Bridge-Klasse, so dass Sie abhängig von der API LEVEL eine Klasse instanziieren, die eine API LEVEL oder eine andere Klasse verwendet, die eine andere API LEVEL verwendet. Das einzige Detail, das ein Anfänger vergessen könnte, ist, dass Sie Ihre App mit dem neuesten SDK kompilieren müssen, auf das Sie sich als Referenz beziehen.

%Vor%

Also habe ich in LabeledIntentNew den gesamten Code eingefügt, der auf LabeledIntent verweist, der nur in API LEVEL 5 verfügbar ist. In LabeledIntentOld kann ich eine andere Art von Steuerelement implementieren, in meinem Fall gebe ich die Absicht selbst zurück nichts mehr tun.

Der Aufruf dieser Klasse geschieht folgendermaßen:

%Vor%     
netadictos 25.11.2010, 11:11
quelle

2 Antworten

2

Folgen Sie dem Wrapper-Klassenmuster , das auf der Seite dokumentiert ist, mit der Sie oben verlinkt sind .

    
CommonsWare 25.11.2010, 14:13
quelle
1

Du musst Reflektion benutzen ... Die Idee ist gut, aber in Ihrem Code beziehen Sie sich auf LabeledIntent, die in 1.6 nicht verfügbar ist. Wenn Ihre App gegen 1.6 Geräte läuft, kann sie die Klasse nicht finden und stürzt ab.

Die Idee ist also, Code zu schreiben, bei dem Sie in 1.6 nicht auf LabeledIntent verweisen. Um dies zu tun, können Sie eine Wrapper-Klasse (LabeledIntentWrapper) schreiben, die LabeledIntent erweitert und in Ihrer Funktion aufruft. In 1.6 wird das Gerät also einen Verweis auf eine bekannte Klasse sehen: LabeledIntentWrapper.

    
Cédric Coulon 25.11.2010 15:22
quelle

Tags und Links