Приложение J2ME не работает в Nokia n81 и Samsung f330 и т. Д., Но работает в BB и Nokia n97 и т. Д. - PullRequest
4 голосов
/ 08 марта 2012

Я сделал небольшое приложение в J2ME , оно просто открывало браузер с целевой ссылкой.

Тем не менее, в некоторых моделях телефонов это работает, а в других - нет.

Работает в:

  • BlackBerry 9000.
  • Nokia n97.
  • BlackBerry Javeline 8900

Id не не работает в:

  • Nokia e71: приложение устанавливается, но браузер не открывается.
  • Nokia n81: То же самое.
  • Samsung f330: не может установить приложение.
  • BB 9800: установить ОК. Браузер со страницей ОК. При закрытии приложения оно перезапускается. (может быть, использование какого-то метода «finish ()» в JavaME поможет?)

Я не знаю, почему это работает в некоторых телефонах, а в других нет. Теоретически он должен работать с каждым телефоном с поддержкой 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 Ответ

6 голосов
/ 09 марта 2012

Вы не должны делать что-то вроде platformRequest в методе жизненного цикла, таком как startApp(). Это асинхронная операция, она должна запрашивать разрешение у пользователя и т. Д. Это не должно выполняться в системном потоке.

Методы, вызываемые в системном потоке, должны возвращаться как можно ближе к немедленному значению, поскольку поток, скорее всего, будет отвечать за другие действия, такие как перерисовка экрана или обработка ввода пользователя. platformRequest является операцией блокировки и приведет к зависанию вашего устройства.

Некоторые устройства могут справиться с этим лучше, чем другие, поэтому вы видите несоответствие.

Начните новую тему, чтобы сделать platformRequest, и все должно быть хорошо; Вы можете начать новую тему практически в любом месте.

...