為何出現此錯誤訊息?This declaration overrides deprecated member but not marked as deprecated itself. Please add @Deprecated annotation or suppress. See https://youtrack.jetbrains.com/issue/KT-47902 for details

 你的程式碼出現這個錯誤,是因為 shouldOverrideUrlLoading(view: WebView, url: String): Boolean 已經被標記為過時(deprecated)


解決方案

正確寫法(使用新方法)

Google 在 API 24(Android 7.0)後,推薦使用

kotlin
override fun shouldOverrideUrlLoading( view: WebView, request: WebResourceRequest ): Boolean { val url = request.url.toString() return if (isGoogleMapsUrl(url)) { try { openGoogleMapsApp(url) true } catch (e: Exception) { e.printStackTrace() false } } else { false } }

為什麼要改?

❌ 舊方法(已過時)

kotlin
override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean

這個方法在 API 24(Android 7.0)後被標記為 @Deprecated,原因是它:

  • 無法正確處理 POST 請求

  • 無法獲取額外 HTTP 標頭

  • 無法準確辨識來源(例如 WebView 還是其他 app 呼叫)

新方法

kotlin
override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean

這個新方法:

  • 提供完整的 WebResourceRequest,可讀取完整 URL 與 HTTP 標頭

  • 更安全且符合新的 WebView 行為


如果你的 App 支援舊版 Android(API < 24)

如果你的 app 需要支援舊版 Android,則可以同時實作新舊方法

kotlin
override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean { val url = request.url.toString() return handleUrl(view, url) } // 兼容舊版 Android(API < 24) @Suppress("DEPRECATION") override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean { return handleUrl(view, url) } // 抽取共用邏輯 private fun handleUrl(view: WebView, url: String): Boolean { return if (isGoogleMapsUrl(url)) { try { openGoogleMapsApp(url) true } catch (e: Exception) { e.printStackTrace() false } } else { false } }

這樣可以確保:

  • Android 7.0 以上 使用 shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest)

  • Android 6.0 及以下 使用 shouldOverrideUrlLoading(view: WebView, url: String)


結論

  • API 24 以上shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest)

  • 如需兼容舊版 Android,則兩個方法都實作,並用 @Suppress("DEPRECATION") 忽略警告。

這樣你的 WebView 會更穩定、更安全,並且不會再出現警告! 🚀

沒有留言:

張貼留言

excel 最大值用max,取最小值但要排除0,要怎麼寫?

 =MIN(IF(A1:A10<>0, A1:A10))