SlideShare uma empresa Scribd logo
1 de 20
Baixar para ler offline
Programação Android Avançada
ACESSO WEB EM ANDROID
Prof. André Márcio de Lima Curvello
andre.ml.curvello@gmail.com
WebView
◦ View Android específica para exibição de conteúdo Web
◦ HTML + CSS + JavaScript
◦ Funcionamento idêntico ao Browser do Android
◦ Uso do WebKit
◦ Permite embarcar conteúdo web em aplicação Android
◦ Local – armazenado na aplicação
◦ Remoto
WebView
◦ Por ser uma View, pode então:
◦ Ser posicionada em algum lugar no design interface de usuário.
◦ Possuir dimensões específicas.
◦ Ou ocupar a tela inteira.
◦ Deve possuir uma ID.
◦ Deve ser atribuída a seu objeto
WebView equivalente.
WebView
◦ Aplicações
◦ Exibir conteúdo formatado na aplicação
◦ Texto justificado com imagens
◦ Fontes personalizadas
◦ Exibir animações em formato *.GIF
◦ Reuso de código para aplicação Web em aplicação Nativa.
WebView
◦ Acesso Off-line - HardCoded
◦ É criada uma String com o conteúdo a ser exibido.
◦ Para ser exibido, chama-se o método loadData, passando por parâmetro a String, seu tipo
(“text/html”) e encoding (“UTF-8”) a ser utilizado.
◦ Não precisa de permissão para acesso Web.
WebView
◦ Acesso Off-line - Assets
◦ É preciso colocar a página e sua estrutura no diretório “assets” do projeto da aplicação
◦ A exibição do conteúdo é iniciada com a chamada de loadUrl, passando por parâmetro o endereço
URL do arquivo HTML no diretório assets.
◦ Não precisa de permissão para acesso Web
WebView
◦ Acesso On-line
◦ Basta passar a URL da aplicação na chamada de loadUrl do objeto WebView.
◦ É preciso ter a permissão de acesso à INTERNET no Manifesto da aplicação
WebView
◦ A WebView permite parametrizar o acesso ao conteúdo Web.
◦ O desenvolvedor tem acesso a recursos que permitem definir configurações tais
como:
◦ Habilitar suporte a Zoom
◦ Salvar dados de Formulários
◦ Salvar dados de passwords (senhas)
◦ Habilitar suporte a JavaScript – Desabilitado por padrão
◦ Carregar imagens automaticamente...
◦ Controlar forma de Scroll.
◦ Dentre outros, pesquise!
WebView – Alguns métodos
◦ canGoBack() – Especifica que pode ter histórico de retorno.
◦ goBack() – retorna uma página no histórico.
◦ canGoForward() – Especifica que pode ter histórico para adiante.
◦ goForward() – avança uma página no histórico.
◦ clearHistory() – Limpa todo o histórico da instância de WebView.
◦ destroy() - Destrói o estado interno da WebView.
◦ findAllAsync(String find) – Encontra as ocorrências de “find” e destaca-as no texto.
◦ getProgress() – Obtém o progresso da página atual.
◦ getTitle() – Obtém o título da página.
◦ getUrl() – Obtém a URL da página.
WebView – Alguns métodos
◦Dá pra você fazer seu próprio “Navegador” Web
◦ Utilizando dos recursos do WebView e do WebKit associados.
◦ Utilizando dos eventos de navegação
◦ Tratamento de entrada de dados
do usuário
◦ Etc!
WebViewClient
◦ Adicional ao WebView que permite uma customização ainda maior da interação do usuário
com a WebView e a aplicação, de modo a:
◦ Interceptar e filtrar chamadas a URLs específicas
◦ Permite manter o fluxo de páginas dentro da aplicação
◦ Bloqueia o usuário de abrir páginas não desejadas
◦ Ou permite que demais conteúdos sejam exibidos no Browser nativo do Android
◦ Permite interceptar respostas HTTP – Erro, OK, etc...
◦ Tratar eventos tais como teclas pressionadas
◦ Caso o usuário pressione Enter...
◦ Caso o usuário pressione Voltar...
◦ E assim realizar alguma ação específica.
WebChromeClient
◦ Adicional ao WebView que permite uma maior interação com chamadas JavaScript
da página e demais recursos tais como:
◦ A exibição de alert()
◦ Ou em vez de exibir alert() – exibir uma AlertDialog em Android
◦ Obter ícone de favorito do site – favicon
◦ Obter o nome de título do site
◦ Obter o progresso de carregamento do site
◦ Exibir janela para seleção de arquivo
◦ Integração com console JavaScript
◦ Dentre outros!
JavaScript Interface
◦ É uma classe que fará a ponte entre o conteúdo Web e a aplicação Android
por meio de JavaScript.
◦ Precisa ter um construtor com atributo de contexto de aplicação.
◦ Terá os métodos que serão chamados pela aplicação Web
Ou seja...
Implementará as “interfaces”
-Parâmetros...?
-Retornos...?
-Funcionamento...?
Você define.
Direção da comunicação:
Web  Android
JavaScript Interface
◦ É de fundamental importância que o JavaScript esteja habilitado na WebView
utilizada.
◦ Depois de criada a Classe de Interface, seu vínculo é feito com o método do
objeto WebView:
◦ Exemplo:
JavaScript Interface
◦ Vejam o seguinte exemplo de página Web que faz interface com o código Android:
◦ Vejam que foi determinado
que o objeto será chamado
por “Android” no código
JavaScript.
JavaScript Interface
◦ E se você quiser chamar um recurso da página Web, na WebView, a partir da
aplicação Android?
◦ Basta chamar loadUrl do objeto WebView, tendo a URL de parâmetro a seguinte
estrutura:
◦ Início – “javascript:” – indica que é uma chamada a uma rotina JavaScript
◦ Depois – nome da sua função no código JavaScript
◦ E depois - Demais parâmetros, respeitando aspas, etc.
Considerações
◦ Nem todas as WebViews terão a mesma renderização
◦ Versões diferentes de Android  WebKits sutilmente diferentes, etc.
◦ Performance
◦ Haverá um overhead de processamento em chamadas de interface
◦ Comportamento de Zoom e Scroll
◦ Podem conflitar entre o Zoom e Scroll nativos da aplicação VS do conteúdo Web.
◦ Complexidade
◦ Começa a misturar código Android com código Web
◦ Precisa ter infraestrutura online ou estrutura de projeto offline
◦ Segurança
◦ Cuidados com a exposição de códigos de interface Web - Android
Atividade
◦ Crie uma aplicação Android Nativa com conteúdo nativo e WebView.
◦ WebView deverá ocupar a metade inferior da tela
◦ Na aplicação Android Nativa, faça uma estrutura com campos para inserção de
nome e sobrenome, e um botão.
◦ Na página off-line em WebView, faça um form para inserção de nome e
sobrenome, e um botão que irá chamar uma rotina JavaScript.
◦ O botão Update Native deverá atualizar os campos da página Web com o
conteúdo digitado pelo usuário na aplicação Android nativa.
◦ O botão Update Web View deverá atualizar os campos da aplicação Android
com o conteúdo digitado pelo usuário na webview.
Observação
◦ Na chamada de interface JavaScript que fará a alteração de campos na
aplicação Android, é recomendável utilizar um método tal como
runOnUiThread para executar a operação.
◦ Caso contrário, não será possível alterar o conteúdo das Views desejadas.
◦ Exemplo:

