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
Roteiro da Aula


   TESTES         APLICAÇÕES                  WEB APPS
                  MULTIMÍDIA




            Testes, Aplicações Multimídia e Web Apps em Android
TESTES



         Testes em Android
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
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.
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
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
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.
Criando um projeto de Testes
Testes em Android
Criando a classe do Caso de Teste
Testes em Android
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).
Exemplo de Classe de Teste
                                          Construtor




                                   Inicialização de variáveis
Testes em Android




                                        Pré-condições




                                       Código de teste
Executando o Teste
Testes em Android
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.
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.
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.
Aplicações Multimídia



          Aúdio, Vídeo e Câmera em Android
Core Media Formats
Formatos de Mídia Suportados   Formatos de mídia suportados por todos os dispositivos Android.
Reprodução e Gravação de Áudio e Vídeo
Áudio e Vídeo em Android




                                Reprodução              Gravação

                              MediaPlayer           MediaRecorder
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();
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();
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();
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
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
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()
Captura de Áudio em Código
Gravação de Áudio
MusicDroid – Parte I
                Selecionar uma música no cartão de memória e executá-la.
Exercício
MusicDroid – Parte II
                    Executar a música em background (como serviço)
Exercício
MusicDroid – Parte III
                  Adicionar controles básicos para a música em execução
Exercício
Component VideoView
Reprodução de Vídeo
Câmera Demo
Captura de Vídeo




                         FrameLayout
Web Apps



Tendência para combater a fragmentação do mundo mobile
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
Dois caminhos
                          No Android uma aplicação Web pode rodar dentro de uma
                          aplicacão cliente.
Visão Geral de Web Apps
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
Usando metadados para a Viewport
Diferentes telas e Web Apps
Usando metadados para a Viewport
Diferentes telas e Web Apps
CSS de acordo com a resolução do dispositivo
Diferentes telas e Web Apps
JavaScript de acordo com a resolução do dispositivo
Diferentes telas e Web Apps
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
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
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
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.
Console log
                     Visualizado no Browser e no LogCat é mostrado com a tag
                     “browser”.
Depurando Web Apps
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.
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.
What’s Your Message?
OBRIGADO!

Android Aula 4

  • 1.
    Erisvaldo Gadelha SaraivaJú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
  • 3.
    TESTES Testes 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 Programaem 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 Androidcom 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.
  • 9.
    Criando um projetode Testes Testes em Android
  • 10.
    Criando a classedo Caso de Teste Testes em Android
  • 11.
    Exemplo de Classede 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 Classede Teste Construtor Inicialização de variáveis Testes em Android Pré-condições Código de teste
  • 13.
  • 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 ContentProvider 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.
  • 17.
    Aplicações Multimídia Aúdio, Vídeo e Câmera em Android
  • 18.
    Core Media Formats Formatosde Mídia Suportados Formatos de mídia suportados por todos os dispositivos Android.
  • 19.
    Reprodução e Gravaçãode Áudio e Vídeo Áudio e Vídeo em Android Reprodução Gravação MediaPlayer MediaRecorder
  • 20.
    Reproduzindo Áudio deum 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 deum 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 deum 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 deum 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 deum 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 Áudioem 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()
  • 26.
    Captura de Áudioem Código Gravação de Áudio
  • 27.
    MusicDroid – ParteI Selecionar uma música no cartão de memória e executá-la. Exercício
  • 28.
    MusicDroid – ParteII Executar a música em background (como serviço) Exercício
  • 29.
    MusicDroid – ParteIII Adicionar controles básicos para a música em execução Exercício
  • 30.
  • 31.
    Câmera Demo Captura deVídeo FrameLayout
  • 32.
    Web Apps Tendência paracombater a fragmentação do mundo mobile
  • 33.
    Dois caminhos Visão Geralde 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 paraa 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
  • 36.
    Usando metadados paraa Viewport Diferentes telas e Web Apps
  • 37.
    Usando metadados paraa Viewport Diferentes telas e Web Apps
  • 38.
    CSS de acordocom a resolução do dispositivo Diferentes telas e Web Apps
  • 39.
    JavaScript de acordocom a resolução do dispositivo Diferentes telas e Web Apps
  • 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 umaWebView 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çãode 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 emum 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áticasao 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.
  • 47.