WebView no Android, Entendendo e Utilizando

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes! Você receberá um email de confirmação. Somente depois de confirma-lo é que eu poderei lhe enviar os conteúdos semanais exclusivos. Os artigos em PDF são entregues somente para os inscritos na lista.

Email inválido.
Blog /Android /WebView no Android, Entendendo e Utilizando

WebView no Android, Entendendo e Utilizando

Vinícius Thiengo
(64084) (87)
Go-ahead
"O método consciente de tentativa e erro é mais bem-sucedido que o planejamento de um gênio isolado."
Peter Skillman
Prototipagem Android
Capa do curso Prototipagem Profissional de Aplicativos
TítuloAndroid: Prototipagem Profissional de Aplicativos
CategoriasAndroid, Design, Protótipo
AutorVinícius Thiengo
Vídeo aulas186
Tempo15 horas
ExercíciosSim
CertificadoSim
Acessar Curso
Quer aprender a programar para Android? Acesse abaixo o curso gratuito no Blog.
Lendo
TítuloCraftsmanship Limpo: Disciplinas, Padrões e ética
CategoriaDesenvolvimento Web
Autor(es)Robert C. Martin
EditoraAlta Books
Edição
Ano2023
Páginas416
Conteúdo Exclusivo
Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba gratuitamente conteúdos Android sem precedentes!
Email inválido

Tudo bem?

Neste vídeo, continuando a série de vídeos sobre componentes visuais no Android, apresento o popular componente WebView.

View muito utilizada para "quebrar nosso galho" no dia a dia do desenvolvimento Android.

No conteúdo em vídeo eu mostro como abrir páginas Web no WebView e como construir nosso próprio conteúdo HTML para o WebView.

Também será abordada a necessidade de colocar a permissão de acesso a Internet no AndroidManifest.xml.

Note em vídeo a importância de somente utilizarmos o WebView quando nós não tivermos uma opção conhecida via XML Android.

Fique atento também em desabilitar o suporte ao zoom para não ter tratamento inesperado em seu WebView, isso caso o seu projeto Android não for utilizar o zoom.

Os exemplos do vídeo dão um panorama bem completo do que é possível com o WebView, sendo assim vou evitar mais delongas e deixar você assistir ao vídeo.

Só para ressaltar o uso do WebView, o Facebook (e inúmeras outras redes sociais) faz muito o uso do WebView quando um usuário quer acessar seus dados do Facebook dentro de algum outra aplicativo e o app do facebook não esta instalado no aparelho do usuário.

Logo, a página de autenticação que é aberta é aberta em um WebView.

Vale ressaltar também que há a possibilidade de enviar dados da atividade (ou fragmento) para o WebView e vice-e-versa.

Segue imagem esquema do componente visual WebView:

WebView no Android, Entendendo e Utilizando

Aqui no Blog, e no canal, também tem um outro conteúdo um pouco mais completo sobre o uso do WebView no desenvolvimento Android, não deixe de também estuda-lo: Facilitando o Desenvolvimento de Apps Android Com a Biblioteca AndroidUtilCode (com o Android Studio IDE).

E se você estiver tendo dificuldades com o <input type="file"> em sua implementação do WebView, então não deixe de estudar o "conteúdo solução" que tenho no artigo a seguir: Input File no WebView Android (com o Android Studio IDE).

A seguir deixo alguns outros conteúdos completos, também sobre o WebView, que tenho aqui no Blog:

Não esqueça de se inscrever 📫na lista de emails do Blog para continuar recebendo os conteúdos exclusivos Android em primeira mão.

Se inscreva também no canal do Blog no YouTube para acompanhar as últimas novidades.

Surgindo dúvidas ou dicas, pode enviar abaixo na área de comentários que logo eu lhe retorno.

Obs. : o link para download do projeto apresentado em vídeo se encontra logo abaixo no artigo, na seção "Download".

Abraço.

Eclipse IDE vs Android Studio IDE

Apesar de o conteúdo da vídeo aula acima estar utilizando o Eclipse IDE 😱, tudo que é apresentado, tanto a parte teórica quanto a parte prática, é ainda válido nos dias de hoje com o desenvolvimento Android utilizando o Android Studio 😁.

Ou seja, independente da linguagem oficial (Java, Kotlin, C ou C++), IDE ou framework que você esteja utilizando, o conteúdo acima é ainda muito útil.

AndroidX

Apesar do conteúdo sobre WebView ainda estar atual e ser importante para qualquer nível de desenvolvedor Android.

Apesar disso eu também recomendo, assim que finalizado o projeto em sua própria instalação de IDE, que você o migre para o AndroidX.

Algo que pode ser feito com poucos cliques, como apresentado no tutorial a seguir: Migrar para o AndroidX.

Fontes

Documentação oficial WebView Android

Building web apps in WebView

Documentação oficial WebViewClient

Gerenciar objetos WebView

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes!
Email inválido

Relacionado

ScrollView e HorizontalScrollView no Android, Entendendo e UtilizandoScrollView e HorizontalScrollView no Android, Entendendo e UtilizandoAndroid
GridLayout no Android, Entendendo e UtilizandoGridLayout no Android, Entendendo e UtilizandoAndroid
Colocando Uma Imagem da Web no ImageView do AndroidColocando Uma Imagem da Web no ImageView do AndroidAndroid
GridView no Android, Entendendo e UtilizandoGridView no Android, Entendendo e UtilizandoAndroid

Compartilhar

Comentários Facebook

Comentários Blog (87)

Para código / script, coloque entre [code] e [/code] para receber marcação especifica.
Forneça seu nome válido.
Forneça seu email válido.
Forneça o comentário.
Enviando, aguarde...
Raphael (1) (0)
10/06/2020
Primeiramente parabéns pelos artigos.
Estou com um problema, consegui dar permissões de acesso a localização pelo manifest e inclusive quando entra nas configs do app ele está com a permissao habilitada. Porém quando abro por exemplo o google maps na webview ele nao consegue encontrar a minha localizaççao. Está habilitado mas não passa as infos.
Responder
Vinícius Thiengo (0) (0)
11/06/2020
Raphael, tudo bem?

