Dans Android-je obtenir la version du SDK facilement (Build.VERSION.SDK
) mais je dois utiliser LabeledIntent que si la plate-forme est plus récente que 1,6 (>Build.VERSION_CODES.DONUT
)Android: comment coder selon la version de l'API?
Je suppose que la réflexion est nécessaire (j'ai lu this link mais il est pas clair pour une classe ou pour moi).
Voici le code mais il me donne une exception parce que dans mon Android 1.6, le compilateur vérifie si le package existe même si la condition est pas appliquée:
Intent theIntent=....;
if(Integer.parseInt(Build.VERSION.SDK) > Build.VERSION_CODES.DONUT)
{
try{
Intent intentChooser = Intent.createChooser(intent,"Choose between these programs");
Parcelable[] parcelable = new Parcelable[1];
parcelable[0] = new android.content.pm.LabeledIntent(theIntent, "", "Texto plano", 0);
intentChooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, parcelable);
activity.startActivity(intentChooser);
}
catch(Exception e)
{
activity.startActivity(theIntent);
}
} else
{
activity.startActivity(intentMedicamento);
}
COMMENT je l'ai résolu, QUELQUES NOTES À LA BONNE RÉPONSE
@Commonsware montre moi la façon de le faire. Nous créons une classe de pont de sorte qu'en fonction de l'API LEVEL, vous installez une classe qui utilise un NIVEAU d'API ou une autre classe qui utilise une autre NIVEAU d'API. Le seul détail qu'un débutant pourrait oublier est que vous devez compiler votre application avec le nouveau SDK que vous êtes en train de faire référence.
public abstract class LabeledIntentBridge {
public abstract Intent BuildLabeledIntent(String URL, Intent theintent);
public static final LabeledIntentBridge INSTANCE=buildBridge();
private static LabeledIntentBridge buildBridge() {
int sdk=new Integer(Build.VERSION.SDK).intValue();
if (sdk<5) {
return(new LabeledIntentOld());
}
return(new LabeledIntentNew());
}
}
Ainsi, dans le LabeledIntentNew
, je compris tout le code qui fait référence à LabeledIntent
uniquement disponible dans l'API NIVEAU 5. Dans LabeledIntentOld
, je peux mettre en œuvre un autre type de contrôle, dans mon cas, je retourne l'intention elle-même sans rien faire plus.
L'appel à cette classe se fait comme ceci:
LabeledIntentBridge.INSTANCE.BuildLabeledIntent(URLtest,theIntent);
Quelle version du framework utilisez-vous dans votre projet? – Flo
@ Flo.- Mon AndroidManifest définit minSdkVersion = "4". LabeledIntent est uniquement inclus dans le SDK à partir de API LEVEL 5 sur. – netadictos
Oui, mais quelle version du framework utilise réellement dans votre projet? minSdkVersion est juste une méta-information dans le fichier manifeste. Lorsque vous avez créé votre projet, vous devez avoir sélectionné une version de cadre dans la boîte de dialogue de création. – Flo