Eu também não acreditei muito ao ler o texto, quero testar ainda hoje isso, mas o fato é que a Sony diz que é possível escolher um aplicativo Java ME como wallpaper do device. Ou seja, no lugar de uma foto, uma MIDet.
With the new Sony Ericsson Java Platform 7 (JP-7) phones such as the K610, K800, K790 and W850, a new feature that lets the developer enable a MIDlet as a standby application is introduced. This functionality will be included in JP-7 phones after the initial market release. Just as the end-user can assign pictures and themes as wallpaper it is now also possible to select Java applications for this purpose. This standby MIDlet is handled by the application manager, and is started when the phone enters the standby mode. It is stopped when the user selects another wallpaper, theme or picture.
Não acredita ainda?
Eu ainda vou testar pra ter certeza.. mas se funcionar, muito legal essa funcionalidade..
Encontrei um excelente artigo chamado “Getting Started with BlackBerry J2ME Development“, que mostra uma introdução na programação Java ME para BlackBerry e para as RIMlets, que são aplicativos mobile usando a BlackBerry API.
Para quem ainda não conhece a API é uma ótima pedida, para quem já possui um conhecimento, o material é pouco básico demais. Porém, para mim, que sou ainda iniciante na API, fiquei impressionado com a diferença entre a forma de persistência da MIDP padrão (também suportada nos BlackBerry´s) e da BlackBerry API.
Leia o artigo e baixe os códigos fonte de exemplo para ver isso também. Por hora, posso dizer que usando a BB API, você pode salvar objetos de forma direta (semelhante ao Hibernate por exemplo), eliminando boa parte do trabalho massante e chato dos RMS. Além disso, não existe limite de tamanho. Muito legal..
Aqui no blog Mobilidade é Tudo já falamos muito sobre o Java ME para BlackBerry. . Esta API traz varias mudanças em relação a Java ME que está presente na grande maioria dos telefones celulares, e hoje acabei descobrindo uma interface que seria muito útil para os programadores de aplicativos mobile Java ME.
Em uma lista de discussão fiquei sabendo da Interface PhoneListener. Implement this interface if you intend to listen for and act on phone events.
A lista de eventos que são capturados me impressionou:
callAdded(int callId): Invoked when a call gets added to a conference call.
callAnswered(int callId): Invoked when the user answers a call (user driven).
callConferenceCallEstablished(int callId): Invoked when a conference call has been established.
callConnected(int callId): Invoked when the network indicates a connected event (network driven).
callDirectConnectConnected(int callId): Invoked when a direct-connect call is connected.
callDirectConnectDisconnected(int callId): Invoked when a direct-connect call is disconnected.
callDisconnected(int callId): Invoked when a Call is disconnected.
callEndedByUser(int callId): Invoked when the user ends the call.
callFailed(int callId, int reason): Invoked when a call fails.
callHeld(int callId): Invoked when a call goes into the ‘held’ state.
callIncoming(int callId): Invoked when a new call is arriving.
callInitiated(int callid): Invoked when a call has been initiated by the device (outbound).
callRemoved(int callId): Invoked when a call gets removed from a conference call.
callResumed(int callId): Invoked when a call goes from ‘held’ to ‘resumed’ state.
callWaiting(int callid): Invoked when a call is waiting.
conferenceCallDisconnected(int callId)
Uma pena não podemos usar esta API nos nossos Nokias, Sonys, Motorolas, LG´s, etc e etc..
Nos dias 15, 16 e 17 está rolando o JustJava 2009 em São Paulo, infelizmente não poderei participar de todos os dias, na verdade só consegui ir até lá ontem. Felizmente, o pouco tempo que participei já valeu para ver a palestra “Java ME 360o - Do Sun SPOT a TV Digital”, ministrada por Antonio Marin Neto e Igor Medeiros. Os dois falaram sobre várias tecnologias muito legais que usavam alguma VM Java. Mas confesso que fiquei interessado mesmo foi pela caneta Java.
Para me ajudar a falar sobre esta interessantíssima criação, vou usar o post “A caneta de 1 milhão de dólares que roda Java“, do Blog do Spot. Bem, primeiramente, a caneta custa bem menos que 1 milhão, exatamente USD 149,00 para a versão com 1GB de RAM e USD 199,00 para a versão com 2GB. O título foi apenas uma brincadeira do blog.
Um pouco sobre a caneta: A caneta chamada Pulse SmartPen, que foi desenvolvida pela empresa chamada Livescribe, ganhou no JavaOne 2008 o prêmio Duke’s Choice Award como um dos projetos de inovação que utiliza a tecnologia Java. Esta caneta tem um processador ARM embutido de 32 bits, 150MHz e uma JVM com suporte a Java ME e CLDC 1.1 com Media Profile. Torna-se possível escrever programas em Java e fazer o upload via USB para a memória interna da caneta.
Algumas das possibilidades da caneta mágica:
a) Além de ser um mini-computador numa caneta, ela tem uma câmera de infravermelho de alta velocidade que permite capturar tudo aquilo que o usuário escrever num papel de um caderno especial.
Tudo aquilo que o usuário escreve é registrado na memória da caneta. Através de um programa instalado no computador é possivel transferir todas as páginas escritas para o computador e visualizar este conteúdo exatamente como foi escrito. Após a transferência do conteúdo para o computador, torna-se possível fazer o upload deste conteúdo para um site de compartilhamento da própria Livescribe em formato flash que pode ser exportado para PDF.
b) O recurso mais interessante é que a caneta tem um gravador de áudio embutido que permite gravar uma reunião, uma aula ou uma apresentação. Todo o áudio gravado é sincronizado com aquilo que é escrito e no momento no qual é escrito no caderno! Assim, torna-se possível depois da gravação, posicionar a caneta sobre uma palavra escrita no caderno para iniciar a reprodução do áudio gravado no momento que o texto foi escrito. O flash gerado também contem o áudio. O legal é quando o flash é reproduzido, toca o áudio e mostra o contéudo sendo escrito em sincronismo com o áudio como se fosse um filminho.
c) Um recurso bem legal é o fone de ouvido que tem em cada fone um microfone embutido que simula os ouvidos do usuário e o seu ponto de vista. Quando este fone é colocado nos ouvidos do usuário e ligado à caneta, simula os ouvidos do usuário através do microfone e permite gravar o áudio do ponto de vista do usuário. A tecnologia de gravação do áudio é chamada de Binaural que grava a posição espacial de onde o som vem (um exemplo bem legal desta tecnologia é o áudio chamado Virtual Barber Shop, que só funciona ouvindo com um fone de ouvido estéreo).
d) A caneta tem alguns aplicativos, como um tradutor para várias línguas. Ao posicionar a caneta sobre uma palavvra em inglês por exemplo, a caneta por falar a tradução para espanhol, por exemplo. Os aplicativos são trocados em uma espécia de menu 2D situado no próprio caderno.
Veja alguns vídeos:
E que tal transformar a caneta em um piano, preste atenção:
Demais essa caneta.. já to separando 500R$ pra comprar uma…
Continuando a tentativa de pagar minhas promessas em relação a promoção que o Mobilidade é Tudo fez, agora vou escrever o resultado de um breve estudo que fiz sobre a impressão de documentos em Java ME, acessando uma impressora sem fios. A idéia foi do Jonas: “Gostaria de ver um tutorial sobre tratamento e impressões de arquivos pdf em J2ME”.
Bem, quanto o tratamento de arquivos PDF em Java ME só entendendo a codificação PDF e fazendo um parser, oque vai dar bastante trabalho. Aliás, nem sei se dá para fazer isso. Referente a impressão, o trabalho também não vai ser mole não.
Infelizmente não há uma maneira simples de imprimir documentos em uma impressora através do Java ME. Nessa discussão, um usuário diz o seguinte:
I am developing this app in J2ME. Since, there are no APIs in J2ME that help in printing pages via a printer, I think, I will have to send PCL commands to the printer to print both text and image. I read a lot of documents, including PCL5 Technical Reference, for the sequence of PCL commands. But I haven’t succeeded in printing image, though the text is printing( unformatted ).
Tem mais sobre comandos PCL aqui e aqui. PCL é uma linguagem de comando para impressoras.
Nesta outra discussão, o usuário Sagatiba diz o seguinte: Eu ja trabalhei com um Nokia 2630 (o celular tinha que ser o mais barato) e uma impressora bluetooth com perfil serial. Elas emulam ESC/POS. Eh so tacar caractere nas bixinhas e ta bom d+. 24 colunas ou 42 colunas para impressao. De novo, o tratamento será em nível de impressora mesmo, tento que entender alguns protocolos utilizados por ela.
Nesta outra discussão, um usuário fala o seguinte: I’ve had some fun looking all that up, but have to run, so for a start, you might want to look at the BPP specs at http://www.bluetooth.com/NR/rdonlyres/28EC09DC-1598-4889-9B7E-3E8D9803FFBA/2940/BPP_SPEC_V12r01.pdf. I haven’t found out if anyone’s done a J2ME package for this. Novamente o programador terá que entender e programar um protocolo baixo nível.
Mas, nem tudo está perdido, encontrei o Java Driver for Brother MW-140BT mobile bluetooth printer. Segundo o site oficial, the goal of this project is to use the Brother MW-140BT printer (which is connected via bluetooth) from within a java environment (especially J2ME). O site oficial traz inclusive um .jad e um .jar de exemplo. Infelizmente não tenho impressora Bluetooth, nem adaptador, sendo assim, não consegui testar.
Como falei anteriormente, não pude completar os estudos por não ter como testar, mas acho que a última solução pode ajudar bastante, ou, prepare a xícara de café e comece a aprender alguns protocolos novos :). Isso daria um belo framework hein.
* New Styling concept - first announced here, this new feature revolutionizes the way LWUIT treats styles. Rather than have a single style object per component we can have 2 or more styles and the component can replace them in runtime based on state (this is very similar to CSS e.g. hover selector).
All components now have a selected/unselected style to represent focus, this essentially deprecates fg/bgSelection attributes instead allowing you to customize every style attribute for selection state (e.g. bgImage, transparency, border etc.).
* New LWUIT Designer (formerly Resource Editor) - I’ve spent allot of time working on this particular feature, one of the coolest things is that if you have Java 6 installed you will see an orange button here & you can just click it to launch the LWUIT Designer using Java Web Start.
The LWUIT designer supports the new styles concept allowing your designer far greater power in determining the theme for LWUIT applications. We also updated the resource file format (more on that later) which allows us to export the resource file into an Ant task structure (frequently requested feature that was previously impossible).
We also offer lots of great usability features such as Copy & Paste for theme entries, simpler image border editing, easier to use preview etc.
* Support for setUIID - this was technically impossible in previous releases of LWUIT but newer changes allowed Chen to implement this revolutionary feature. You can now easily make TextArea or button have a label style rather than start manipulating borders, this works better with the theming support as well.
* Background Painter Features - Style now includes more elaborate image scaling, tiling, centering as well as gradient backgrounds (Radial, Linear etc.). These are supported by the LWUIT designer and by the standard LWUIT background painter, allowing a designer more power without code changes.
This also allows reducing resource sizes since no images are required for some very elaborate themes! E.g. the theme created here is 7kb with the bitmap font and 622 BYTES without it!
* Scrolling in LWUIT with components greater than screen size has always been a problem, this is now fixed in with a rather complex recursive algorithm. This is still not the non-focus based scrolling we would expect in the future but it does simplify some common use cases.
* SVGImage is now deprecated, instead we can integrate SVG’s directly into LWUIT via the SVGImplementionFactory by calling SVGImplementionFactory.init() before the first Display.init() call.
This would allow Image.createSVG to “just work” on devices with JSR 226 support. Since the SVG related code is entirely within the SVGImplementation it wouldn’t appear in versions of LWUIT that don’t include the SVGImplementionFactory.
We intend to offer full SVG support in the LWUIT Designer soon, this will also allow fallback images so devices without SVG support will see an “auto generated” PNG file.
* Fonts have been rewritten to include more information in the resource file and allow us to load a font by name. This will allow truetype fonts when supported by the native platform e.g. in MIDP 3 or JSR 287.
* The Ant task used to create theme now uses the same code base as the LWUIT designer and follows a somewhat modified syntax. I’ll try to blog about this more in the future, the advantage is that we would be able to track changes more easily to both.
This allowed us to find quite a few bugs in both tools so its a great feature at that.
* New Calendar component is redesigned to use component/container hierarchy rather than custom painting. This solved allow of issues we had with the calendar such as proper touch phone support.
* The LWUIT distribution includes a PDF with a specification of the resource file format used by the LWUIT Designer/ant task.
This is an important step in formalizing the file for future versions and for corporate uses that might need such information. We are considering the option of providing a desktop based resource file generation API, I will hopefully post about this in the future soliciting feedback.
Besides the above LWUIT looks & feels better and faster than ever with every version, we shrunk code size in some use cases and try to provide more power to developers. The full list of changes is too big to mention e.g. one of the last things to make it into the release was the often requested “minimize” feature…
Confesso que nem testei ainda… se alguém já fez isso, pode dizer oque achou nos comentários..
Esse post é especialmente para quem trabalha com a plataforma Java ME. Bem, quando criamos um aplicativo Java ME que precisa se conectar a internet, geralmente através do protocolo HTTP, precisamos gerenciar a Thread que tratará deste protocolo, cuidar dos dados que chegarão, dentre outras coisas. Porém, por acaso, descobri algumas linhas de códigos que podem facilitar nossa vida, e muito.
O post “Comunicação paralela com servidor em aplicações J2ME com HttpConnection usando componente reutilizável“, do blog DevMobile, fala sobre duas classes utilitárias que permitem o acesso a um servidor atravpes de HttpConnection em apenas uma linha de código. Texto retirado do blog: Estarei apresentando neste artigo uma das melhores práticas para fazer a comunicação com o servidor usando HttpConnection em aplicações móveis J2ME, iniciando a conexão com apenas uma linha de código. Ensinarei a criar uma classe reutilizável responsável por toda a comunicação com o servidor, deixando sua aplicação mais lógica, enxuta e melhor estruturada. Você poderá inclusive disparar várias conexões paralelas, e ainda assim, ao receber os dados, terá o controle de qual conexão se trata. Poderá facilmente cancelar a requisição, caso queira. Se aplicar as informações deste artigo em seus projetos, você passará a se preocupar apenas com as regras de negócio, apenas trabalhará com a informação em si, despreocupando-se com quaisquer detalhes quanto à comunicação com o servidor.
Eu baixei as duas classes e já usei inclusive em um trabalho que tive que entregar ontem a noite. Fiquei impressionado com a velocidade. Infelizente a classe nao possui uma barra de progresso, mas, o código é aberto e o desenvolvedor pode implementar isso.
Parabéns para o Nelson Pereira Junior que teve essa idéia.. As suas duas classes facilitarão muito a parte de acesso web do meu projeto..
Hoje recebi uma ótima notícia.. mas muito boa mesmo.. o site Mobideia publicou o post sobre o novo Java ME SDK 3.0, acabei baixando e testando ele, a ferramenta contém muitas novidades muito legais.. algumas delas são:
* Integração com emuladores de terceiros, bem como, de dispositivos com Windows Mobile;
* Simplificação no processo de deploy em dispositivos reais;
* Integração do CDLC/MIDP, CDC/FP/PBP/AGUI e BD-J em um único SDK, não sendo mais necessário o download e instalação de pacotes separados;
* Uma nova máquina virtual HotSpot CLDC, em substituição à antiga KVM;
* MSA 1.1 otimizado e com extensões;
* Suporte a profiling;
* Suporte a BD-J;
* Novo ambiente de desenvolvimento baseado na plataforma Netbeans;
* Integração com Lightweight UI Toolkit (LWUIT);
* Pesquisa por especificações técnicas de dispositivos integrado no SDK.
Na minha opinião, os novas features mais importantes foram destacadas em negrito na listagem acima, porém, quero destacar muittoo duas delas: suporte a BD-J (você pode programar para player blue-ray) e suporte a CDC (quem já teve que programar CDC até hoje sabe a complicação)..
Não vou me estender muito no texto porque no Mobipedia tem mais informações e também, na fonte principal, o JavaMovel.
Outra pequena observação, eu tentei criar um projeto para BlueRay, porém, ele dá um erro quando tenta emular o programa no ArcSoft TotalMedia Theatre.. mas não fui atrás desse erro para resolver.. digamos que estou com outras pendências..
Li uma notícia que me deixou extremamente feliz, foi no blog Mobideia, em um post chamado “Lançado um Add-on Mobile Sensor API para Nokia 5800 Xpress“. Como já foi discutido aqui no Mobilidade é Tudo, a Mobile Sensor é uma especificação da Sun para que dispositivos Java ME possam capturam dados de sensores, dos mais diversos tipos, deste sensores conhecidos, como acelerômetro, até outro sinistros, dependendo da implementação do fabricante. Sendo assim, fiquei doido quando li “acabei de descobrir que no site do Fórum da Nokia foi lançado recentemente um pacote de instalação para o Mobile Sensor API em aparelhos Symbian 5nd Ed. para desenvolvimento de aplicativos em Java”, porém, minha felicidade logo acabou quando reli a parte Symbian 5nd Ed., o único Nokia que tenho aqui é uma versão inferior. Porém, de qualquer maneira, é uma bela iniciativa da Nokia e uma boa ajuda para disseminar esta JSR…
Primeiro, fui saber um pouquinho mais sobre os discos Blu-Ray na Wikipedia, segundo o site, Blu-ray, também conhecido como BD (de Blu-ray Disc) é um formato de disco óptico da nova geração de 12 cm de diâmetro (igual ao CD e ao DVD) para vídeo de alta definição e armazenamento de dados de alta densidade. É o sucessor do DVD e capaz de armazenar filmes até 1080p Full HD de até 4 horas sem perdas. Requer obviamente uma TV de alta definição (Plasma ou LCD) para exibir todo seu potencial e justificar a troca do DVD. Sua capacidade varia de 25 (camada simples) a 50 (camada dupla) Gigabytes. O disco Blu-Ray faz uso de um laser de cor azul-violeta, cujo comprimento de onda é 405 nanometros, permitindo gravar mais informação num disco do mesmo tamanho usado por tecnologias anteriores (o DVD usa um laser de cor vermelha de 650 nanometros).
Porém, neste mesmo link oque me chamou a atenção foi o parágrafo: Na feira JavaOne de 2005, foi anunciado que o software ambiente multi-plataforma Java da Sun Microsystems seria incluído em todos os “tocadores” Blu-ray como uma parte obrigatória do padrão. Java é usada para aplicar menus interativos em discos Blu-ray, em oposição ao método usado em DVD de vídeo, que utiliza segmentos MPEG pré prestados e imagens de legenda selecionáveis, que é consideravelmente mais primitivo e menos perfeito. James Gosling, criador do Java, na conferência, sugeriu que a inclusão de uma máquina virtual Java bem como conectividade de rede em alguns dispositivos BD irá permitir atualizações para os discos Blu-ray através da Internet, acrescentando conteúdos, tais como idiomas de legenda adicionais e recursos promocionais que não estão incluídos no disco no momento (Atualmente os tocadores de BD de nova geração vem com esta funcionalidade, são chamados de aparelhos blu-ray 2.0, ou segunda geração, onde dados referentes aos filmes em execução são baixados por uma porta ethernet do player). Esta versão Java é chamada de BD-J e é um subconjunto do padrão Globally Executable MHP (GEM). GEM é a versão mundial do padrão Multimedia Home Platform.
Já estava doidinho porque, já imaginaram que legal seria programar para discos Blu-Ray.. Pra finalizar com cheva de encontrei o site “Blu-ray Application Development using Java ME“. Fantástico, com muita informação.
Fiquei com muita vontade de ter um aparelho Blu-Ray só para fazer uns testes malucos :)..