"ShouldOverrideUrlLoading" está realmente obsoleto? Se sim, o que posso usar?
Parece que shouldOverrideUrlLoading
foi descontinuado para o Android N e preciso fazer com que um aplicativo funcione desde a API 19 até o mais recente, que é o Android N (beta), uso alguns recursos novos no Android N (como o Data Saver), para segmentar O Marshmallow não ajudará com o problema, pois preciso usar esses novos recursos. Aqui está a parte do código que uso:
public boolean shouldOverrideUrlLoading(WebView webview, String url) {
if (url.startsWith("http:") || url.startsWith("https:")) {
...
} else if (url.startsWith("sms:")) {
...
}
...
}
E esta é a mensagem que o Android Studio me deu:
Substitui o método obsoleto em 'android.webkit.WebViewClient' Esta inspeção relata onde o código obsoleto é usado no escopo de inspeção especificado.
O Google não diz nada sobre essa depreciação .
Gostaria de saber se o uso @SuppressWarnings("deprecation")
me permitirá trabalhar em todos os dispositivos, desde a API 19 até o Android N Beta mais recente (e sua versão final, quando for lançado), não posso testá-lo sozinho, nunca usei isso e preciso ter certeza que funciona, então, qualquer um pode dizer?
Respostas:
Não não é.
O novo no N Developer Preview possui esta assinatura de método:
O que é suportado por todas as versões do Android, incluindo N, tem esta assinatura de método:
Substitua o que foi descontinuado, aquele que leva a
String
como segundo parâmetro.fonte
String
. Por exemplo, este aplicativo de amostra , compilado no nível 19 da API, funciona bem, como em um Nexus 5. com Android 6.0.String
como segundo parâmetro. Por exemplo, o aplicativo de exemplo ao qualgetUrl()
porque o novo método só será chamado para 24+Documentar em detalhes para futuros leitores:
A resposta curta é que você precisa substituir os dois métodos. O
shouldOverrideUrlLoading(WebView view, String url)
método foi descontinuado na API 24 e oshouldOverrideUrlLoading(WebView view, WebResourceRequest request)
método foi adicionado na API 24. Se você estiver direcionando versões mais antigas do Android, precisará do método anterior e se estiver direcionando 24 (ou mais tarde, se alguém estiver lendo isso em um futuro distante) é aconselhável substituir o último método também.A seguir, está o esqueleto de como você faria isso:
Assim como
shouldOverrideUrlLoading
, você pode criar uma abordagem semelhante para oshouldInterceptRequest
método.fonte
@RequiresApi
em vez de @TargetApi aqui para uso futuroshouldInterceptRequest
, é que em dispositivos Android N + são ambos invocado e você vai ser lidar com cada uri duas vezes! Para remediar isso, adicionei umaBuild.VERSION.SDK_INT < Build.VERSION_CODES.N
condição na versão preterida.super. shouldOverrideUrlLoading(view,request)
o método não reprovado, sim, o método não reprovado e o obsoleto serão chamados. Isso ocorre porque a implementação padrão do método não preterido é chamar internamente o método preterido. Basta dar uma olhada noWebViewClient.shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
. Portanto, certifique-se de não ligarsuper.shouldOverrideUrlLoading()
.Usar
fonte
Implemente métodos preteridos e não preteridos, como abaixo. O primeiro é lidar com o nível 21 da API e superior, o segundo é lidar com o nível inferior à API 21
fonte
Uri.parse
eparseUri
. Novas respostas devem adicionar novas informações úteis e novos insights ao tópico.