2

我想知道,例如,如果我开发了一个包含 WMA 包(1.1 和 2.0)的应用程序,然后将其部署到仅支持 WMA 1.1 的旧手机型号,手机会禁用 2.0 包吗?

代码在包之间设置的功能没有什么不同,但 2.0 包为该代码提供了额外的功能,最终成为最新手机的最佳选择。

4

3 回答 3

2

我会考虑Class.forName根据设备是否支持 WMA 2 来加载适当的代码

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;
}

根据我的回忆,WMA 规范描述了应用程序如何确定它是1.1还是2.0.

于 2011-08-13T15:30:37.370 回答
1

这将是旧手机上的错误,不支持新功能。

使用预处理器从一个源代码包中为新旧手机编译不同的版本。

于 2011-08-11T13:27:56.867 回答
1

如果大小不是问题,则不必使用预处理。如果您不使用仅存在于 WMA 2.0 中的类,您只会遇到 NoSuchMethodErrors。考虑这样做。

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

当然,您当然只能针对 WMA 2.0 进行编译。但这应该不是问题

于 2011-08-11T17:46:48.437 回答