Mais conteúdo relacionado

Mais procurados

T@rget trust desenvolvendo aplicações com flex
T@rget trust   desenvolvendo aplicações com flexT@rget trust   desenvolvendo aplicações com flex
T@rget trust desenvolvendo aplicações com flex
Targettrust
 
Jquery - Apresentação e aplicação prática
Jquery - Apresentação e aplicação práticaJquery - Apresentação e aplicação prática
Jquery - Apresentação e aplicação prática
Teles Maciel
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)
Bruno Grange
 
Jquery - Apresentação e aplicação prática
Jquery - Apresentação e aplicação práticaJquery - Apresentação e aplicação prática
Jquery - Apresentação e aplicação prática
Teles Maciel
 

Mais procurados (20)

Offline apps Using Ionic Framework and PouchDB
Offline apps  Using Ionic Framework and PouchDBOffline apps  Using Ionic Framework and PouchDB
Offline apps Using Ionic Framework and PouchDB
 
T@rget trust desenvolvendo aplicações com flex
T@rget trust   desenvolvendo aplicações com flexT@rget trust   desenvolvendo aplicações com flex
T@rget trust desenvolvendo aplicações com flex
 
ANGULARJS: UM FRAMEWORK PARA FACILITAR SUA VIDA
ANGULARJS: UM FRAMEWORK PARA FACILITAR SUA VIDAANGULARJS: UM FRAMEWORK PARA FACILITAR SUA VIDA
ANGULARJS: UM FRAMEWORK PARA FACILITAR SUA VIDA
 
