2011-08-11 2 views
2

J'aimerais savoir si, par exemple, je développe une application avec les deux packages WMA (1.1 et 2.0) et que je la déploie sur un ancien modèle de téléphone avec uniquement le support WMA 1.1, le téléphone désactivera-t-il le package 2.0?J2ME les téléphones portables ont-ils une fonction de désactivation automatique pour les paquets non compatibles?

Le code ne diffère pas pour ce qu'il est configuré pour faire entre les paquets, mais le paquet 2.0 donne des fonctionnalités supplémentaires à ce code qui finit par être optimal pour les téléphones plus récents.

Répondre

2

j'envisager d'utiliser Class.forName pour charger le code approprié selon que WMA appareil prend en charge 2 ou non

class SpecificFeatureFactory { 
    SpecificFeature get(boolean isWma2) { 
     return (SpecificFeature)Class.forName(isWma2 ? "Rich" : "Poor"); 
    } 
} 

class Rich implements SpecificFeature { 
    @Override 
    long doSomething(String className, Date dateAlarm) throws Exception { 
     return PushRegistry.registerAlarm(className, dateAlarm); 
    } 
} 

class Poor implements SpecificFeature { 
    @Override 
    long doSomething(String className, Date dateAlarm) throws Exception { 
     return -1; 
    } 
} 

interface SpecificFeature { 
    long doSomething(String className, Date dateAlarm) throws Exception; 
} 

Par mon souvenir spec WMA décrit comment l'application peut déterminer si elle est 1.1 ou 2.0.

1

Ce sera une erreur sur l'ancien téléphone, qui ne supporte pas les nouvelles fonctionnalités.

Utilisez Preprocessor pour compiler différentes versions pour les anciens et nouveaux téléphones à partir d'un paquet de code source.

1

Si la taille n'est pas un problème, vous ne devez pas nécessairement utiliser le prétraitement. Si vous n'utilisez pas les classes qui ne sont présentes que dans WMA 2.0, vous allez juste faire un saut sur NoSuchMethodErrors. Pensez à faire cela.

public void doSomeThing() 
{ 
    try{ 
    callWMA2_0Method(); 
    } 
    catch(NoSuchMethodError e) 
    { 
    // We're WMA 1.1 then 
    callWMA1_1Method(); 
    } 
} 

Bien sûr, vous ne pouvez compiler que contre WMA 2.0. Mais cela ne devrait pas être un problème

Questions connexes