¿"ShouldOverrideUrlLoading" está realmente en desuso? Si es así, ¿qué puedo usar en su lugar?
Parece que shouldOverrideUrlLoading
está en desuso la orientación a Android N y necesito hacer que una aplicación funcione desde la API 19 hasta la última en este momento, que es Android N (beta), utilizo algunas funciones que son nuevas en Android N (como Data Saver), por lo que la orientación Marshmallow no me ayudará con el problema ya que necesito usar esas nuevas funciones, aquí está la parte del código que uso:
public boolean shouldOverrideUrlLoading(WebView webview, String url) {
if (url.startsWith("http:") || url.startsWith("https:")) {
...
} else if (url.startsWith("sms:")) {
...
}
...
}
Y este es el mensaje que me dio Android Studio:
Invalida el método obsoleto en 'android.webkit.WebViewClient'. Esta inspección informa de dónde se utiliza el código obsoleto en el ámbito de inspección especificado.
Google no dice nada sobre esa desaprobación .
Me pregunto si el uso @SuppressWarnings("deprecation")
me permitirá trabajar en todos los dispositivos desde la API 19 hasta la última versión de Android N Beta (y su versión final cuando se lance), no puedo probarlo yo mismo, nunca lo usé y necesito estar seguro que funciona, entonces, ¿alguien puede decirlo?
Respuestas:
No, no es.
El que es nuevo en N Developer Preview tiene la firma de este método:
El que es compatible con todas las versiones de Android, incluida N, tiene la firma de este método:
Reemplazar el obsoleto, el que toma a
String
como segundo parámetro.fuente
String
. Por ejemplo, esta aplicación de ejemplo , compilada con API Level 19, funciona bien, como en un Nexus 5. con Android 6.0.String
como segundo parámetro. Por ejemplo, la aplicación de muestra a la que me vinculé, que anula la devolución de llamada obsoleta, funciona bien en un Nexus 6 que ejecuta N Developer Preview 1.getUrl()
porque el nuevo método solo se solicitará 24+Documentación detallada para futuros lectores:
La respuesta corta es que debe anular ambos métodos. El
shouldOverrideUrlLoading(WebView view, String url)
método está en desuso en la API 24 y elshouldOverrideUrlLoading(WebView view, WebResourceRequest request)
método se agrega en la API 24. Si está apuntando a versiones anteriores de Android, necesita el método anterior, y si está apuntando a 24 (o posterior, si alguien está leyendo esto en un futuro lejano) También es recomendable anular el último método.El siguiente es el esqueleto sobre cómo lograrías esto:
Al igual que
shouldOverrideUrlLoading
, puede llegar a un enfoque similar para elshouldInterceptRequest
método.fuente
@RequiresApi
en lugar de @TargetApi aquí para usarlo en el futuroshouldInterceptRequest
, es que en los dispositivos Android N + ambos se invocan y manejarás cada uri dos veces! Para remediar eso, agregué unaBuild.VERSION.SDK_INT < Build.VERSION_CODES.N
condición en la versión obsoleta.super. shouldOverrideUrlLoading(view,request)
el método no obsoleto, entonces sí, se invocarán tanto el método no obsoleto como el obsoleto. Esto se debe a que la implementación predeterminada del método no obsoleto es invocar internamente el método obsoleto. Solo eche un vistazo a laWebViewClient.shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
. Así que asegúrate de no llamarsuper.shouldOverrideUrlLoading()
.Utilizar
fuente
Implemente métodos obsoletos y no obsoletos como a continuación. El primero es manejar API nivel 21 y superior, el segundo es manejar más bajo que API nivel 21
fuente
Uri.parse
yparseUri
. Las nuevas respuestas deberían agregar nueva información útil y nuevas ideas sobre el tema.