Introdução ao selenium
Introdução ao seleniumIntrodução ao selenium
Introdução ao selenium
 
Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)
 
Performance com AngularJS
Performance com AngularJSPerformance com AngularJS
Performance com AngularJS
 
Jquery - Apresentação e aplicação prática
Jquery - Apresentação e aplicação práticaJquery - Apresentação e aplicação prática
Jquery - Apresentação e aplicação prática
 
Vuejs
VuejsVuejs
Vuejs
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)
 
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
 
Angular js
Angular jsAngular js
Angular js
 
Codando com PHP e JQuery
Codando com PHP e JQueryCodando com PHP e JQuery
Codando com PHP e JQuery
 
jQuery
jQueryjQuery
jQuery
 
Introdução básica ao JavaScript
Introdução básica ao JavaScriptIntrodução básica ao JavaScript
Introdução básica ao JavaScript
 
Grails: O Java em Alta Produtividade
Grails: O Java em Alta ProdutividadeGrails: O Java em Alta Produtividade
Grails: O Java em Alta Produtividade
 
Apresentação Jquery
Apresentação JqueryApresentação Jquery
Apresentação Jquery
 
Visão Geral sobre Angular JS
Visão Geral sobre Angular JSVisão Geral sobre Angular JS
Visão Geral sobre Angular JS
 
Desenvolvimento Do jQuery Light Box Plugin ao vivo
Desenvolvimento Do jQuery Light Box Plugin ao vivoDesenvolvimento Do jQuery Light Box Plugin ao vivo
Desenvolvimento Do jQuery Light Box Plugin ao vivo
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
 
Jquery - Apresentação e aplicação prática
Jquery - Apresentação e aplicação práticaJquery - Apresentação e aplicação prática
Jquery - Apresentação e aplicação prática
 

Semelhante a Programação Android Avançada - Acesso Web em Aplicações Android

Introdução sobre desenvolvimento web
Introdução sobre desenvolvimento webIntrodução sobre desenvolvimento web
Introdução sobre desenvolvimento web
Rodrigo Rodrigues
 

Semelhante a Programação Android Avançada - Acesso Web em Aplicações Android (20)

JQuery Mobile
JQuery MobileJQuery Mobile
JQuery Mobile
 
Desenvolvimento de aplicações mobile com bootstrap, cordova e vue.js
Desenvolvimento de aplicações mobile com bootstrap, cordova e vue.jsDesenvolvimento de aplicações mobile com bootstrap, cordova e vue.js
Desenvolvimento de aplicações mobile com bootstrap, cordova e vue.js
 
Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5
 
