【问题标题】:J2ME do cellphones have an auto-disable feature for non-compatible Packages?J2ME 手机对不兼容的包有自动禁用功能吗?
【发布时间】:2011-08-11 13:21:22
【问题描述】:

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

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

【问题讨论】:

    标签: sms java-me wma


    【解决方案1】:

    我会考虑使用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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-03
          • 1970-01-01
          • 2012-06-16
          • 1970-01-01
          • 2011-05-01
          相关资源
          最近更新 更多