Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
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 5) E-mail: erisvaldojunior@gmail.com Site: http://erisvaldojunior.com Twitter: @erisvaldojunior Roteiro da Aula Introdução ao Android 3.0, UI avançada e Tendências do mundo mobile ANDROID 3.0 GRÁFICOS E ANIMAÇÕES TENDÊNCIAS ANDROID 3.0 Visão geral e recursos do Android 3.0 N o vi d ad e s d o A n d ro id 3 .0 Novos recursos para o Usuário Nova interface, otimizada para os tablets • System Bar • Action Bar • 5 Homes Customizáveis • Aplicações recentes N o vi d ad e s d o A n d ro id 3 .0 Novos recursos para o Usuário • Novo Teclado • Manipulação de Textos • Mais conectividade • Aplicações-chave melhores N o vi d ad e s d o A n d ro id 3 .0 Novos recursos para o Usuário Aplicações-chave foram aperfeiçoadas N o vi d ad e s d o A n d ro id 3 .0 Novos recursos para o Desenvolvedor Novo framework de UI, refinado para tablets • Activity Fragments • Widgets remodelados • Action Bar customizável • Notificações mais ricas • Seleção múltipla, clipboard e recurso de drag-and-drop N o vi d ad e s d o A n d ro id 3 .0 Novos recursos para o Desenvolvedor • Novo e flexível Framework de animação • Aceleração gráfica 2D por hardware • Renderscript (engine 3D) • Suporte a múltiplos processadores • HTTP Live streaming (M3U) • Framework de DRM • Transferência de arquivos de mídia (MTP/PTP) • Mais opções de conectividade • Segurança para ambientes corporativos • Compatibilidade com aplicações existentes A P I L e ve l 1 1 Fragments Componente que permite a separação de elementos distintos de uma Activity em módulos com interfaces e ciclos de vida próprios. Pode-se combinar múltiplos fragmentos em uma única Activity para construir uma interface de vários painéis na qual cada painel gerencia seu próprio ciclo de vida e entradas do usuário. • Fragments podem ser reusados em múltiplas Activitys; • Pode-se adicionar, remover, substituir e animar Fragments dentro de uma Activity; • Por meio de layouts alternativos, pode-se combinar Fragments baseado no tamanho e orientação da tela; • Fragments tem acesso direto a sua Activity e pode acessar a Action Bar da Activity. A P I L e ve l 1 1 Loaders Permitem, de maneira assíncrona, facilmente carregar dados em um Activity ou Fragment. • Estão disponíveis em qualquer Activity ou Fragment; • Provêem carregamento assíncrono de dados; • Monitoram a fonte dos dados e entregam novos resultados a medida que o conteúdo muda; • Reconectam-se automaticamente ao último cursor do Loader quando são recriados após uma mudança de configuração. Assim, não necessitam reconsultar os dados. A P I L e ve l 1 1 Action Bar Substitui a barra de título na parte superior da Activity. Mostra o ícone da aplicação e provê uma nova interface para os itens do menu de opções. Além disso, permite ao desenvolvedor: • Adicionar itens de menu diretamente na Action Bar (Action Item); • Substituir um Action Item por um Widget, como uma caixa de pesquisa (Action View); • Adicionar uma ação para o ícone da aplicação bem como substituí-lo por um ícone personalizado; • Opções de navegação para os fragmentos da Activity; • Personalizar a Action Bar com temas e fundos. A P I L e ve l 1 1 System Clipboard Área de transferência entre aplicações (texto, endereços, intents) • Possibilita acesso a dados que o usuário deseja copiar por meio de um Content Provider. Dados complexos como imagens ou estruturas podem ser copiados de uma aplicação para outra; • Para obter o Clipboard, usa-se o seguinte método: ClipboardManager.getSystemService(CLIPBOARD_SERVICE); • Dados são adicionados ao Clipboard por meio de um objeto da classe ClipData, que possui métodos como newPlainText(), newUri() e newIntent(); • Através do método setPrimaryClip(), atribui-se um ClipData a um Clipboard. O conteúdo pode ser obtido através do getPrimaryClip(); • O Clipboard armazena possui apenas um objeto ClipData mas esse objeto pode ser composto por vários itens (ClipData.Item). A P I L e ve l 1 1 Drag and Drop Dados podem ser transferidos de um lugar para outro • Traduzindo para o desenvolvedor: objetos ClipData podem ser movidos de uma View para outra; • Cada operação Drag and Drop é definida por um objeto DragEvent, com estados como ACTION_DRAG_STARTED, ACTION_DRAG_ENTERED e ACTION_DROP definindo seu ciclo de vida; • O método startDrag() pode ser chamado em uma View provendo um ClipData que representa a informação a ser transferida; • O método setOnDragListener() permite que a View registre um OnDragListener que permitirá a recepção de objetos Drag and Drop. O listener obriga a implementação do método onDrag(). A P I L e ve l 1 1 Framework de Animação Novo e flexível framework de animação para objetos como Fragment, View e Drawable. • Pode-se definir duração, quantidade de repetições, taxa de atualização, atraso, etc; • Através da classe LayoutTransition é possível estabelecer animações automáticas para mudanças que foram realizadas no layout da Activity; • Para definir animações personalizadas, usa-se o método setAnimation() de LayoutTransition, passando-se um animador personalizado (objeto da classe ValueAnimator ou ObjectAnimator). A P I L e ve l 1 1 Framework estendido de UI Diversas novidades para o framework de interface gráfica • Seleção múltipla para ListView e GridView através do método setChoiceMode() e o modo CHOICE_MODE_MULTIPLE_MODAL, além de registrar-se um MultiChoiceModeListener; • Novas APIs para transformar Views 2D e 3D, através de métodos como setAlpha(), setPivotX(), setRotationX() e setScaleX(); • Novos temas holográficos que são atribuídos como base padrão quando android:minSdkVersion ou android:targetSdkVersion estão setados para “11” no AndroidManifest.xml; • Novos widgets como AdapterViewAnimation, AdapterViewFlipper, CalendarView, ListPopupWindow, NumberPicker, PopupMenu, SearchView e StackView. A P I L e ve l 1 1 Suporte aprimorado ao JSON Classes JsonReader e JsonWriter adicionados ao pacote org.json. • Cria-se uma instância de JsonReader passando um InputStreamReader como parâmetro; • A leitura começa com beginObject() e o nome da chave é lido com nextName(). O valor é lido de acordo com o tipo, ex: nextInt(), nextString(), etc; • Esse processo é repetido enquanto hasNext() retorna verdadeiro. A P I L e ve l 1 1 Pacotes adicionados • android.animation – Novo framework de animação; • android.drm – API para gerenciamento de direitos digitais; • android.renderscript – engine para renderização 3D. O ti m iz an d o ap lic aç õ e s Otimizando Apps para o Android 3.0 • Ambiente de desenvolvimento • SDK Platform Android 3.0 • Android SDK Tools r10 • Android SDK Platform-Tools r3 • Documentação do Android SDK, API Level 11 • Exemplos do Android SDK, API Level 11 • Criar AVD com Android 3.0 e skin WXGA • Aplicar o novo tema holográfico – Defina o android:sdkTargetVersion=“11” no AndroidManifest, fazendo com que a aplicação use o novo tema holográfico quando estiver rodando em dispositivos Android 3.0. Não é necessário alterar o android:minSdkVersion. Qualquer aplicação, por padrão, é compatível com dispositivos que rodam Android 3.0, uma vez que as aplicações Android são “forward- compatible”. O ti m iz an d o ap lic aç õ e s Otimizando Apps para o Android 3.0 • Prover layouts alternativos para telas extra-grandes (xlarge) • Certificar-se que existe um layout otimizado na aplicação para orientação landscape (considerada normal nos tablets); • Usa-se o qualificador xlarge para telas extra-grandes (tablets) e land para a orientação landscape. Pode-se prover imagens, por exemplo, para res/layout-xlarge-land/; • Reconsiderar posicionamento dos botões para adequar-se ao usuário que está segurando o tablet com as duas mãos; • Tamanhos de fonte devem usar unidades “sp”. Em alguns casos, pode-se usar fontes maiores para xlarge. Certificar-se de usar as melhores práticas para independência de tela. D e se n vo lv e n d o p ar a A n d ro id 3 .0 Atualizando ou desenvolvendo uma nova aplicação para Android 3.0 • Declarar android:minSdkVersion=“11” na tag <uses-sdk> do AndroidManifest.xml, habilitando o novo tema holográfico e Action Bar nas Activities; • Usar a Action Bar; • Dividir as Activities em Fragments; • Usar o novo framework de animação para as transições; • Habilitar aceleração por hardware com android:hardwareAccelerated=“true” para cada <activity> ou para a <application> no AndroidManifest.xml; • Aprimorar os widgets com os novos recursos; • Usar os novos recursos (Drag and Drop), nova API de Bluetooth, sistema de Clipboard, Renderscript, etc; • Publicar a aplicação para telas extra grandes (xlarge), decidindo se a mesma será portável para smartphones ou funcionará apenas nos tablets. D e se n vo lv e n d o p ar a Ta b le ts AndroidManifest.xml Versão mínima do SDK: API Level 11 (Android 3.0) Suportar apenas telas extra grandes Gráficos e Animações Property Animation e Renderscript P ro p e rt y A n im at io n Property Animation X View Animation Property Animation foi introduzido no Android 3.0 e é mais poderoso e flexível que o View Animation. • View Animation é capaz apenas de animar objetos View em certos aspectos como escala e rotação. A cor de fundo da View, por exemplo, não poderia ser alterada; • Property Animation é capaz de animar qualquer objeto e, como o próprio nome diz, modifica uma propriedade (atributo) desse objeto de acordo com o tempo; • Assim, Property Animation permite que se defina: • Duração: pode-se especificar a duração da animação; • Interpolação de tempo: como os valores da propriedade são calculados em termos de uma função do tempo corrente de animação; • Contador de repetições e comportamento: repetir a animação uma determinada quantidade de vezes. Pode-se executar de trás para frente; • Conjuntos de animações: agrupar animações em conjuntos lógicos que são executados em conjunto ou sequencialmente após certos atrasos; • Taxa de atualização: com que frequência os frames da animação são atualizados.C P ro p e rt y A n im at io n Como funciona Utilizando o framework Property Animation para fazer animações Animação linear Animação não-linear P ro p e rt y A n im at io n Como funciona ValueAnimator rastreia o tempo de animação e o valor da propriedade que está sendo animada. No exemplo da Animação Não-Linear TimeInterpolator : AccelerateDecelerateInterpolator TypeEvaluator : IntEvaluator Para iniciar uma animação, cria-se um objeto ValueAnimator passando os valores inicial e final da animação, bem como sua duração. Em seguida, invoca- se o método start() para que a animação possa começar. P ro p e rt y A n im at io n Classes que compõem o framework ValueAnimator – calcula os valores da animação e contém detalhes do tempo de cada animação, informação sobre quando a animação se repete, listeners que recebem eventos de atualização e possibilidade de atualização da propriedade por tipo. É importante notar que o ValueAnimator não modifica o valor da propriedade que está sendo animada, apenas calcula os valores de acordo com o tempo. Para isso, deve-se implementar o método de atualização para modificar a propriedade de acordo com a lógica desejada. ObjectAnimator – herda de ValueAnimator e permite definir um objeto e propriedade para animar. Ao contrário do ValueAnimator, essa classe atualiza a propriedade assim que computa um novo valor para a animação. Usa-se ObjectAnimator na maior parte do tempo, por questões de facilidade. AnimatorSet – agrupa animações e permite que possam ser executadas sequencialmente ou com atrasos específicos. P ro p e rt y A n im at io n Evaluators e Interpolators P ro p e rt y A n im at io n Animando com ValueAnimator No exemplo abaixo, calcula valores entre 0 e 1 durante 1000 milisegundos quando o método start() é executado. No exemplo abaixo, calcula valores entre startPropertyValue e endPropertyValue, usando a lógica provida por MyTypeEvaluator durante 1000 milisegundos quando o método start() é executado. P ro p e rt y A n im at io n Animando com ValueAnimator • Animator.AnimatorListener • onAnimationStart() – chamado quando a animação começa. • onAnimationEnd() – chamado quando a animação termina. • onAnimationRepeat() – chamado quando a animação se repete. • onAnimationCancel() – chamado quando a animação é cancelada. • ValueAnimator.AnimatorUpdateListener • onAnimationUpdate() – chamado em cada frame da animação. Pode-se capturar o valor calculado através do método getAnimatedValue() e atualizar a propriedade de acordo. Implementar esse listener é obrigatório se usar o ValueAnimator. Exemplo de uso: objeto newBall, propriedade “alpha”, variando de 1 a 0 durante 250ms. Ao término da animação, objeto é removido da lista. P ro p e rt y A n im at io n Animando com ObjectAnimator ObjectAnimator facilita para o desenvolvedor que não é mais obrigado a implementar o AnimatorUpdateListener, uma vez que a propriedade animada é atualizada automaticamente. No exemplo abaixo, calcula valores entre 0 e 1 para a propriedade “alpha” do objeto foo durante 1000 milisegundos quando o método start() é executado. • Getter e Setter da propriedade que está sendo animada (“alpha”) precisam existir e devem ser do mesmo tipo que o especificado no ObjectAnimator. No exemplo acima, teríamos na classe do objeto foo: • public void setAlpha(Float alpha); • public Float getAlpha(); P ro p e rt y A n im at io n Múltiplas animações com AnimatorSet P ro p e rt y A n im at io n Animando Views • Propriedades da classe View que facilitam animações: • translationX e translationY; • rotation, rotationX e rotationY; • scaleX e scaleY; • pivotX e pivotY; • x e y; • alpha. Exemplo de uso: rotacionar a View “myView” em 360 graus. P ro p e rt y A n im at io n Declarando as Animações em XML G rá fi co s 2 D e 3 D V ie w A n im at io n Veja também… • Renderscript – Oferece alto desempenho 3D em nível nativo. Disponível a partir do Android 3.0. http://developer.android.com/guide/topics/graphics/renderscript.html; • OpenGL ES API – Android suporta OpenGL ES 1.0, equivalente a versão 1.3 do OpenGL. Muito utilizado para jogos. http://developer.android.com/guide/topics/graphics/opengl.html; • Gráficos 2D – Atráves de objetos Drawable, é possível desenhar na tela do dispositivo Android, bem como adicionar imagens. http://developer.android.com/guide/topics/graphics/2d-graphics.html; • View Animation - Permite animar objetos View com operações como escala e rotação. No Android 3.0 pode ser substituído pelo framework de Property Animation. http://developer.android.com/guide/topics/graphics/view- animation.html Tendências Tendências do mundo mobile In -A p p B ill in g Android Market oferece serviço de In-App Billing Pode-se vender conteúdo digital dentro do aplicativo, como itens ou fases de jogos e funcionalidades extras para aplicativos. O share é de 70% para o desenvolvedor e 30% para a Google em cima do valor da venda. In -A p p B ill in g Como funciona Aplicação envia requisição de pagamento para a aplicação do Android Market via IPC e recebe respostas na forma de Broadcast Intents. A implementação do serviço de In-App Billing se baseia, de modo geral, em três componentes: • Um Service que processa as requisições de pagamento da aplicação e repassa essas requisições para o serviço de In-App Billing; • Um BroadcastReceiver que recebe as respostas de pagamento da aplicação Android Market; • Um componente de segurança que realiza tarefas relacionadas a segurança do processo, como verificação da assinatura. Opcionalmente, pode-se adicionar mais dois componentes para melhorar a experiência: • Um Handler que processa notificações da compra, erros e status; • Um Observer que envia callbacks para a aplicação para atualizar a interface com o andamento da compra e informaçòes extras. In -A p p B ill in g Como funciona Aplicação envia requisição de pagamento para a aplicação do Android Market via IPC e recebe respostas na forma de Broadcast Intents. • Aplicação chama o método IPC sendBillingRequest(), disponível na interface MarketBillingService, passando um Bundle como parâmetro; • O Bundle contém vários pares de chave-valor contendo informações como tipo de requisição, item que está sendo comprado e aplicação que está fazendo a requisição. In -A p p B ill in g Como funciona In-App Billing Requests: cada Bundle precisa ter uma chave BILLING_REQUEST que especifica o tipo de requisição que está sendo feita. São cinco tipos suportados: In -A p p B ill in g Como funciona In-App Billing Responses: a resposta síncrona é um Bundle com as seguintes chaves: As mensagens de resposta assíncronas são enviadas na forma de Broadcast Intents e incluem as seguintes: In -A p p B ill in g Como funciona O intent ACTION_PURCHASE_STATE_CHANGED provê para a sua aplicação detalhes de uma ou mais transações. Eis um exemplo da string JSON que é enviada: In -A p p B ill in g Sequências de mensagens Exemplos de requisições realizadas pela aplicação e respostas que são enviadas pela aplicação Android Market. N FC ( N e ar F ie ld C o m m u n ic at io n ) Pacote android.nfc Permite a comunicação entre dispositivos (iniciador e alvo) com distância de centímetros. O alvo é uma tag RFID ou peer-to-peer. É uma das tecnologias mais promissoras no mundo mobile. Pagamento pelo celular N FC ( N e ar F ie ld C o m m u n ic at io n ) Troca de informações Casos de Uso N FC ( N e ar F ie ld C o m m u n ic at io n ) Ingressos para shows Casos de Uso N FC ( N e ar F ie ld C o m m u n ic at io n ) Chaves Casos de Uso SI P ( Se ss io n In it ia ti o n P ro to co l) Pacote android.net.sip Android provê uma API que permite a realização de chamadas através do protocolo SIP. Pode ser usado para videochamadas ou mensageiros instantâneos. • Para desenvolver uma aplicação SIP, é necessário que o dispositivo esteja com o Android 2.3 ou superior; • SIP roda sobre uma conexão de dados, seja Wi-Fi ou 3G. Não há como testar SIP em um AVD; • Cada participante em uma aplicação que se comunica por SIP deve possuir uma conta SIP. Existem muitos provedores SIP que oferecem planos diversos. What’s Your Message?OBRIGADO!