Web 3.0
Web 3.0Web 3.0
Web 3.0
 
HTML 5, CSS 3 e o futuro da Web
HTML 5, CSS 3 e o futuro da WebHTML 5, CSS 3 e o futuro da Web
HTML 5, CSS 3 e o futuro da Web
 
Apresentação Google Android
Apresentação Google AndroidApresentação Google Android
Apresentação Google Android
 
SESTINFO 2011 Apresentacao Android
SESTINFO 2011 Apresentacao AndroidSESTINFO 2011 Apresentacao Android
SESTINFO 2011 Apresentacao Android
 
Zk Framework
Zk FrameworkZk Framework
Zk Framework
 
KnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realKnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida real
 
Web Performance Client Side
Web Performance Client SideWeb Performance Client Side
Web Performance Client Side
 
Grails
GrailsGrails
Grails
 
Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.
 
Introdução sobre desenvolvimento web
Introdução sobre desenvolvimento webIntrodução sobre desenvolvimento web
Introdução sobre desenvolvimento web
 
Desenvolvendo aplicacoes mobile_com_html_css_
Desenvolvendo aplicacoes mobile_com_html_css_Desenvolvendo aplicacoes mobile_com_html_css_
Desenvolvendo aplicacoes mobile_com_html_css_
 
Criação de Ambientes de Realidade Virtual usando A-Frame
Criação de Ambientes  de Realidade Virtual  usando A-FrameCriação de Ambientes  de Realidade Virtual  usando A-Frame
Criação de Ambientes de Realidade Virtual usando A-Frame
 
Desenvolvendo para iOS com Cocoa-Touch
Desenvolvendo para iOS com Cocoa-TouchDesenvolvendo para iOS com Cocoa-Touch
Desenvolvendo para iOS com Cocoa-Touch
 
Aula 05 - Java Script Básico
Aula 05 -  Java Script BásicoAula 05 -  Java Script Básico
Aula 05 - Java Script Básico
 
React Native na globo.com
React Native na globo.comReact Native na globo.com
React Native na globo.com
 
Palestra ASP.NET MVC
Palestra ASP.NET MVCPalestra ASP.NET MVC
Palestra ASP.NET MVC
 
O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin
O uso de PWA e o futuro do desenvolvimento mobile com React Native e KotlinO uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin
O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin
 

Mais de André Curvello

Mais de André Curvello (20)

Sistemas embarcados e a contribuição para o combate a COVID-19
Sistemas embarcados e a contribuição para o combate a COVID-19Sistemas embarcados e a contribuição para o combate a COVID-19
Sistemas embarcados e a contribuição para o combate a COVID-19
 
Blockchain em IoT - Desafios e considerações numa abordagem prática
Blockchain em IoT - Desafios e considerações numa abordagem práticaBlockchain em IoT - Desafios e considerações numa abordagem prática
Blockchain em IoT - Desafios e considerações numa abordagem prática
 
Arquitetando seu sistema de IoT com Azure
Arquitetando seu sistema de IoT com AzureArquitetando seu sistema de IoT com Azure
Arquitetando seu sistema de IoT com Azure
 
Drones - Programando sistemas embarcados voadores e... autônomos!
Drones - Programando sistemas embarcados voadores e... autônomos!Drones - Programando sistemas embarcados voadores e... autônomos!
Drones - Programando sistemas embarcados voadores e... autônomos!
 
Dispositivos IoT com FPGAs - Alto poder de processamento para crescentes dema...
Dispositivos IoT com FPGAs - Alto poder de processamento para crescentes dema...Dispositivos IoT com FPGAs - Alto poder de processamento para crescentes dema...
Dispositivos IoT com FPGAs - Alto poder de processamento para crescentes dema...
 
Internet das Coisas - Na nuvem além da telemetria
Internet das Coisas - Na nuvem além da telemetriaInternet das Coisas - Na nuvem além da telemetria
Internet das Coisas - Na nuvem além da telemetria
 