Excelente que você curte os conteúdos do Blog.

Sobre sua dúvida...

Primeiro: para obter a autorização de coleta de dados de geo-coordenadas do usuário é necessário também (além da configuração no AndroidManifest.xml) a solicitação em tempo de execução.

Isso, pois a partir do Android 6 (Android Marshmallow) o trabalho com dados sensíveis do usuário (localização é um desses dados sensíveis) necessita primeiro da permissão dele assim que o aplicativo venha a precisar de qualquer um dos dados sensíveis.

Explico melhor sobre solicitação de permissão em tempo de execução no artigo do link a seguir:

-> Sistema de Permissões em Tempo de Execução, Android M: https://www.thiengo.com.br/sistema-de-permissoes-em-tempo-de-execucao-android-m

Então, Raphael, mesmo que somente com a configuração de permissão no AndroidManifest.xml você tenha observado que "funcionou".

Mesmo assim não confie neste resultado se a permissão não foi também solicitada em tempo de execução com as APIs Android específicas para isso.

Agora, já com a permissão liberada, espera-se que o seu aplicativo, mesmo sabendo do uso do Google Maps via WebView...

... mesmo sabendo disso, espera-se que o seu app utilize alguma API de obtenção de coordenadas, API como a Location API, por exemplo:

-> Obtendo Localização Com Location API no Android - Parte 1: https://www.thiengo.com.br/obtendo-localizacao-com-location-api-no-android-parte-1

-> APIs de obtenção de coordenadas de maneira simples (Android-Arsenal): https://android-arsenal.com/tag/55?sort=rating

Utilize alguma API de coordenadas para obter em background a localização do usuário.

Tudo isso em código nativo, ou seja, fora do código frontend Web presente no WebView.

Com isso... eu vou assumir que você está com o Google Maps em WebView configurado via JavaScript API, certo?

Sendo assim, com as coordenadas do usuário "em mãos" no código em linguagem oficial Android (Java, Kotlin, C ou C++)...

... sendo assim, o que resta agora é enviar essas coordenadas para o JavaScript da página Web carregada no WebView.

Você consegue esse envio com uma @JavaScriptInterface, como apresento na vídeo aula do artigo a seguir:

-> Integrando WebView Android Com JavaScript de Uma WebPage: https://www.thiengo.com.br/integrando-webview-android-com-javascript-de-uma-webpage

Raphael, agora com as coordenadas já dentro da página do WebView, basta acessar as APIs do Google Maps JavaScript e atualizar o Pin do mapa de acordo com as coordenadas enviadas.

É assim que você vai conseguir atualizar um Google Maps via WebView dentro de um aplicativo Android.

É isso.

Surgindo mais dúvidas, pode enviar.

Abraço.
Responder
10/03/2020
meu website precisa de acesso a localização, ele funciona normalmente se abrir pelu navegador, porem no app com webv ele nao funciona, tem que adicionar alguma permissao ou algo do tipo?
Responder
Vinícius Thiengo (0) (0)
12/03/2020
Romario, tudo bem?

Como discutido no Facebook inbox: vamos prosseguir pelo e-mail oficial do Blog.

Abraço.
Responder
30/08/2019
boa noite thiengo você é muito ninja, fiz meu primeiro app graças a seus tutoriais https://bit.ly/2NIzNGW , tenho um problema e não consigo resolver, estou usando o custom tabs pra abrir links externos do meu app q até funciona sem problema más eu acharia mais interessando abrir no próprio webview por questão de customização, a ideia seria a seguinte, criar uma active secundaria  e por meio da função da active main abrir a active secundaria com outro webview, atualmente eu pego a URL e envio por javascript para o webview da main q chama a função do customtabs, eu queria que ao invez de chamar a custom carregasse a url na webview da active secundaria, fechou ela, ja voltasse pra main más sempre q eu tento fazer seguindo outros tutoriais o android studio n apresenta erros nenhum más hora q instalo o app e clico no botão javascript q deveria chamar a activi o app simplesmnete fecha
Responder
Vinícius Thiengo (0) (0)
07/09/2019
Cleber, tudo bem?

Show de bola o seu aplicativo, parabéns.

Sobre o problema, preciso que você consiga obter a mensagem de erro que está sendo apresentadas nos logs do Android Studio.

-> Logs do Android Studio: https://developer.android.com/studio/debug/am-logcat.html?hl=pt-br

Simule o problema em um emulador AVD ou em um aparelho real conectado via USB à sua máquina de desenvolvimento, assim será possível obter a mensagem (pilha) de erro.

Se mesmo com a pilha de erros você não conseguir resolver o problema, volte aqui e deixe essa pilha nos comentários, com isso eu consigo lhe ajudar com o debug.

Abraço.
Responder
Felipe (1) (0)
22/02/2018
Boa tarde, amigo... fiz exatamente como seu codigo... deu certo... porém como sou iniciante nao sei praticamente nada..  quando abro o aplicativo ele abre a pagina carrega normal... porém quando VOLTO... ele fica aquela tela branca escrito em cima o nome do app... ( normal ) ... teria como colocar algo nessa tela branca?? tipo uma imagem da empresa??   aguardo resposta, obrigado e parabéns pelo tutorial
Responder
Vinícius Thiengo (0) (0)
24/02/2018
Felipe, tudo bem?

Tem como sim, colocando uma imagem de background no WebView, como faço no conteúdo do link a seguir:

https://www.thiengo.com.br/facilitando-o-desenvolvimento-de-apps-android-com-a-biblioteca-androidutilcode

O foco do link indicado anteriormente é o trabalho com a API AndroidUtilCode, mas como exemplo utilizo de maneira mais completa um WebView, incluindo a definição da imagem de background dele.

