Este documento fornece um resumo da aula sobre testes, aplicações multimídia e aplicativos da web em Android. Ele discute estruturas de teste em Android baseadas no JUnit, ferramentas como MonkeyRunner e ADT, e como testar atividades, provedores de conteúdo e serviços. Também explica como reproduzir e gravar áudio e vídeo, usar a câmera e a engine JET. Por fim, aborda o uso de WebViews para exibir páginas da web em aplicativos e como lidar com navega
Testes, Aplicações Multimídia e Web Apps em Android
1. Erisvaldo Gadelha Saraiva Júnior
Faculdade de Tecnologia de João Pessoa (FATEC-JP)
Especialização em Desenvolvimento para Dispositivos Móveis
Disciplina: Tecnologias para Dispositivos Móveis
Android (Parte 4)
E-mail: erisvaldojunior@gmail.com
Site: http://erisvaldojunior.com
Twitter: @erisvaldojunior
2. Roteiro da Aula
TESTES APLICAÇÕES WEB APPS
MULTIMÍDIA
Testes, Aplicações Multimídia e Web Apps em Android
4. Estrutura de Testes
A suíte de testes em Android é baseada no JUnit. Android provê
extensões do JUnit para testes de componentes específicos.
Testes em Android
5. MonkeyRunner
Ferramenta que provê uma API para Python que permite ao
desenvolvedor escrever programas que controlam dispositivos
Android ou emuladores externamente.
• Controle de Múltiplos Dispositivos – Executar um ou mais
Testes em Android
testes em múltiplos dispositivos ou emuladores
simultaneamente;
• Testes Funcionais – O desenvolvedor provê entradas
(teclado, touch, etc) e visualiza saídas por screenshots;
• Testes de Regressão – verifica se uma aplicação está
correta comparando com screenshots de referência;
• Automação Extensível – Pode ser estendido para criar
sistemas completos de controle de dispositivos Android.
6. Exemplo de Programa em MonkeyRunner
Código que conecta-se a um dispositivo, instala uma aplicação
Android, executa uma Activity, envia eventos de teclado para a
mesma e armazena o retorno (screenshots).
Testes em Android
7. UI/Application Exerciser Monkey
Programa que executa no emulador ou dispositivo e gera
entradas de usuário aleatórias (cliques, toques, gestos), além de
eventos aleatórios de sistema. Ideal para Teste de Stress.
Testes em Android
SINTAXE
EXEMPLO BÁSICO DE USO
8. Testes em Android com o ADT
O projeto de testes deve ser criado pelo ADT. O
InstrumentationTestRunner é o executor dos casos de teste.
• Ao criar um projeto de testes pelo ADT, o plugin vincula a suíte de
Testes em Android
testes ao aplicativo de origem, inserindo automaticamente as
informações necessários no arquivo de manifesto;
• É possível importar as classes que estão sob teste rapidamente,
permitindo sua inspeção;
• Executa seus testes sem sair do Eclipse. O ADT roda sua aplicação e sua
suíte de testes automaticamente, mostrando os resultados em telas
separadas do Eclipse.
11. Exemplo de Classe de Teste
• Construtor – Obrigatório. Requerido pelo Android Test
Framework;
• setUp() – sobrescreve o setUp() do Junit. Inicializa o
Testes em Android
ambiente antes da execução dos testes;
• testPreconditions() – define um pequeno teste que
assegura que a aplicação iniciou corretamente;
• testText() – Exemplo de teste unitário real para interfaces.
Assegura que o que está sendo mostrado na tela é o mesmo
que está contido nos recursos da aplicação (strings.xml).
12. Exemplo de Classe de Teste
Construtor
Inicialização de variáveis
Testes em Android
Pré-condições
Código de teste
14. Testando uma Activity
Como testar?
• ActivityInstrumentationTestCase2 – Sua classe de testes de
uma Activity deve estender essa classe;
• ActivityUnitTestCase – Testa uma Activity isolada. Usado
Testes em Android
para realizar testes unitários que não interagem com o
Android (testes isolados).
O que testar?
• Validar entradas – verificar entradas aceitáveis em EditText
e mensagens de erro mostradas para entradas inválidas;
• Eventos de Ciclo de vida – retorno de eventos como
onCreate() e onCick();
• Tamanhos de tela e resoluções – usar AVDs e realizar
vários deploys para verificar o layout das Activities.
15. Testando um Content Provider
Como testar?
• ProviderTestCase2 – Sua classe de testes de um
ContentProvider deve estender essa classe;
• MockContentResolver – possibilita a criação de uma
Testes em Android
instância do provedor de conteúdo mas com dados de teste.
O que testar?
• Interações comuns do provedor de conteúdo – onCreate(),
getType(), query(), insert(), delete() e update();
• URIs e Constantes – Testar todas as URIs e constantes
oferecidas pelo provider.
16. Testando um Service
Como testar?
• ServiceTestCase – Sua classe de testes de um Service deve
estender essa classe.
Testes em Android
O que testar?
• Múltiplas chamadas a startService() – Testar se o serviço
consegue ligar com múltiplas chamadas a startService().
Apenas a primeira invoca o onCreate(), mas todas chamam o
onStartCommand().
• Parada do serviço – Testar se o serviço para de executar no
momento correto.
18. Core Media Formats
Formatos de Mídia Suportados Formatos de mídia suportados por todos os dispositivos Android.
19. Reprodução e Gravação de Áudio e Vídeo
Áudio e Vídeo em Android
Reprodução Gravação
MediaPlayer MediaRecorder
20. Reproduzindo Áudio de um Raw Resource
Insere-se o arquivo na pasta res/raw, sendo possível localizá-lo
com a classe R gerada pelo Android.
Iniciar a execução
Reprodução de Áudio
MediaPlayer mp = MediaPlayer.create(context, R.raw.nome_arquivo);
mp.start();
Pausar e recomeçar Parar e recomeçar
mp.pause(); mp.stop();
mp.start();
mp.reset();
mp.prepare();
mp.start();
21. Reproduzindo Áudio de um Arquivo ou Stream
Através do método setDataSource() do MediaPlayer, define-se o
caminho do arquivo (local) ou URL (web).
Reprodução de Áudio
Iniciar a execução
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(CAMINHO_ARQUIVO);
mp.prepare();
mp.start();
22. Reproduzindo Áudio de um conteúdo JET
JET é uma engine musical para criar reproduções de áudio
interativas.
Reprodução de Áudio
Iniciar a execução
JetPlayer myJet = JetPlayer.getJetPlayer();
byte segmentId = 0;
myJet.loadJetFile(CAMINHO_ARQUIVO); // ex: “/sdcard/level1.jet”
myJet.queueJetSegment(5, -1, 1, -1, 0, segmentId);
myJet.play();
23. Reproduzindo Áudio de um conteúdo JET
Usa-se a ferramenta JetCreator (parte do Android SDK) para criar
reproduções de áudio interativas.
Reprodução de Áudio
24. Reproduzindo Áudio de um conteúdo JET
O Android SDK possui o exemplo JetBoy, um jogo que utiliza a
engine JET para produzir sua trilha sonora e eventos.
Reprodução de Áudio
Trecho de código do JetBoy
25. Captura de Áudio em 10 passos
Passo Descrição
1. Criar uma instância de MediaRecorder
2. Criar uma instância de ContentValues e colocar
algumas propriedades padrão como TITLE, TIMESTAMP
Gravação de Áudio
e MIME_TYPE
3. Usar ContentResolver para definir caminho do arquivo
no qual os dados serão armazenados
4. Definir AudioSource
5. Definir OutputFormat
6. Definir AudioEncoder
7. Chamar o prepare() da instância do MediaRecorder
8. Iniciar a captura de áudio com start()
9. Finalizar a captura de áudio com stop()
10. Liberar a instância do MediaRecorder com release()
33. Dois caminhos
Visão Geral de Web Apps Aplicação que roda no lado cliente vs Aplicação Web.
Basicamente, a diferença seria:
Lado cliente Aplicação Web
Android SDK Android Browser
Instalar .apk no Sem instalação
dispositivo
34. Dois caminhos
No Android uma aplicação Web pode rodar dentro de uma
aplicacão cliente.
Visão Geral de Web Apps
35. Usando metadados para a Viewport
Diferentes telas e Web Apps A Viewport é a área na qual a página Web é desenhada.
Exemplo de configuração da viewport na Web App
40. android.webkit.WebView
Extensão de View que permite mostrar páginas Web como
parte do layout de uma Activity.
Web Apps em WebView
Adicionando uma WebView na sua aplicação
main.xml
MyActivity.java
41. JavaScript em uma WebView
Caso a página que esteja sendo carregada na WebView tenha
código JavaScript, o recurso precisa estar habilitado.
Web Apps em WebView
Associando código JavaScript a código Android
42. Lidando com navegação de páginas
Quando o usuário clica em um link no WebView, o
comportamento padrão é abrir o browser e acessá-lo.
Web Apps em WebView
Implementar shouldOverrideUrlLoading() de WebViewClient
Criar uma instância de um novo WebViewClient
43. Histórico de Páginas
Quando sobrescreve-se o método shouldOverrideUrlLoading()
do WebView, automaticamente acumula-se um histórico de
páginas visitadas.
Web Apps em WebView
Navega-se nesse histórico através dos métodos goBack() e
goForward() do WebView.
Verificar se o usuári o pressionou a tecla BACK para acessar a página
anterior do histórico dentro do WebView da aplicação.
44. Console log
Visualizado no Browser e no LogCat é mostrado com a tag
“browser”.
Depurando Web Apps
45. Console APIs em um WebView
A partir do Android 2.2 (API Level 8), implementa-se um
WebChromeClient e substitui-se o método
onConsoleMessage() .
Depurando Web Apps
Dessa forma, apresenta-se o Log da maneira que desejar quanto às
aplicações Web.
46. As melhores práticas ao desenvolver Web Apps
Melhores práticas (Web Apps)
• Redirecionar dispositivos móveis para uma versão
dedicada de seu site – Obter “User Agent” do usuário
que acessa e fornecê-lo a melhor experiência;
• Usar DOCTYPE apropriado para dispositivos móveis;
• Usar metadados de Viewport para redimensionar a
página adequadamente;
• Evitar mútliplas requisições de arquivos;
• Usar layout vertical e linear.