<前提>
開発環境: Android Studio 3.4.1
compilesdkversion : 29
targetsdkversion: 29
minsdkversion: 28
<問題>
-
アプリで WebView を開いてボタンタップ -> 画面遷移 -> 遷移先の WebView 画面でボタンをタップ -> 添付のエラー画面が表示される (ERR_UNKWONN_URL_SCHEME)
-
この問題は 対応している API Level の Android 9 ,10,11 全てで再現します。
<実装>
WebViewClient クラスの shouldOverrideUrlLoading メソッドを使い、遷移先 WebView のボタンタップ処理をハンドリングしようとしています。
しかし、ブレークポイント を貼って確認すると、shouldOverrideUrlLoading メソッドそのものが呼ばれていない様です。
java
1 @Override 2 public boolean shouldOverrideUrlLoading(WebView view, String url) { 3 <!-- 省略 --!> 4 } else { 5 if (uri.getScheme().equals("mailto")) { 6 <!-- 処理内容(intent を飛ばしてアプリのActivityを起動する処理) --!> 7 return true; 8 }
<解決に向けて試したこと>
「shouldOverrideUrlLoading 呼ばれない」 などで検索すると以下のサイトがヒットしました。
しかし、先に結論を申し上げると以下の情報では問題を解決することができませんでした。
「ハンドリングの効かないページ遷移」 の内容が今回の問題とマッチしていたので試しましたが、解決できませんでした。
- POSTでのページ遷移: onPageStarted でもハンドリングする --> NG
- PDFなど、WebViewで開くことのできないファイル --> 問題に該当しない
- Basic認証 --> 問題に該当しない
- URLスキーム --> 既に対応済み
- [Android webview - shouldOverrideUrlLoading() not called in some jsp pages
](https://stackoverflow.com/questions/30658706/android-webview-shouldoverrideurlloading-not-called-in-some-jsp-pages)
jsp pages については、JavaServer Pageの略 であること以外よくわかりませんでしたが、MyWebChromeClient クラスの onProgressChaged メソッドをオーバーライドして、処理を書き込む解決策がついていたので試してみました --> NG
java
1mWebView.setWebChromeClient(new MyWebChromeClient(){ 2 3 @Override 4 public void onProgressChanged(){ 5 if (progress == 100) { 6 Uri uri = Uri.parse(view.getUrl()); 7 if (uri.getScheme().equals("mailto")) { 8 <!-- 処理内容(intent を飛ばしてアプリのActivityを起動する処理) --!> 9 } 10 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。