Felipe, acompanhe o conteúdo pela parte em texto, até o final, pois no vídeo pulo as partes iniciais e vou direto ao trabalho com a API AndroidUtilCode.

Abraço.
Responder
Felipe (1) (0)
25/02/2018
Opa amigo... valeu pela resposta... eu coloquei um "Imageview" deu certo... eu quero abrir a tela... e nela ter botoes para chamar o webview
por exemplo :
Botao 1 = chama o link do webview
botão 2  = exibe alguns telefones da empresa, onde eu clico neles e ja aparece para discar
botão 3  = etc...
Responder
Fernanda Alves da Silva (1) (0)
30/10/2017
Thiengo,

Utilizei WebView para leitura de pdf, funcionou, no entanto, para arquivos grandes a seguinte mensagem foi apresentada; NENHUMA VISUALIZAÇÃO DISPONÍVEL". Tem alguma sugestão?
Responder
Vinícius Thiengo (0) (0)
30/10/2017
Fernanda, tudo bem?

Respondi ao seu primeiro comentário na área do Facebook Comments deste artigo, acesse ele. Lhe dou algumas possíveis soluções.

Abraço.
Responder
20/09/2017
Bom dia Thiengo. Parabéns pelos vídeos. Me ajudaram muito. Ainda sou iniciante em Android, consegui a maior parte do meu projeto com suas dicas, mas ainda tenho alguns problemas. Por ex.:
1- ao utilizar o endereço "whatsapp://...", Não funciona no webview, porém no navegador funciona normal. Tentei vários tipos do shouldOverrideUrlLoading, criando intent, mas sem sucesso. Caso não seja possível dessa maneira, tentei também gerar um PDF com essas informações para compartilhar, mesma situação.. navegador funciona, webview não.

2- existe a possibilidade de o app verificar o MySQL do php, e quando identificar alguma linha a mais do que da última verificação, notificar o usuário.?
3- a TAG input type=file do php, na mesma situação, funciona no navegador, mas não na webview.

Teria algumas dicas quanto a estas situações?

Obrigado e parabéns!
Responder
Vinícius Thiengo (0) (0)
21/09/2017
Diego, tudo bem?

Sobre a primeira dúvida. Você a princípio fez o caminho certo, capturou um novo carregamento e tentou abrir com o Intent. O método shouldOverrideUrlLoading() chegou a ser invocado, certo?

Pergunto isso, pois há mais de uma versão deste método. De qualquer forma, tente utilizando uma versão mais robusta do WebView: https://android-arsenal.com/tag/230?sort=rating

No link acima tem várias APIs somente sobre versões WebView melhores que a nativa.

Sobre a segunda dúvida. Sim, é possível, mas o recomendado neste caso é que você trabalhe com notificações push de forma ativa no servidor, ou seja, quando um novo conteúdo for adicionado ao banco, logo em seguida os usuários necessários são notificados.

Hoje para notificação no Android utilizando um servidor de aplicativo (com MySQL e PHP, por exemplo) utilizamos o FCM. Mais sobre ele no link a seguir: https://www.thiengo.com.br/fcm-android-dominio-do-problema-implementacao-e-testes-com-servidor-de-aplicativo-parte-1

Sobre a terceira dúvida. Tem uma maneira de conseguir isso, digo, o funcionamento do imputa file no WebView, não é trivial mas funciona sem problemas. Segue solução: https://www.thiengo.com.br/input-file-no-webview-android

Esse problema é antigo no Android, digo, o WebView limitado até mesmo com tags HTML triviais. A solução do link acima funciona para qualquer modelo de aparelho.

