Ist "shouldOverrideUrlLoading" wirklich veraltet? Wenn ja, was kann ich stattdessen verwenden?
Es scheint, als wäre shouldOverrideUrlLoading
das Targeting auf Android N veraltet und ich muss dafür sorgen, dass eine App seit API 19 funktioniert, bis zum neuesten Stand, Android N (Beta). Ich verwende einige Funktionen, die in Android N neu sind (wie Data Saver), also Targeting Marshmallow wird bei dem Problem nicht helfen, da ich diese neuen Funktionen verwenden muss. Hier ist der Teil des Codes, den ich verwende:
public boolean shouldOverrideUrlLoading(WebView webview, String url) {
if (url.startsWith("http:") || url.startsWith("https:")) {
...
} else if (url.startsWith("sms:")) {
...
}
...
}
Und das ist die Nachricht, die Android Studio mir gegeben hat:
Überschreibt veraltete Methode in 'android.webkit.WebViewClient' Diese Überprüfung meldet, wo veralteter Code im angegebenen Überprüfungsbereich verwendet wird.
Google sagt nichts über diese Abwertung .
Ich frage mich, ob @SuppressWarnings("deprecation")
ich mit der Funktion auf allen Geräten seit der API 19 bis zur neuesten Android N Beta (und der endgültigen Version, wenn sie veröffentlicht wird) arbeiten kann. Ich kann sie nicht selbst testen. Ich habe sie nie verwendet und muss sicher sein dass es funktioniert, kann also jeder sagen?
Antworten:
Nein ist es nicht.
Die neue Version in der N Developer Preview hat diese Methodensignatur:
Diejenige, die von allen Android-Versionen, einschließlich N, unterstützt wird, hat diese Methodensignatur:
Überschreiben Sie den veralteten
String
Parameter , der a als zweiten Parameter verwendet.quelle
String
. Zum Beispiel funktioniert diese Beispiel-App , die gegen API Level 19 kompiliert wurde,String
als zweiten Parameter nimmt. Zum Beispiel funktioniert die Beispiel-App, mit der ich verlinkt habe und die den veralteten Rückruf überschreibt, auf einem Nexus 6, auf dem N Developer Preview 1 ausgeführt wird.getUrl()
denn die neue Methode wird nur für 24+Detaillierte Dokumentation für zukünftige Leser:
Die kurze Antwort lautet, dass Sie beide Methoden überschreiben müssen. Die
shouldOverrideUrlLoading(WebView view, String url)
Methode ist in API 24 veraltet und dieshouldOverrideUrlLoading(WebView view, WebResourceRequest request)
Methode wurde in API 24 hinzugefügt. Wenn Sie auf ältere Android-Versionen abzielen, benötigen Sie die frühere Methode und wenn Sie auf 24 abzielen (oder später, wenn jemand dies in ferner Zukunft liest). Es ist ratsam, auch die letztere Methode zu überschreiben.Das Folgende ist das Grundgerüst, wie Sie dies erreichen würden:
Genau wie
shouldOverrideUrlLoading
können Sie einen ähnlichen Ansatz für dieshouldInterceptRequest
Methode entwickeln.quelle
@RequiresApi
hier anstelle von @TargetApi für die zukünftige Verwendung zu verwendenshouldInterceptRequest
, besteht darin, dass auf Android N + -Geräten beide aufgerufen werden und Sie jede URL zweimal verarbeiten! Um dem abzuhelfen, habe ichBuild.VERSION.SDK_INT < Build.VERSION_CODES.N
in der veralteten Version eine Bedingung hinzugefügt .super. shouldOverrideUrlLoading(view,request)
die nicht veraltete Methode eingeben, werden sowohl die nicht veraltete als auch die veraltete Methode aufgerufen. Dies liegt daran, dass die Standardimplementierung der nicht veralteten Methode darin besteht, die veraltete Methode intern aufzurufen. Schauen Sie sich einfach die anWebViewClient.shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
. Stellen Sie also sicher, dass Sie nicht anrufensuper.shouldOverrideUrlLoading()
.Verwenden
quelle
Implementieren Sie sowohl veraltete als auch nicht veraltete Methoden wie unten. Erstens wird API-Level 21 und höher behandelt, zweitens wird API-Level 21 behandelt
quelle
Uri.parse
und zurückgegebenen WertparseUri
. Neue Antworten sollten nützliche neue Informationen und neue Einblicke in das Thema hinzufügen.