@TargetApi

  • 11 Antworten
  • Letztes Antwortdatum
D

Duckemai

Fortgeschrittenes Mitglied
6
Hallo zusammen,

ich nutze in meinem Quelltext eine Methode aus der API11:
cbm.setPrimaryClip(cData);

minSdkVersion= ist bei mir aber die 9, und das soll nach Möglichkeit auch so bleiben.

Wenn ich nun schreibe:

@TargetApi (11)
meineMethode(
...
cbm.setPrimaryClip(cData);
...
)

dann wird diese Methode nur von Smartphones ab Androidversion 11 durchlaufen. Die Methode soll aber auch von
z.B. der Androidversion 9 durchlaufen werden, wobei ich die problematisch Stelle wie folgt umschiffen würde:
@TargetApi (11)
meineMethode(
...
if (android.os.Build.VERSION.SDK_INT >= 11){
cbm.setPrimaryClip(cData);
}
...
)

Ich komme aber nicht mit der Version 9 in meineMethode() rein, da ich ja @TargetApi (11) darüber stehen habe.
Und wenn ich @TargetApi (11) lösche, dann würde cbm.setPrimaryClip(cData); rot unterstrichen werden.

Jemand eine Idee, wie das Problem zu lösen ist?
Danke!
 
Einen Weg ist sich nur auf API14+ zu konzentrieren. Es gibt keine guten Gründe etwas darunter zu versorgen, da du mit 14+ schon alleine 95% aller Androiden versorgst: das reicht vollkommen!
 
Das Problem ist eher genereller Natur und wird immer wieder vorkommen. Ich möchte gerne wissen, wie ich so was umsetzen kann, ohne Alt-Kunden zu verlieren.

Ach ja, und wenn du keine Lösung hast, dann wäre es nett, keinen Eintrag zu hinterlassen. Ich hatte ja schon geschrieben, dass es für mich keine Lösung ist, die minVersion zu ändern. Jetzt könnten andere Helfer denken, dass ich bereits eine Lösung bekommen habe und das Problem damit erledigt ist. Danke.
 
Zuletzt bearbeitet:
Könnte dir eine SupportLibrary in diesem Fall nicht helfen?
 
  • Danke
Reaktionen: Duckemai
SupportLibrary...probiere ich. Vorausgesetzt, .setPrimaryClip(cData) ist in die Librarys v4 und v7 mit eingepackt worden. Würde das dann zur Folge haben, dass die höhere API-Methode erst gar nicht mit dem roten Kompatibilitätsfehler markiert wird?
 
Wenn es dir darauf ankommt unbedingt dabei zu bleiben kannst du statt @targetapi ja einfach ein @suppresslint benutzen, wenn du das dann eh abfängst mit einer verzweigung...
 
  • Danke
Reaktionen: Duckemai
@Jaiel: War mir nicht bewusst, dass es sich so einfach umgehen lässt. Das reicht mir vollkommen aus. Den Versuch mit der SupportLibrary werde ich mir aber auch merken. Danke zusammen!
 
No problemo, immer wieder.
 
Wie kommst du darauf, dass deine Methode nicht durchlaufen wird? @TargetApi unterdrückt auch nur die Meldung in der IDE.
Dafür zu sorgen, dass die Methode nicht unter der definierten API aufgerufen wird bist du selbst verantwortlich.
 
Haha, sry. Aber wer unterstütz noch API <= 16?! oO
 
StefMa schrieb:
Haha, sry. Aber wer unterstütz noch API <= 16?! oO
Ich ab API 14 geht auch noch was :) Er möchte keine Altkunden verlieren sagte er als ich ihn auch schon darauf angesprochen habe
 
Immer API 9. Sonst macht es ja keinen Spaß, und ich müsste ja meine alten Apps umschrieben. ;)

Es gibt zwei Klassen namens ClipboardManager in der Android API. Die eine gilt von API 1 - 10, die andere ab Api 11.

Du brauchst nur ein Weiche im Code:

Code:
int currentapiVersion =
if (android.os.Build.VERSION.SDK_INT > 10){
     android.content.ClipboardManager cbm =  (android.content.ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
     ClipData cData = ClipData.newPlainText("foo", "bar");
     cbm.setPrimaryClip(cData);
} else{
     android.text.ClipboardManager cbm = (android.text.ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
     cbm.setText("foo bar");
}
 
Zurück
Oben Unten