前提・実現したいこと
以前は出来ていたことが、端末のバージョンによって出来なくなってしまい、文献等で調べているのですが、答えが見つからないため、どなたかおわかりの方がいれば、ご教示しただればと思います。
正しい動作:他のアプリから特定のURLを指定して開くと、開発しているアプリ内のWebViewでその特定のURLを開いた状態にする
正しい動作をする端末バージョン
Android 7.1.1
Chrome 61.0.3163.98
間違った動作:他のアプリから特定のURLを指定して開いても、WebViewでその特定のURLを開かず、本来、アプリでロードされるトップページが開いてしまう
意図しない動作をする端末のバージョン
Android 7.1.2
Chrome 64.0.3282.137
発生している問題・エラーメッセージ
これが原因として関係しているかどうかはわかりませんが、下記のエラーがログに出ていました。
E/chromium: [ERROR:gl_context_virtual.cc(39)] Trying to make virtual context current without decoder.
該当のソースコード
WebViewClient の shouldOverrideUrlLoading の中で、特定のURLの指定があった場合は、view.loadUrl でロード先を変更していました
Java
1@Override 2public boolean shouldOverrideUrlLoading(WebView view, String url) { 3 4 //リンク/他のアプリからの起動時用 5 Uri openingUri = get_openingUri(); 6 String openingUriString = openingUri.toString(); 7 String openingMode=get_openingMode(); 8 9 //アプリがリンクから起動した際の処理 10 if (!openingUriString.equals("") && openingMode.equals("link") ) { 11 navigate_openingUri(view, openingUri); 12 init_openingUri(); 13 return false; 14 } 15 16 //他のアプリから起動した場合の処理 17 if (openingMode.equals("otherApp") && openingUriString.length() > 0) { 18 String base_http_url = getString(R.string.base_http_url); 19 String games_view_url = base_http_url + 20 getString(R.string.games_view_action) + openingUriString; 21 view.loadUrl(games_view_url); 22 init_openingUri(); 23 return true; 24 } 25 return false; 26} 27 28//アプリがリンクから起動されていたら呼ばれる。uriから、目的のページに移動する。 29private void navigate_openingUri(WebView view, Uri openingUri) { 30 List<String> paths = openingUri.getPathSegments(); 31 String controller = paths.get(0); 32 String action = paths.get(1); 33 if (controller.equals("games") && action.equals("view")) { 34 String gameID = paths.get(2); 35 navigate_openingUri_gamesView(view, gameID); 36 } 37 init_openingUri(); 38} 39 40//起動したリンクのURLが特定のページの場合。 41private void navigate_openingUri_gamesView(WebView view, String gameID) { 42 String gameViewUrl = base_url + "games/view/" + gameID; 43 view.loadUrl(gameViewUrl); 44}
試したこと
開発環境のSDKのバージョンに合わせてshouldOverrideUrlLoadingを下記のように変更してやってみましたが、それでも動作は変わりませんでした。
Java
1public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { 2 String url = null; 3 url = request.getUrl().toString(); 4 5 // これより下は先程示したソースコードと同様です。 6 7}
補足情報(FW/ツールのバージョンなど)
現在の開発環境のバージョン
compileSdkVersion 25
buildToolsVersion '27.0.3'
以前の開発環境のバージョン
compileSdkVersion 23
buildToolsVersion "23.0.2"
あなたの回答
tips
プレビュー