Abraço.
Responder
Alisson (1) (0)
25/03/2019
Boa noite Thiengo, parabéns pelos conteúdos que você está criando....  eu fiz tudo certinho (WebView), o app abriu o site que eu queria, mas dentro do Site existe um botão para o WhatApp, quando eu clico no atalho dar um erro err_unknown_url (Página da web não disponível https://web.whatsapp.com/send?...... )
tentei sobrescrever o shouldOverrideUrlLoading com...

webView.setWebViewClient( new WebViewClient(){
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (url != null && (url.startsWith("https://web.whatsapp.com/send?...... ") || url.startsWith("https://web.whatsapp.com/send?...... "))) {
                    view.getContext().startActivity(
                            new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
                    return true;
                } else {
                    return false;
                }
            }
        });
Responder
Vinícius Thiengo (0) (0)
08/04/2019
Alisson, tudo bem?

Confesso que eu ainda não passei por este problema, não com uma URI Web.

Tente a solução do link a seguir:

https://stackoverflow.com/a/41693364/2578331

Caso não funcione, volte aqui e lhe informarei alguma outra possível rota.

Abraço.
Responder
Roberta (1) (0)
22/07/2017
Oi Thiengo, tudo bem?

Excelente tutorial, era esse recurso que estava procurando, tenho um site responsivo e vai ser muito útil aqui pra gente. Obrigado por fazer esse video tutorial.

Thiengo, tenho uma dúvida, baseado nesse projeto, eu conseguiria inserir essa webview dentro de um iFrame? Estamos pensando em criar um iFrame, que mostrará o nome do nosso site na parte de cima, e o usuário navegaria normalmente em nosso.

Qual a melhor opção para se criar uma webview dentro de um iFrame?

Parabens pelo tutorial. Seu site está em meus favoritos.
Responder
Vinícius Thiengo (0) (0)
22/07/2017
Roberta, tudo bem aqui.

É possível colocar um <iframe> dentro de um WebView, digo, o <iframe> sendo também parte do html carregado no WebView, o inverso, não.

Isso, pois o WebView é um componente visual no Android, já o <iframe> é somente no HTML.

Como quer permitir que o usuário carregue o conteúdo de seu site dentro do aplicativo, em um WebView, e assim possa navegar por ele, recomendo que remova a barra de topo do aplicativo, algo padrão em app Android com Material Designa, e então trabalhe a versão mobile do site para ter essa parte de topo com o nome do site e até mesmo o menu.

Roberta, para um trabalho melhor gerenciado com o WebView, recomendo o estudo também do artigo do link a seguir: http://www.thiengo.com.br/facilitando-o-desenvolvimento-de-apps-android-com-a-biblioteca-androidutilcode

Nele utilizo a linguagem Kotlin, mas você pode prosseguir com o Java sem problemas. De qualquer forma, estudando o projeto você verá que é até mesmo possível aproveita-lo para seu site.

Abraço.
Responder
28/06/2017
Olá, obrigado pelo vídeo, criei um app com o webview, porém estou com alguns problemas: 1- Links que não sejam http ou https, não carregam, tipo tel:, geo:. 2 - O campo do tipo File não funciona, tento fazer o upload mas não abre nada. 3 - O login através do Google, não funciona dentro do WebView. Poderia me ajudar?
Responder
Vinícius Thiengo (0) (0)
28/06/2017
Tássio, tudo bem?

Já respondido nos comentários acima, do Facebook. Abraço.
Responder
Renato Costa (1) (0)
27/12/2016
Olá Thiengo, Blz? Gostaria de saber como implemento esse carregamento de Progressbar, em um MAPA, no Android Studio?
vlw!
Responder
Vinícius Thiengo (1) (0)
28/12/2016
Renato, tudo bem?

Para implementar o ProgressBar com o mapa no WebView, veja se utilizando os métodos onPageStarted() e onPageFinished() você consegue essa funcionalidade em sua APP.

Abaixo o link do artigo / vídeo que tenho falando sobre esses métodos: http://www.thiengo.com.br/monitoramento-de-inicio-e-fim-de-carregamento-de-pagina-no-webview

Caso seja o ProgressBar junto a implementação do Google Maps via Java API, nesse caso você terá de ter um método listener para quando o mapa ser carregado por completo poder utilizar a variável que contém a instância dele.

Para esse caso do Java API recomendo que ainda no onCreate() da Activity (ou onCreateView() do Fragment) que você ative o ProgressBar (setVisibility( View.VISIBLE )) e assim que o listener do Mapa sinalizar que o carregamento dele finalizou, desligue o ProgressBar (setVisibility( View.GONE )).

Faça ambos, o mapa e o PrgressBar dividirem o mesmo layout Root, o FrameLayout: http://www.thiengo.com.br/entendendo-e-utilizando-framelayout-no-android

Veja se consegue implementar essa lógica, qualquer coisa volte aqui. Abraço.
Responder
16/09/2016
Boa noite, quando estou sem internet o aplicativo mostra a url do site qual a qual o aplicativo esta conectado. Como faço para que caso esteja sem internet ele seja direcionado ou mostre uma outra mensagem em vez da url?
Responder
Vinícius Thiengo (0) (0)
17/09/2016
Luiz, blz?
Utilize os listeners do WebClientView como feito aqui: http://stackoverflow.com/a/17961536/2578331

Esse é o caminho, outros seguidores que queriam essa solução seguiram com o WebClientView. Abraço
Responder
Luiz Crepaldi (1) (0)
08/09/2016
Thiego, boa noite eu estou fazendo um projeto e preciso de alguma função dentro da webview para trazer a tela do usuário apenas uma parte o site.  Por exemplo na pagina ha três divs e eu quero mostra ao usuário apenas a segunda div sera que voce tem alguma função ou ferramenta para fazer isto ?
Responder
Vinícius Thiengo (1) (0)
10/09/2016
Luiz, blz?
Vc tem controle do código do site? Caso sim, vc poderá via CSS, utilizando media-query, ocultar as outras divs.

Caso o site não seja de seu controle, veja se a maneira a seguir funciona para ti: http://stackoverflow.com/a/5010864/2578331

Assim é pegar os ids, classes ou posições dos divs que não devem ser apresentados na página e oculta-los via js. Veja se funciona contigo essa versão. Abraço
Responder
fomulo (1) (0)
07/07/2016
Como faço pra abrir uma url no activity sem alterar o java? Existe algum load url que posso inserir no xml apenas?
Responder
Vinícius Thiengo (0) (0)
09/07/2016
Fala Fomulo(?), blz?
A princípio somente via Java API vc consegue carregar a url. Está tendo problemas com a versão de carregamento via Java API?
Responder
Neto Monteiro (1) (0)
25/06/2016
Thiengo, boa noite. Estou com um problema,  o Webview está deixando um vazamento de memória muito grande. Consigo corrigir colocando o onDestroy ou o finish. Sempre que uso esses dois métodos o aplicativo trava. O problema é que até com os dois métodos citados acima, eles só funcionam quando eu uso o botão físico do aparelho. Quando fecho a app pela aba de aplicativos recentes ele não realiza os dois métodos. Como resolvo esse problema?
Grato pela atenção, parabéns pelo ótimo trabalho!
Responder
Vinícius Thiengo (0) (0)
25/06/2016
Fala Neto, blz?
Vazamento de memória com um WebView, o conteúdo do WebView é externo? Diminua a quantidade de conteúdo carregado por página, divida em mais páginas, ainda mais se houver muita mídia (vídeo, áudio e imagens). Veja se dividindo o conteúdo se normaliza.

Dê uma olhada nessa discussão (http://stackoverflow.com/questions/3130654/memory-leak-in-webview ) e na resposta certa (http://stackoverflow.com/a/3132515/2578331 ). Abraço
Responder
26/06/2016
Obrigado pela atenção.

O conteúdo é externo, não há como eu dividir em mais páginas.. Já fiz vários testes, parece que se fechar o aplicativo pela aba de apps recentes o método onDestroy não executa.
Há algum outro modo de limpar os dados gerados pelo WebView ao fechar o app?
Responder
Vinícius Thiengo (0) (0)
26/06/2016
Neto, se não me engano não tem como, pois mesmo com o onDestroy() que aparentemente limpa a memória dos dados carregados pelo WebView, esses dados somente são removidos da memória quando o Garbage Collector passa nela e identifica objetos não mais referenciados.

A maneira que vejo é reduzindo conteúdo carregado pela página. Um possível teste é tentar abrir outras páginas no WebView somente para ter certeza de que é aquela página em específico que gera o problema de vazamento de memória.

Somente de curiosidade, vc poderia fornecer o url dessa página? Abraço
Responder
Catarina (1) (0)
08/06/2016
Queria saber como entrar no servidor por uma web view, Obrigada
Responder
Vinícius Thiengo (0) (0)
09/06/2016
Fala Catarina, blz?
A princípio somente se o servidor tiver um dashboard Web. Nesse caso vc utilizaria login e senha. O WebView é nada mais nada menos que um navegador mobile. Abraço
Responder
Carlos Augusto (1) (0)
25/05/2016
Thiengo, boa tarde. Parabéns. Muito bacana. Estava fazendo uma pesquisa na internet e me deparei com seu site. Está me ajudando e muito em um aplicativo que estou criando. Gostaria de tirar uma dúvida contigo, se possível. Como faço para colocar ou aparecer em uma activity um arquivo do tipo .pdf? Por exemplo, quando o usuário clicar em informativo no menu, o aplicativo abre uma tela com o arquivo extensão pdf. Como faço isso? Grato Carlos Augusto.
Responder
Vinícius Thiengo (0) (0)
26/05/2016
Fala Carlos, blz?
Vc terá que ter um Dialog no caso, recomendo que utilize o DialogFragment (http://www.thiengo.com.br/dialogfragment-no-android-entendendo-e-utilizando ), pois ele tem o próprio ciclo de vida e então vc poderá deixar toda a complexidade de abrir um PDF somente nele.

Quanto ao PDF, veja qual das libraries nesse link (https://android-arsenal.com/search?q=pdf ) abrem um PDF para leitura, dessa forma vc poderá abrir o PDF no layout do DialogFragment e ter exatamente o comportamento que mencionou no contato. Abraço
Responder
Edriano Santos (1) (0)
21/02/2016
Fala Vinicius blz, tentei fazer uma implementação com webView mas ao acessar uma página de músicas não consigo executar as musicas, sempre que aperto play a música toca 1 segundo e pausa.
Responder
Vinícius Thiengo (1) (0)
22/02/2016
Fala Edriano, blz?
WebView tem alguns problemas com flash (provavelmente o player que está utilizando é via flash).

Se possível tente rodar a música com tags de streaming html5. Dê uma olhada nessa discussão tb (http://stackoverflow.com/questions/15501377/how-to-play-the-live-streaming-url-in-webview-android-using-iframe ). Abraço
Responder
19/02/2016
Boa noite Thiengo! Me ajuda meu camarada!

Estou tentando algo há mais de uma semana e não consigo: carregar links de páginas internas do meu site no WebView ao clicar na Push notification. A URL para o loadUrl está indo como parâmetro na Notification. Já testei getIntent(); getExtras(), e não consigo recuperar esta variável para o load da WebView.
Fiz  app com WebView carregando uma loja virtual responsiva que tenho.
Implantei o Push GCM para divulgar os produtos, que além da mensagem envia uma URL de páginas de detalhes  produtos da loja.
O PHP/JSON está enviando direitinho todas as variáveis. Testei enviando o bundle através do método sendNotification(extras.toString()); no onHandleIntent.Chega o título, msg, link, id's, etc.
Só não consigo fazer o WebView carregar esta variável URL. Não sei como pegá-la. Já tentei de tudo: getIntent(), getExtras(), getExtraString(), Bundle, etc... Só não consigo fazer o WebView abrir este link enviado na notificação.

Postei os arquivos da APP neste link:
https://stackoverflow.com/questions/35516219/i-cant-send-url-to-webview-by-onclick-in-the-notification-push-gcm-im-sendin

Tu consegue me ajudar? Perdoe o código meio zoneado... Sou bem Noob! rsrs
Responder
Vinícius Thiengo (0) (0)
20/02/2016
Fala Marcinho, blz?
Tente configurando Intent na notification dessa forma:

Bundle b = new Bundle();
        b.putString("link", url);
        Intent notificationIntent = new Intent(theContext, MainActivity.class);
        notificationIntent.putExtras(b);

Veja se assim funciona. Lembrando que na MainActivity terá de acessar dessa maneira: getIntent().getExtras().getString("link"). Abraço
Responder
geymyson (1) (0)
10/11/2015
O meu pegou normal,mas só a primeira pagina as outras pede pra abrir no navegador pq?
Responder
Vinícius Thiengo (0) (0)
11/11/2015
Fala geymyson, blz?
Tente utilizando tb o trecho de código abaixo:

webView.loadUrl( webData.getUrl() );
webView.setWebViewClient(new WebViewClient(){
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url){
        view.loadUrl(url);
        return true;
    }
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon){}
    @Override
    public void onPageFinished(WebView view, String url){}
});
Responder
28/09/2015
Ótima postagem, parabéns amigão..
Responder
06/09/2015
muito obrigado pelo video. tenho uma pergunta se puder responder ficarei muito grato.
estou de ideia a criar um app. terá no total 7 a 9 telas diferentes contando com a inicial

cadastrar/editar cadastro
solicitar/confirmar solicitação/ver solicitações
refazer solicitação

baseia se nisto... so texto e botoes.....

manjo muito de php e se este sistema fosse feito em um webview teria problemas? qual sua opniao/experiencia com este componente

se tratando do html e php destes formularios são muito simples e
fazendo com o webview agilizaria demais o processo do tempo de desenvolvimento.. praticamente 2 dias...
Responder
Vinícius Thiengo (0) (0)
07/09/2015
Fala Marco Túlio, blz?
Como é developer Web, recomendo que faça sim a primeiro versão com WebView e tecnologias Web. Essa APP (https://play.google.com/store/apps/details?id=br.mibec&hl=pt_BR ) construi somente com WebView e ActionBar (hj seria Toolbar), na verdade ela é esse site com layout responsivo para a versão mobile, porém criei a APP para abrir a versão mobile. Pontos positivos: bem rápido e dá para ajustar o layout com características que não são tão triviais no mobile nativo. Pontos negativos: a APP perde mt em qualidade, pois não temos todas as features disponíveis como quando no dev nativo, por exemplo: um script que recebe push message e dispara uma notificação na status bar.

O tempo que vc pode gastar para se tornar um baita developer mobile / web com WebView tb pode ser bem menor do que com Java para se tornar um especialista em Android. Porém terá de focar mais em html e css, pois como o PHP é backend os scripts tendem a ser os mesmos que vc já utiliza em outros sistemas que tenham cadastro e cia. Minha dica é desenvolve em WebView já que em poucos dias consegue ter algo e então vai já estudando para implementar nativo se perceber que com  aversão nativa sua APP vai ficar mais responsiva e outros. Abraço
Responder
cleber (1) (0)
17/08/2015
Amigos fiz um webview porem no site tem videos e o mesmo não roda e fica somente na tela do print abaixo alguem poderia min ajudar obrigado.

http://oi58.tinypic.com/2lu5tnd.jpg
Responder
Vinícius Thiengo (0) (0)
17/08/2015
Fala Cleber, blz?
Passar vídeos pelo WebView não é uma boa, já vi software em que funcionava de vez em quando e de vez em quando não, isso sempre com as mesmas condições. Logo, se tem acesso ao path do vídeo no servidor, recomendo que utilize uma implementação nativa com TextureView (https://android-arsenal.com/search?q=textureview ). Abraço
Responder
Henrique (1) (0)
12/05/2015
Boa noite Vinicius! Cara, fiz uma webview no meu app pra um site meu (HTML puro)  e até aí tudo ok! O problema é que esse site é atualizado de 5 em 5 minutos e após 5 min mesmo fechando o app e abrindo novamente o que é exibido é o site não atualizado... Como se estivesse carregando de um cache... Sabe como resolver esse problema? Queria q a cada vez q a activity fosse carregada a webview fosse atualizada...  Desde já, obrigado!
Responder
Vinícius Thiengo (0) (0)
13/05/2015
Fala Henrique, blz?
Na definição de seu WebView faça o mesmo que tem sido feito no script da pergunta desse link (http://stackoverflow.com/questions/7537701/prevent-android-webview-caching-data ), essa é a forma de previnir o cache do WebView no device. Abraço
Responder
Henrique (1) (0)
13/05/2015
Fala Thiengo!
Cara, tentei essa sugestão mas continua não atualizando a webview quando abro a app novamente... Segue o q eu fiz:

myWebView2 = (WebView) findViewById(R.id.webView2);
        myWebView2.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(myWebView2, url);
                myWebView2.clearHistory();
                myWebView2.clearFormData();
                myWebView2.clearCache(true);
                myWebView2.getSettings().setAppCacheEnabled(false);
                myWebView2.getSettings().setAppCacheMaxSize(1);
                myWebView2.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
            }
        });
        this.deleteDatabase("webview.db");
        this.deleteDatabase("webviewCache.db");
        myWebView2.clearCache(true);
        myWebView2.reload();

        myWebView2.loadUrl("meusite.html");

        myWebView2.clearCache(true);
        myWebView2.reload();
        this.deleteDatabase("webview.db");
        this.deleteDatabase("webviewCache.db");
}

Alguma outra sugestão?

Desde já agradeço!
Responder
Vinícius Thiengo (0) (0)
14/05/2015
Henrique, tente a resposta certa desse link (http://stackoverflow.com/questions/2465432/android-webview-completely-clear-the-cache ), esse camarada utilizou um script similar ao seu e teve problema de não remover a cache, depois utilizou o da resposta e passou. Abraço
Responder
Henrique (0) (0)
14/05/2015
Infelizmente não funcionou Thiengo... já não sei mais como resolver... A webview só atualiza se eu ficar uns 10 minutos sem abrir o app... fora isso sempre abre a última tela carregada...
Responder
Henrique (1) (0)
14/05/2015
Thiengo, tentei colocar um botão no meu html pra recarregar a página mas quando clico no botão dentro da webview, o app abre o brownser do celular... Sabe se tem como eu forçar ele abrir dentro da webview?
Responder
Vinícius Thiengo (0) (0)
15/05/2015
Henrique, utilize o código abaixo para evitar esse comportamento:

WebSettings webSettings = wv.getSettings();
webSettings.setJavaScriptEnabled(true);
wv.loadUrl(webData.getUrl());
wv.setWebViewClient(new WebViewClient(){
@Override
    public boolean shouldOverrideUrlLoading(WebView view, String url){
        view.loadUrl(url);
        return true;
    }
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon){}
@Override
public void onPageFinished(WebView view, String url){}
});
Responder
10/04/2015
quando uso ws.loadUrl(); o eclipse não reconhece como comando, obrigado, abraços
Responder
Vinícius Thiengo (0) (0)
10/04/2015
Fala Jorge, blz?
Como está a declaração da variavel "ws"? Está assim:

WebView ws = new WebView(this) ou (WebView) findViewById(R.id.idDeSeuWebView)?

Pode ser que esteja utilizando o WebSettings ws como WebView, veja se não é isso. Abraço
Responder
14/04/2015
Positivo, funcionando perfeitamente, obrigado e abraço.
Responder
08/04/2015
thiengo, queria saber como colocar uma webview personalizada, tipo seu APP , que pega apenas um post do site e não o site todo.
Responder
Vinícius Thiengo (0) (0)
08/04/2015
Fala Jonas, blz?
Na verdade a APP do Blog não trabalha com WebView, em meu servidor tem uma interface mobile onde somente pego os dados via JSON e então na APP é construído o conteúdo, pois o layout já está pronto. Se vc entrar no blog pelo browse mobile ai sim vc terá a interface mobile que construi para o Blog (no caso sem a APP nativa). A forma de customização é no CSS de sua página Web mesmo. Em meu caso trabalho com media queries (http://www.devmedia.com.br/utilizando-css-media-queries/27085 ) para identificar o tamanho da tela e então apresentar o conteúdo de maneira correta. Tem outras formas, o APP da Mibec (https://play.google.com/store/apps/details?id=br.mibec&hl=pt_BR ) que construí na verdade é quase tudo WebView, no servidor Web identifico quando é um mobile abrindo o site e então carrego uma página Web especifica para mobile, nesse caso não tem a ver somente com o CSS, mas com o backend php tb para identificar se é mobile ou não. Abraço
Responder
29/03/2015
thiengo, esqueci mais estou trabalhando com uma webview, um navegador que estou desenvolvendo, porem não baixa nada, será que poderia fazer um navegador simples que baixe qualquer arquivo e postar o projeto?
ou um vídeo mesmo, por favor cara tenho um prazo para aprender, e não to conseguindo, vlw amigo se der...
Responder
Vinícius Thiengo (0) (0)
30/03/2015
Opa Jonas, blz?
Para mim não vai dar para fazer vídeos sobre o WebView mais, mas diga ai, vc não consegue nem mostrar a página Web no WebView mesmo seguindo os passos do vídeo a cima? Se não, o que está sendo apresentado no LogCat quando tenta carregar a página no WebView? Se sim, basta colocar o link do .zip do arquivo que mesmo no WebView será realizado o Download. Colocou a permissão de Internet? Abraço
Responder
28/03/2015
thiengo, suas video aulas ajudam muito, mais quero saber como posso implementar download na minha aplicação, vc me passou um link anteriormente, mais nao ajudou, pois no exemplo so baixava uma imagem especifica, com o link da mesma, quero que ao clicar em algum link de arquivos ele baixe o arquivo e salvar no dispositivo.

obrigado, e desculpe pelos erros de português...
Responder
Vinícius Thiengo (0) (0)
29/03/2015
Fala Jonas, blz? Bom, vc pode fazer como faço no APP do Blog, apenas coloco o link para acesso ao .zip que está no servidor Web, então coloco um listener de click em um TextView e aciono uma Intent especifico assim que acontece o click, logo o download se inicia, mas dessa maneira vc não consegue mostrar o progres do download ao usuário. O código do Google, vc pode alterar para o tipo de arquivo que quiser, não? Segue o código de download que utilizo:
tv = (TextView) view.findViewById(R.id.tv_download_link);
                tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(post.getDownload().trim()));
                        activity.startActivity(intent);
}
});
Responder
25/03/2015
Entendi muito obrigado, mais uma pergunta  você sabem algum fácil e prático que eu possa programar o aplicativo o criar os botões e colocar a condição que você me passou? Estou com dificuldade nunca programei para Android e preciso fazer um trabalho para faculdade
Responder
Vinícius Thiengo (0) (0)
25/03/2015
João, não conheço gratuito, mas pago se não me engano tem vários, tipo o Fabrica de Aplicativos (http://fabricadeaplicativos.com.br/?lang=en ). Busque no GitHub tb, as vezes tem projetos parecidos prontos. Abraço
Responder
24/03/2015
Boa Noite Vinicius, olha tenho um problema e acho que pode me ajudar. vamos la

preciso desenvolver um aplicativo para Android, que quando eu clique em algum botão do meu aplicativo ele me redirecione para uma URL qualquer.

Obrigado, abraços
Responder
Vinícius Thiengo (0) (0)
24/03/2015
Fala João Gabriel, blz?
Vincule o evento de click nos botões que colocará na tela (onClickListener()), pode implementar o OnClickListener em sua MainActivity e então colocar ids para os botões, assim acesse os botões via findViewById() no método onCreate de sua Activity e vincule o listener de click a eles via setOnClickListener(this). No método onClick() faça a verificação por id via if ou switch e então pegue a url correta que deve ser aberta. Pode utilizar o vídeo acima para abrir a url dentro de um WebView interno em sua APP ou pode utilizar um Intent como o de baixo para abrir no browser mobile:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(URL_AQUI));
getActivity().startActivity(intent);