Pilares da Computação para Internet das Coisas
Pilares da Computação para Internet das CoisasPilares da Computação para Internet das Coisas
Pilares da Computação para Internet das Coisas
 
IoT Aplicada à Engenharia de Computação
IoT Aplicada à Engenharia de ComputaçãoIoT Aplicada à Engenharia de Computação
IoT Aplicada à Engenharia de Computação
 
IoE - Internet de Todas as Coisas - Quais os Riscos de Segurança
IoE - Internet de Todas as Coisas - Quais os Riscos de SegurançaIoE - Internet de Todas as Coisas - Quais os Riscos de Segurança
IoE - Internet de Todas as Coisas - Quais os Riscos de Segurança
 
Linux Embarcado - O Sistema Operacional da Internet das Coisas
Linux Embarcado - O Sistema Operacional da Internet das CoisasLinux Embarcado - O Sistema Operacional da Internet das Coisas
Linux Embarcado - O Sistema Operacional da Internet das Coisas
 
Rede CAN em Linux Embarcado para Aplicações Conectadas
Rede CAN em Linux Embarcado para Aplicações ConectadasRede CAN em Linux Embarcado para Aplicações Conectadas
Rede CAN em Linux Embarcado para Aplicações Conectadas
 
Criando elementos conectados com visão computacional usando Raspberry Pi Zero...
Criando elementos conectados com visão computacional usando Raspberry Pi Zero...Criando elementos conectados com visão computacional usando Raspberry Pi Zero...
Criando elementos conectados com visão computacional usando Raspberry Pi Zero...
 
TDC2017 - Sistemas Assimétricos com ARM e FPGA
TDC2017 - Sistemas Assimétricos com ARM e FPGATDC2017 - Sistemas Assimétricos com ARM e FPGA
TDC2017 - Sistemas Assimétricos com ARM e FPGA
 
TDC2017 - Desvendando a Linux Device Tree
TDC2017 - Desvendando a Linux Device TreeTDC2017 - Desvendando a Linux Device Tree
TDC2017 - Desvendando a Linux Device Tree
 
Indústria 4.0 - Do chão de fábrica à sua casa por um clique.
Indústria 4.0 - Do chão de fábrica à sua casa por um clique.Indústria 4.0 - Do chão de fábrica à sua casa por um clique.
Indústria 4.0 - Do chão de fábrica à sua casa por um clique.
 
Internet das Coisas - Do Sensor à Nuvem, e Você?
Internet das Coisas - Do Sensor à Nuvem, e Você?Internet das Coisas - Do Sensor à Nuvem, e Você?
Internet das Coisas - Do Sensor à Nuvem, e Você?
 
Linux Embarcado na Construção de Sistemas Inteligentes e Conectados
Linux Embarcado na Construção de Sistemas Inteligentes e ConectadosLinux Embarcado na Construção de Sistemas Inteligentes e Conectados
Linux Embarcado na Construção de Sistemas Inteligentes e Conectados
 
Veja como hackear seu carro usando Rede CAN com Arduino Due
Veja como hackear seu carro usando Rede CAN com Arduino DueVeja como hackear seu carro usando Rede CAN com Arduino Due
Veja como hackear seu carro usando Rede CAN com Arduino Due
 
Laboratórios do HandsOn de mbedOS - FTF Connects SP 2016
Laboratórios do HandsOn de mbedOS - FTF Connects SP 2016Laboratórios do HandsOn de mbedOS - FTF Connects SP 2016
Laboratórios do HandsOn de mbedOS - FTF Connects SP 2016
 
Sistemas Embarcados Híbridos - Processamento Assimétrico
Sistemas Embarcados Híbridos - Processamento AssimétricoSistemas Embarcados Híbridos - Processamento Assimétrico
Sistemas Embarcados Híbridos - Processamento Assimétrico
 

