O documento fornece uma introdução ao framework Bada da Samsung, descrevendo suas características principais, como rodar acima do Linux e disponibilizar dois dispositivos, e instruções passo a passo para instalação do SDK e criação de um aplicativo "Olá Mundo".
A hora de criar LBS para pequenos dispositivos é agora!!
Conhecendo o Bada SDK
1. >> Conhecendo o Bada <<
>> Não é buda ou banda por acaso?
Não, é Bada mesmo. O Bada é um framework situado acima do
sistema operacional. Para muitos é chamado de sistema operacional, mas a
verdade é que ele trabalha sobre uma versão do Linux.
No mercado já existem dois aparelhos com o Bada. O Samsung
Wave e o Samsung Jet.
Apesar de novo, a Samsung já liberou um SDK para os
desenvolvedores, além disso, criou o Bada Developer Challenge, que
premia os melhores aplicativos para esta plataforma.
Este pequeno artigo é uma visão geral e bem sucinta do Bada, visto
que o próprio autor era leigo no assunto a apenas algumas horas.
>> Gostei disso, como instalo o SDK?
O kit de desenvolvimento é baseado na IDE Eclipse, ou seja, para
quem já utiliza esta ferramenta a curva de aprendizado é quase inexistente.
Além das ferramentas padrões como compilador, depurador e editor de
código, o sdk possui uma ferramenta espetacular, o UI Builder. Aguarde
um pouco e verá.
2. A instalação se dá em 8 passos:
• Baixar o sdk aqui. É necessário criar um usuário antes do
download.
• Depois do download efetuado, descompacte a pasta em um
lugar de seu interesse. A árvore de diretórios deve ser
assim:
• Dê um duplo clique no instalador. O wizard começa pela
tela abaixo. Clique em Next.
3. • O próximo passo é aceitar a licença. Leia o texto e clique
em I Agree.
• Escolha os componentes a serem instalados.
4. • Especifique o diretório onde o SDK será instalado.
• Especifique o shortcut para o Windows e clique em Install.
5. • Agora espere a instalação concluir suas etapas.
• Se receber a tela abaixo tudo ocorreu bem e já podemos
passar para o Hello World.
6. • Para garantir que tudo deu certo, seu Windows deve
mostrar o seguinte menu na lista de programas:
Figura 1: Menu windows.
• Para ter mais certeza ainda, clique em Simulator:
7. >> Quero criar meu primeiro aplicativo Bada
Lembram da Figura 1, cliquem em badaIDE.
Quando a IDE/Eclipse estiver aberta, navegue para file->new->bada
application proejct.
Depois disso informe o nome do projeto e o seu tipo de protótipo,
que deve ser bada Frame Based Application
8. Sobre os tipos de projeto:
Segundo a documentação:
• bada Frame Based Application: cria um simples projeto baseado
em um frame. O template já cria as funcionalidades básicas da
aplicação para mostrar o nome do projeto na tela.
• bada Form Based Application: cria um simples projeto baseado
em Form. Contém as funcionalidades básicas para desenhar um
Form na tela.
• bada Empty Project: cria um projeto somente com os arquivos
essenciais.
• bada Static Library: cria uma biblioteca.
O próximo passo é configurar o path do bada SDK.
9. Posteriormente, vamos definir qual arquivo de manifesto
vamos usar.
Podemos utilizar o manifesto padrão enquanto estivermos apenas
estudando o sdk e a API do Bada. Porém, quando este trabalho for
10. profissional e exigir a distribuição da aplicação, é necessário criar este
manifesto a partir do site da Samsung.
Estamos quase acabando!!!!
Agora, defina o criador da aplicação bem como sua descrição básica.
Depois disso já podemos finalizar o projeto.
Depois que o projeto foi criado, a IDE cria a seguinte árvore de
diretórios:
11. Figura 2: árvore de diretórios.
Rode o projeto como bada Simulator Application. Se tudo ocorreu
certo, você verá o celular abaixo na sua tela.
Calma, se um erro Launch File. Binaty not found foi lançado, apenas
clique com o botão direito no nome projeto e escolha Build Project.
Execute o projeto novamente:
12. >> Um pouco sobre o aplicativo gerado pela IDE
Para entender toda a árvore de diretórios e arquivos, indico a leitura
da documentação oficial. Para nós, iniciantes no Bada vamos com mais
calma. Por hora só precisamos saber que a pasta src contém os códigos
fontes do aplicativo. Os resources também são importantes, mas serão
vistos daqui a pouco.
Vamos a alguns pontos importantes do código fonte:
• O ponto de entrada da aplicação é o método OspMain(),
presente em HelloWorldEntry.cpp;
• A instância da aplicação é criada usando o método
CreateInstance, presente em HelloWorld.cpp;
• Os recursos da aplicação, como o arquivo XML de layout
por exemplo, são inicializados usando o método
OnAppInitializing(), presente em HelloWorld.cpp;
• Os recursos alocados serão destruídos e os estados da
aplicação salvos usando o método OnAppTerminating;
presente em HelloWorld.cpp;
13. • Além disso, outros métodos são criados para tratar
determinados eventos relativos a aplicação. Veja parte do
código na listagem abaixo.
void
HelloWorld::OnForeground(void)
{
// Começe ou reinicie o desenho da tela quando a aplicação é movida
para foreground.
Canvas* pCanvas = GetAppFrame()->GetCanvasN();
Font font;
font.Construct(FONT_STYLE_PLAIN | FONT_STYLE_BOLD, 50);
pCanvas->SetFont(font);
pCanvas->DrawText(Point(30, 30), GetAppName());
pCanvas->Show();
delete pCanvas;
}
void
HelloWorld::OnBackground(void)
{
// para a pintura na tela quando a aplicação é movida para background.
}
void
HelloWorld::OnLowMemory(void)
{
// Libere recursos não utilizados ou feche a aplicação
}
void
HelloWorld::OnBatteryLevelChanged(BatteryLevel batteryLevel)
{
// Lidar com as alterações de nível de bateria aqui.
// Pare de usar mídia se estiver fazendo (camera, mp3 etc.) quando o
nível da bateria é CRITICAL.
}
Com a listagem de código acima o leitor já deve ter percebido um
dado muito importante. Não lidamos com Java aqui, mas sim com C++.
>> Brincando um pouco com eventos
Só para ter uma idéia do tratamento de eventos no Bada vamos
brincar um pouco com o HelloWorld. A missão é criar um código que
intercepe eventos de bateria e diga ao usuário a situação da carga do seu
aparelho móvel.
Reescreva o método OnBatteryLevelChanged para:
14. void
HelloWorld::OnBatteryLevelChanged(BatteryLevel batteryLevel)
{
Canvas* pCanvas = GetAppFrame()->GetCanvasN();
Font font;
font.Construct(FONT_STYLE_PLAIN | FONT_STYLE_BOLD, 50);
pCanvas->Clear();
pCanvas->FillRectangle(Color(255, 255, 255, 30),
Rectangle(0, 0, pCanvas->GetBounds().width, pCanvas-
>GetBounds().height));
pCanvas->SetFont(font);
pCanvas->DrawText(Point(30, 30), GetAppName());
if (batteryLevel == BATTERY_CRITICAL)
pCanvas->DrawText(Point(30, 90), "Crítica");
else if (batteryLevel == BATTERY_EMPTY)
pCanvas->DrawText(Point(30, 90), "Vazia");
else if (batteryLevel == BATTERY_FULL)
pCanvas->DrawText(Point(30, 90), "Cheia");
else if (batteryLevel == BATTERY_HIGH)
pCanvas->DrawText(Point(30, 90), "Alta");
else if (batteryLevel == BATTERY_LOW)
pCanvas->DrawText(Point(30, 90), "Baixa");
pCanvas->Show();
delete pCanvas;
// TODO:
// Handle any changes in battery level here.
// Stop using multimedia features(camera, mp3 etc.) if the
battery level is CRITICAL.
}
Rode a aplicação novamente. Clique com o botão direito no
emulador, depois clique em Event Injector. No wizard que receber, clique
em Device, localizado na extremidade direita das tabs superiores:
15. Em Battery Level escreva 99 e clique em Send Battery File.
>> Melhorando a interface e conhecendo o UIBuilder
Agora vamo apresentar um ponto que me chamou muito a atenção no
SDK do Bada, fazendo eu esquecer o fato de usar C++ e não Java.
16. ***** Para entender os conceitos de UI no Bada visite a
documentação aqui.
A interface gráfica de uma aplicação Bada é constituída de uma ou
mais application views. Cada view é uma janela full-screen da aplicação
que é representada por um Form, contendo uma barra de indicadores, soft
keys e uma barra de título. Além disso, um Form contém controles, que
podem ser controles puros ou containers que contém controles.
Todos os forms de uma aplicação precisam ser anexados a um
Frame. Pode haver somente um frame por aplicação. Fonte: aqui.
Figura: componentes GUI.
Então vamos criar um Form.
Revejam a Figura 2 por favor. Anteriormente eu disse o seguinte:
“Os resources também são importantes, mas serão vistos daqui a pouco.”
Na verdade eles serão vistos agora.
Vamos adicionar um recurso a nossa aplicação.
Clique em Form e depois Insert Resource:
17. Agora a magia começa:
Dê um duplo clique no formulário para ver suas propriedades na
parte inferior.
Nas propriedades configure o título do form, bem como o label para
Soft Key 0 e Soft Key 1.
18. Já conseguimos isso:
Para adicionar os controles, os componentes se preferirem, o
desenvolvedor tem algumas opções na aba Palette.
Utilizando o arrastar e colar, construa uma tela conforme a imagem
abaixo:
19. Construindo esta tela, somente clicando a arrastando os componentes
me deu uma saudade do Java ME, de criar as telas com diretivas gráficas,
com seus drawRect, drawString etc e etc.
Mas calma, ainda não fizemos todo o trabalho. Clique com o botão
direito no Form e escolha Add Class. Chame a classe de Listener e informe
que desejas controlar tudo o que é possível:
20. Depois do Finish vamos visitar o HelloWorld.cpp.
Veja o comentário do método OnAppInitilçizing(), ele diz o seguinte:
// TODO:
// Initialize UI resources and application specific data.
// The application's permanent data and context can be obtained from
the appRegistry.
//
// If this method is successful, return true; otherwise, return false.
// If this method returns false, the application will be terminated.
// Uncomment the following statement to listen to the screen on/off
events.
//PowerManager::SetScreenEventListener(*this);
Já que diz que é nesse método que inicializamos os recursos de
interface gráfica, substitua esse método por esta versão:
bool
HelloWorld::OnAppInitializing(AppRegistry& appRegistry)
21. {
Listener *pForm1 = new Listener();
pForm1->Construct(L"IDF_FORM1");
Frame *pFrame = GetAppFrame()->GetFrame();
pFrame->AddControl(*pForm1);
pFrame->SetCurrentForm(*pForm1);
pForm1->RequestRedraw();
return true;
}
Ao esqueça de adicionar essa linha no início do código:
#include "Listener.h"
Agora vamos rodar novamente o aplicativo e sorrir:
22. E oque acham do controle da hora:
Quantas linhas programamos mesmo?
>> Conclusão. Oque concluir?
O Bada está recém chegando no mundo móbile, ainda é impossível
qualquer direcionamento sem um pouco de achômetro. Façamos o seguinte,
tirem suas conclusões, ou ainda, vamos discutir isso com os comentários
desse artigo. Mas duas coisas são fatos:
23. * A Samsung poderia deixar de querer reiventar a roda e adotar
Android.
* O UI Builder é extremamente útil e poderoso. Isso pode ser um
importante diferencial.