Abraço
Responder
Elias Martins (0) (0)
09/02/2015
Bom dia Vinícius, consegui fazer o webview na mesma tela "activity", só que não consigo carregar o progressbar você tem
alguma dica do que pode estar ocorrendo ?
Tentei de várias formas carrega-lo mas ele não aparece, se tiver, me da um help por favor, obrigado e abraços.
Responder
Vinícius Thiengo (0) (0)
10/02/2015
Fala Elias, blz?
Tentou colocar o ProgressBar dentro dos métodos onPageStarted() e onPageFinished() da implementação de um WebViewCliente como nesse vídeo (http://www.thiengo.com.br/monitoramento-de-inicio-e-fim-de-carregamento-de-pagina-no-webview ). Coloque o WebVIew e o ProgressBar dentro de um FrameLayout, o ProgressBar no caso seria a ultima view, para ficar por cima, no onPageFinished() vc colocaria a visibilidade dele como View.GONE. Tenta ai se não tentou assim ainda. SE não for volte ae para acharmos outra solução. Abraço
Responder
Marcelo Pereira (0) (0)
07/02/2015
Estou perdido kk poderia me ajudar? estou começando agora e por isso achei seu vídeo muito bom, baixei o exemplo, mas não consigo abrir ele no eclipse. como faço? ja criei um projeto e depois joguei os seus arquivos dentro da pasta, mas não abre. poderia me dar essa dica? deve ser simples, mas como estou começando agora fica complicado. Obrigado
Responder
Vinícius Thiengo (0) (0)
08/02/2015
Fala Marcelo, blz?
Qual seria o problema que o Eclipse está apresentando? Está ao menos conseguindo abrir no Eclipse e os erros então aparecem? Já que está iniciando recomendo que comece com o AndroidStudio, tendo em mente que ele é agora a plataforma oficial de dev Android e provavelmente o Eclipse não terá mais suporte. Com o AndroidStudio vc tem a opção de importar um projeto que foi feito em Eclipse e então ele já adapta ao AndroidStudio. Abraço
Responder
Marcelo Pereira (1) (0)
08/02/2015
Obrigado por responder. realmente depois de importar aparece os erros. pelo que entendi esse fala sobre o caminho da class java.lang.Object.
erro:
DescriptionResourcePathLocationType
The project was not built since its build path is incomplete. Cannot find the class file for java.lang.Object. Fix the build path then try building this projectExemploWebViewUnknownJava Problem
Responder
Vinícius Thiengo (0) (0)
09/02/2015
Marcelo, como o WebView não precisa de nada de especial (libs externas, no caso), vc pode copiar o código dentro um novo projeto que criou, eu digo, somente o código java que mostro no vídeo. Assim mt provavelmente vai sem problemas. Abraço
Responder
Marcelo Pereira (0) (0)
09/02/2015
Vinicius, só mais uma pergunta e veja se pela sua experiencia irei conseguir fazer o que quero com webview.
Tenho um site e nele quero colocar um botão "baixar aplicativo", o usuario clicando nele, iria instalar um ícone como se fosse um app para abrir o site, consigo fazer isso com webview ?
Responder
Vinícius Thiengo (0) (0)
10/02/2015
Marcelo, que tem como instalar um atalho para um site n APP sei que tem como, pois já vi essa feature, porém não cheguei a implementar para poder lhe dizer se é assim por meio de botão de download e cia. Encontrei esse links (http://updates.html5rocks.com/2014/11/Support-for-installable-web-apps-with-webapp-manifest-in-chrome-38-for-Android http://www.2ality.com/2014/06/installable-web-apps.html ), provavelmente vão lhe ajudar a implementar. Abraço
Responder
06/02/2015
Vinícius, queria saber se tem como  abrir a webview na mesma pagina, no caso criei um botão para chamar a página, ela abre perfeitamente do modo normal criando outra activity, mas eu preciso abrir na mesma activity que a chamou, teria como fazer isso, tiver me de um a ajuda por favor, obrigado abs.
Responder
Vinícius Thiengo (0) (0)
07/02/2015
Fala Elias, blz?
Tem como sim, na verdade a Activity e a WebView são entidades independentes, vc pode abrir a url na WebQue já está aberta com suaWebview .loadUrl("suaNovaUrl"); ou vc pode criar um novo WebView, preenche-lo como no vídeo aqui e adiciona-lo ao layout via layoutRoot.addView(seuWebView). Abraço
Responder
29/07/2014
Thiengo muito bacana o post.
Tenho um probleminha talvez vc possa ajudar.
Tenho um WebView com um iframe do Youtube, porém o video não carrega ao apertar play.

Desde já agradeço.
Responder
Vinícius Thiengo (1) (0)
29/07/2014
Fala Marcel, blz?
Velho, tive esse problema tb, senão me engano o vídeo realmente não carrega dessa forma, na verdade em alguns dispositivos carrega, mas em outros não... utilize a lib do YouTube no Android que passa sem problema algum... eu fiz dois vídeos sobre ela, segue os links:

http://www.thiengo.com.br/api-do-youtube-no-app-android-iniciando

http://www.thiengo.com.br/upload-de-video-e-youtubeintents-com-youtube-api-no-android

Abraço
Responder
30/07/2014
Vlw Thiengo, vou ver os videos.

Obrigado , e parabéns pelos posts , são os melhores !!!!!
Responder
24/06/2014
Olá Thiengo, blz?! Seguinte, URL'S como a do seu site, a aplicação roda tranquilamente com WebView, porém, com URL's como o do site facebook.com e etc, o meu emulador redireciona para o Browser, você sabe o  pq?!
Responder
Vinícius Thiengo (0) (0)
25/06/2014
Fala Matheus, blz?
Então, na época em que fiz esse vídeo não sabia dessa problemática, mas a maneira que encontrei para contornar isso foi instanciando uma WebClient e sobrescrevendo o método shouldOverrideUrlLoading(), segue um exemplo:

webvView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url){
view.loadUrl(url);
return true;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon){}
@Override
public void onPageFinished(WebView view, String url){}
});

