Evento do Botão Vermelho (END)

Tem como eu capturar o evento do botão END???
Eu tenho em minha aplicação o comando Sair que é um Command.EXIT e que ao ser acionado envia uma menssagem ao servidor e fecha a aplicação… mas qaundo o usuário clica no botão END(Botão vermelhão) a aplicação fecha direto sem enviar a menssagem ao servidor.

posta o código ai, fica mais fácil de entender…

Criando o botão Sair:

cmSair = new Command("Sair", Command.EXIT, 0);

Código que trata o evento:

   public void commandAction(Command c, Displayable disp) {                                               
        if (disp == form) {                                           
            if (c == cmSair) {                                         
                com.desconectar();
                System.exit(0);                                       
            }
        }

O que eu preciso é capturar e tratar o evento do botão END do celular… aquele botao vermelho que usamos par desligar o celular ou fechar uma aplicação mais rapidamente.

Nem precisa postar o código não.

Isto é normal dos celulares. O botão END é uma forma abrupta de sair de qualquer aplicação Java.

Funciona em várias marcas e modelos e NÃO HÁ como capturar sua teclada, ou seja, se o usuário clicar 1 vez ou manter apertado, a aplicação será terminada sem dó.

Huahuahua siniiiissstro… valeu, muito obrigado.

[quote]Tem como eu capturar o evento do botão END???
Eu tenho em minha aplicação o comando Sair que é um Command.EXIT e que ao ser acionado envia uma menssagem ao servidor e fecha a aplicação… mas qaundo o usuário clica no botão END(Botão vermelhão) a aplicação fecha direto sem enviar a menssagem ao servidor.[/quote]

Ter tem mas se você quer executar um código quando a aplicação for encerrada use o notificador de ciclo de vida do midlet.

Em celulares multi-task o END não encerra, apenas suspende.

Outra coisa, não use System.exit() !!

[quote=cmoscoso]
Em celulares multi-task o END não encerra, apenas suspende.[/quote]

Vários Nokias usam Symbian e nem por isto o END suspende.

Decidi fazer um teste prático em um Nokia com Symbian 9.2.

Entrei em uma determinada tela da aplicação e apertei o END.

O S.O. me jogou de volta para a tela inicial do aparelho.

Entrei de novo no menu Aplicativos e cliquei no ícone da aplicação e ele não me trouxe a aplicação aberta, mas sim executou ela novamente do zero. Isto mostra que não existia instância anterior, portanto o END encerrou a app mesmo.

Na especificação diz que uma aplicação pode requerer ficar em background se passar null para setCurrent, mas vai depender do AMS implementar isto ou não.

[quote=cmoscoso]
Outra coisa, não use System.exit() !![/quote]

OK!!! Parei de usar.
Realmente a aplicação é encerrada de vez… se não tem como capturar e tratar este comando então é meos código à implementar :).

O END sempre retorna para a tela inicial por questão de usabilidade, mas não espere que isso encerre as aplicações sempre. Independente disso o mais apropriado é colocar o código de encerramento no destroyApp.

Eu tenho feito isso pois o pessoal que saca mais de JME recomenda. Mas por que não usar o System.exit()??? Qual a desvantagem dele?

Você não pode chamar System.exit() em aplicações MIDP pois não é suportado. Se usar, vai ocorrer uma exceção, que logicamente pode fechar a aplicação.

Você deve usar sempre notifyDestroyed().