質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.87%

  • Java

    12799questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Android

    6085questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Android Studio

    3357questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

他のアプリからアプリ内のWebViewで特定のURLのページを直接開きたい

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 69

Kiyohiko

score 0

 前提・実現したいこと

以前は出来ていたことが、端末のバージョンによって出来なくなってしまい、文献等で調べているのですが、答えが見つからないため、どなたかおわかりの方がいれば、ご教示しただればと思います。

正しい動作:他のアプリから特定の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 でロード先を変更していました

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {

  //リンク/他のアプリからの起動時用
  Uri openingUri = get_openingUri();
  String openingUriString = openingUri.toString();
  String openingMode=get_openingMode();

  //アプリがリンクから起動した際の処理
  if (!openingUriString.equals("") && openingMode.equals("link") ) {
    navigate_openingUri(view, openingUri);
    init_openingUri();
    return false;
  }

  //他のアプリから起動した場合の処理
  if (openingMode.equals("otherApp") && openingUriString.length() > 0) {
    String base_http_url = getString(R.string.base_http_url);
    String games_view_url = base_http_url + 
      getString(R.string.games_view_action) + openingUriString;
    view.loadUrl(games_view_url);
    init_openingUri();
    return true;
  }
  return false;
}

//アプリがリンクから起動されていたら呼ばれる。uriから、目的のページに移動する。
private void navigate_openingUri(WebView view, Uri openingUri) {
  List<String> paths = openingUri.getPathSegments();
  String controller = paths.get(0);
  String action = paths.get(1);
  if (controller.equals("games") && action.equals("view")) {
    String gameID = paths.get(2);
    navigate_openingUri_gamesView(view, gameID);
  }
  init_openingUri();
}

//起動したリンクのURLが特定のページの場合。
private void navigate_openingUri_gamesView(WebView view, String gameID) {
  String gameViewUrl = base_url + "games/view/" + gameID;
  view.loadUrl(gameViewUrl);
}

 試したこと

開発環境のSDKのバージョンに合わせてshouldOverrideUrlLoadingを下記のように変更してやってみましたが、それでも動作は変わりませんでした。

public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
  String url = null;
  url = request.getUrl().toString();

  // これより下は先程示したソースコードと同様です。

}

 補足情報(FW/ツールのバージョンなど)

現在の開発環境のバージョン
compileSdkVersion 25
buildToolsVersion '27.0.3'

以前の開発環境のバージョン
compileSdkVersion 23
buildToolsVersion "23.0.2"

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • kakajika

    2018/07/12 22:38

    メソッド内にログ出力のコードを埋め込んでみてはどうでしょうか? メソッドが呼ばれてすらいないのかどうかを確認したほうがいいと思います。

    キャンセル

  • Kiyohiko

    2018/07/12 22:45

    ご指摘ありがとうございます。ログ出力については、随所に入れていたのですが、見にくいと思い、ここに貼り付けた後に削除しました。元々、動いていたものなので、呼び出されていないということはありません。

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.87%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    [java][日付チェック]質問

    java初心者です。 テキストファイルを一行づつ読み込んで行く時に、 32日や14月など、異常な日付が紛れていた場合例外として処理する方法はありますでしょうか? while ((

  • 受付中

    Java の配列をPHPの配列の文字列で返したい

    http://example.com/test?params[0][test]=0000-00-00%2000:00:00&params[0][test2]=1 以下のようなUR

  • 受付中

    計算機の機能追加に関する質問

    javaで計算機のプログラムを作成しました。 単項マイナス演算(例、-10+5)を行う処理を追加したいのですが 修正方法がわかりません。 どのように修正したらよいでしょうか?

  • 解決済

    クラスリストの比較でcontainsが動作してくれない

    containsを用いて2つのクラスリストを比較したいのですが、うまく動作してくれません。 class Order{ public int id; publi

  • 解決済

    Javaでマス当てゲームを作りたい

    前提・実現したいこと Javaで5*5のマス目から当たりを見つけるプログラムを作りたいと考えています。 インターネットで下記のプログラムを見つけ応用できないかと思っています。

  • 解決済

    Javaのプログラミングで詰まっています

    最近、独学でJavaの学習を始めた新参者です。 エクリプスを利用して自分でプログラムを書いているのですが エラーの出てる箇所の修正方法がわからず詰まっている状態です。 よろし

  • 解決済

    HTTP通信でJSONデータをカラムごとに取得したいです。

    前提・実現したいこと RailsAPIからJSONデータをカラムごとにAndroid側で取得したいです。 取得するデータは以下です。(en_titleカラムの値を取得したいです

  • 解決済

    google drive と androidアプリの連携でエラー

    お世話になります。 前提・実現したいこと google drive と自作androidアプリの連携を勉強するために、 http://vividcode.hatenablog.

同じタグがついた質問を見る

  • Java

    12799questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Android

    6085questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Android Studio

    3357questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。