J2ME应用程序在诺基亚n81和三星f330等不起作用,但适用于BB和诺基亚N97等

时间:2012-03-08 19:09:36

标签: blackberry mobile java-me nokia samsung-mobile

我在 J2ME 中做了一个小应用,它只是用目标链接打开浏览器。

尽管如此,它适用于某些型号的手机,而其他型号则不适用。

适用于:

  • BlackBerry 9000。
  • 诺基亚n97。
  • BlackBerry Javeline 8900

的工作:

  • 诺基亚e71:它安装了应用程序,但浏览器无法打开。
  • 诺基亚n81:同上。
  • 三星f330:它无法安装该应用程序。
  • BB 9800:安装好。浏览器页面确定。关闭应用程序时,它会重新启动。 (也许在 JavaME 中使用某种“finish()”会有帮助吗?)

我不知道为什么它在某些手机中有效,而在其他手机中则无效。从理论上讲,它应该适用于支持 J2ME JavaME )的每部手机。

编辑:以下是相关代码。

protected void startApp() throws MIDletStateChangeException {
        // TODO Auto-generated method stub

    boolean mustExit = false;
    try {

        /**
         * mustExit - Boolean
         * 
         * Some MIDP platforms are more restricted than others.
         * For example, some don't support concurrent processing,
         * so the MIDlet must exit before the platform can honor
         * a service request.
         * 
         * If <true> destroy the app. So the browser
         * can start.
         */
        mustExit = platformRequest("http://www.stackoverflow.com");
    } catch (ConnectionNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    if(mustExit){
        destroyApp(true);
        notifyDestroyed();
    }

    //Display.getDisplay(this).setCurrent(timeAlert);

}

1 个答案:

答案 0 :(得分:6)

您不应该在platformRequest等生命周期方法中执行startApp()之类的操作。这是一个异步操作,需要询问用户权限等。这不应该在系统线程上完成。

调用系统线程的方法应尽可能快地返回,因为线程可能会负责执行其他操作,如屏幕重绘或处理用户输入。 platformRequest是阻止操作,会导致您的设备冻结。

有些设备可以比其他设备更好地处理这种情况,这就是您看到差异的原因。

启动一个新线程来执行platformRequest并且一切都应该很好;你几乎可以在任何地方开始你的新线程。