Ve se funciona ai e depois informe, abraço
Responder
02/06/2014
Queria ver com você no webview tento carregar uma url que tem um arquivo flash com extensão swf e não mostra na app. Poderia me ajudar?
Responder
Vinícius Thiengo (0) (0)
02/06/2014
Fala Tarcisio, blz?
Vc tem acesso de root aos arquivos HTML (que contem o flash) e ao flash? Para fazermos um teste rodando diretamente do folder asset com o WebView, sem carregamento remoto de página. Encontrei esse link no stackoverflow, acho q pode ser util: http://stackoverflow.com/questions/6081743/webview-doesnt-play-swf-file-on-android

O camarada está tendo exatamente o mesmo problema e ele adicionou esse atributo (android:hardwareAccelerated = "true") no manifest (acredito que na Activity) e tudo funcionou. abraço
Responder
03/06/2014
Oh Vinicus, valeu.

Mas, fiz tudo igual e pesquisando outros sites e nada.
Responder
Vinícius Thiengo (0) (0)
03/06/2014
Hum... achei uma outra solução no stackoverflow, o camarada tinha tentado todas as outras soluções anteriores e nada, mas essa parece q deu certo, segue: http://stackoverflow.com/questions/20802288/flash-is-not-loading-in-web-view-in-android
Responder
daviola.menezes (0) (0)
02/02/2015
Eae conseguiu?
Responder
Vinícius Thiengo (0) (0)
03/02/2015
Fala Daviola, blz?
Provavelmente não, via WebView não garanto que o flash vai rodar, pois esse é o problema do YouTube tb quando carregado via WebView as vezes funciona as vezes não. Abraço
Responder