Est-ce que “shouldOverrideUrlLoading” est vraiment obsolète? Que puis-je utiliser à la place?

J’ai une question / un problème, est-ce que “shouldOverrideUrlLoading” est vraiment obsolète? Si oui, que puis-je utiliser à la place?

Il semble que shouldOverrideUrlLoading soit obsolète en ciblant Android N et que je shouldOverrideUrlLoading faire fonctionner une application depuis l’API 19 jusqu’à la dernière version qui est Android N (bêta), j’utilise des fonctionnalités nouvelles dans Android N (comme Data Saver), cibler Marshmallow ne va pas aider avec le problème, car je dois utiliser ces nouvelles fonctionnalités, voici la partie du code que j’utilise:

 public boolean shouldOverrideUrlLoading(WebView webview, Ssortingng url) { if (url.startsWith("http:") || url.startsWith("https:")) { ... } else if (url.startsWith("sms:")) { ... } ... } 

Et c’est le message que m’a donné Android Studio:

Substitue la méthode obsolète dans ‘android.webkit.WebViewClient’ Cette inspection indique où le code obsolète est utilisé dans l’étendue d’inspection spécifiée.

Google ne dit rien à propos de cette déchéance .

Je me demande si l’utilisation de @SuppressWarnings("deprecation") me permettra de travailler sur tous les périphériques depuis l’API 19 jusqu’à la dernière version bêta d’Android N (et sa version finale quand il sera publié). cela et je dois être sûr que cela fonctionne, alors, quelqu’un peut le dire?

Merci beaucoup.

Je pense que la version que j’utilise est la bonne, puisque c’est exactement la même chose que Android Developer Docs, sauf pour le nom de la chaîne, ils ont utilisé “view” et j’ai utilisé “webview”, car le rest est le même

Non, ce n’est pas

Celui qui est nouveau dans l’aperçu de développement N a cette signature de méthode:

 public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) 

Celui qui est supporté par toutes les versions d’Android, y compris N, a cette signature de méthode:

 public boolean shouldOverrideUrlLoading(WebView view, Ssortingng url) 

Alors, pourquoi devrais-je faire pour le faire fonctionner sur toutes les versions?

Remplace la version obsolète, celle qui prend une Ssortingng comme second paramètre.

Documenter en détail pour les futurs lecteurs:

La réponse courte est que vous devez remplacer les deux méthodes. La shouldOverrideUrlLoading(WebView view, Ssortingng url) est obsolète dans l’API 24 et la shouldOverrideUrlLoading(WebView view, WebResourceRequest request) est ajoutée dans l’API 24. Si vous ciblez des versions plus anciennes d’android, vous avez besoin de l’ancienne méthode et ciblent 24 (ou plus tard, si quelqu’un lit ceci dans un futur lointain), il est conseillé de remplacer également cette dernière méthode.

Le ci-dessous est le squelette sur la façon dont vous allez accomplir ceci:

 class CustomWebViewClient extends WebViewClient { @SuppressWarnings("deprecation") @Override public boolean shouldOverrideUrlLoading(WebView view, Ssortingng url) { final Uri uri = Uri.parse(url); return handleUri(uri); } @TargetApi(Build.VERSION_CODES.N) @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { final Uri uri = request.getUrl(); return handleUri(uri); } private boolean handleUri(final Uri uri) { Log.i(TAG, "Uri =" + uri); final Ssortingng host = uri.getHost(); final Ssortingng scheme = uri.getScheme(); // Based on some condition you need to determine if you are going to load the url // in your web view itself or in a browser. // You can use `host` or `scheme` or any part of the `uri` to decide. if (/* any condition */) { // Returning false means that you are going to load this url in the webView itself return false; } else { // Returning true means that you need to handle what to do with the url // eg open web page in a Browser final Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); return true; } } } 

Tout comme shouldOverrideUrlLoading , vous pouvez trouver une approche similaire pour la méthode shouldInterceptRequest .

Utilisation

 public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { view.loadUrl(request.getUrl().toSsortingng()); return true; }