Último

Último (9)

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 

Programação Android Avançada - Acesso Web em Aplicações Android

  • 1. Programação Android Avançada ACESSO WEB EM ANDROID Prof. André Márcio de Lima Curvello andre.ml.curvello@gmail.com
  • 2.
  • 3. WebView ◦ View Android específica para exibição de conteúdo Web ◦ HTML + CSS + JavaScript ◦ Funcionamento idêntico ao Browser do Android ◦ Uso do WebKit ◦ Permite embarcar conteúdo web em aplicação Android ◦ Local – armazenado na aplicação ◦ Remoto
  • 4. WebView ◦ Por ser uma View, pode então: ◦ Ser posicionada em algum lugar no design interface de usuário. ◦ Possuir dimensões específicas. ◦ Ou ocupar a tela inteira. ◦ Deve possuir uma ID. ◦ Deve ser atribuída a seu objeto WebView equivalente.
  • 5. WebView ◦ Aplicações ◦ Exibir conteúdo formatado na aplicação ◦ Texto justificado com imagens ◦ Fontes personalizadas ◦ Exibir animações em formato *.GIF ◦ Reuso de código para aplicação Web em aplicação Nativa.
  • 6. WebView ◦ Acesso Off-line - HardCoded ◦ É criada uma String com o conteúdo a ser exibido. ◦ Para ser exibido, chama-se o método loadData, passando por parâmetro a String, seu tipo (“text/html”) e encoding (“UTF-8”) a ser utilizado. ◦ Não precisa de permissão para acesso Web.
  • 7. WebView ◦ Acesso Off-line - Assets ◦ É preciso colocar a página e sua estrutura no diretório “assets” do projeto da aplicação ◦ A exibição do conteúdo é iniciada com a chamada de loadUrl, passando por parâmetro o endereço URL do arquivo HTML no diretório assets. ◦ Não precisa de permissão para acesso Web
  • 8. WebView ◦ Acesso On-line ◦ Basta passar a URL da aplicação na chamada de loadUrl do objeto WebView. ◦ É preciso ter a permissão de acesso à INTERNET no Manifesto da aplicação
  • 9. WebView ◦ A WebView permite parametrizar o acesso ao conteúdo Web. ◦ O desenvolvedor tem acesso a recursos que permitem definir configurações tais como: ◦ Habilitar suporte a Zoom ◦ Salvar dados de Formulários ◦ Salvar dados de passwords (senhas) ◦ Habilitar suporte a JavaScript – Desabilitado por padrão ◦ Carregar imagens automaticamente... ◦ Controlar forma de Scroll. ◦ Dentre outros, pesquise!
  • 10. WebView – Alguns métodos ◦ canGoBack() – Especifica que pode ter histórico de retorno. ◦ goBack() – retorna uma página no histórico. ◦ canGoForward() – Especifica que pode ter histórico para adiante. ◦ goForward() – avança uma página no histórico. ◦ clearHistory() – Limpa todo o histórico da instância de WebView. ◦ destroy() - Destrói o estado interno da WebView. ◦ findAllAsync(String find) – Encontra as ocorrências de “find” e destaca-as no texto. ◦ getProgress() – Obtém o progresso da página atual. ◦ getTitle() – Obtém o título da página. ◦ getUrl() – Obtém a URL da página.
  • 11. WebView – Alguns métodos ◦Dá pra você fazer seu próprio “Navegador” Web ◦ Utilizando dos recursos do WebView e do WebKit associados. ◦ Utilizando dos eventos de navegação ◦ Tratamento de entrada de dados do usuário ◦ Etc!
  • 12. WebViewClient ◦ Adicional ao WebView que permite uma customização ainda maior da interação do usuário com a WebView e a aplicação, de modo a: ◦ Interceptar e filtrar chamadas a URLs específicas ◦ Permite manter o fluxo de páginas dentro da aplicação ◦ Bloqueia o usuário de abrir páginas não desejadas ◦ Ou permite que demais conteúdos sejam exibidos no Browser nativo do Android ◦ Permite interceptar respostas HTTP – Erro, OK, etc... ◦ Tratar eventos tais como teclas pressionadas ◦ Caso o usuário pressione Enter... ◦ Caso o usuário pressione Voltar... ◦ E assim realizar alguma ação específica.
  • 13. WebChromeClient ◦ Adicional ao WebView que permite uma maior interação com chamadas JavaScript da página e demais recursos tais como: ◦ A exibição de alert() ◦ Ou em vez de exibir alert() – exibir uma AlertDialog em Android ◦ Obter ícone de favorito do site – favicon ◦ Obter o nome de título do site ◦ Obter o progresso de carregamento do site ◦ Exibir janela para seleção de arquivo ◦ Integração com console JavaScript ◦ Dentre outros!
  • 14. JavaScript Interface ◦ É uma classe que fará a ponte entre o conteúdo Web e a aplicação Android por meio de JavaScript. ◦ Precisa ter um construtor com atributo de contexto de aplicação. ◦ Terá os métodos que serão chamados pela aplicação Web Ou seja... Implementará as “interfaces” -Parâmetros...? -Retornos...? -Funcionamento...? Você define. Direção da comunicação: Web  Android
  • 15. JavaScript Interface ◦ É de fundamental importância que o JavaScript esteja habilitado na WebView utilizada. ◦ Depois de criada a Classe de Interface, seu vínculo é feito com o método do objeto WebView: ◦ Exemplo:
  • 16. JavaScript Interface ◦ Vejam o seguinte exemplo de página Web que faz interface com o código Android: ◦ Vejam que foi determinado que o objeto será chamado por “Android” no código JavaScript.
  • 17. JavaScript Interface ◦ E se você quiser chamar um recurso da página Web, na WebView, a partir da aplicação Android? ◦ Basta chamar loadUrl do objeto WebView, tendo a URL de parâmetro a seguinte estrutura: ◦ Início – “javascript:” – indica que é uma chamada a uma rotina JavaScript ◦ Depois – nome da sua função no código JavaScript ◦ E depois - Demais parâmetros, respeitando aspas, etc.
  • 18. Considerações ◦ Nem todas as WebViews terão a mesma renderização ◦ Versões diferentes de Android  WebKits sutilmente diferentes, etc. ◦ Performance ◦ Haverá um overhead de processamento em chamadas de interface ◦ Comportamento de Zoom e Scroll ◦ Podem conflitar entre o Zoom e Scroll nativos da aplicação VS do conteúdo Web. ◦ Complexidade ◦ Começa a misturar código Android com código Web ◦ Precisa ter infraestrutura online ou estrutura de projeto offline ◦ Segurança ◦ Cuidados com a exposição de códigos de interface Web - Android
  • 19. Atividade ◦ Crie uma aplicação Android Nativa com conteúdo nativo e WebView. ◦ WebView deverá ocupar a metade inferior da tela ◦ Na aplicação Android Nativa, faça uma estrutura com campos para inserção de nome e sobrenome, e um botão. ◦ Na página off-line em WebView, faça um form para inserção de nome e sobrenome, e um botão que irá chamar uma rotina JavaScript. ◦ O botão Update Native deverá atualizar os campos da página Web com o conteúdo digitado pelo usuário na aplicação Android nativa. ◦ O botão Update Web View deverá atualizar os campos da aplicação Android com o conteúdo digitado pelo usuário na webview.
  • 20. Observação ◦ Na chamada de interface JavaScript que fará a alteração de campos na aplicação Android, é recomendável utilizar um método tal como runOnUiThread para executar a operação. ◦ Caso contrário, não será possível alterar o conteúdo das Views desejadas. ◦ Exemplo: