【質問】WebViewでリクエストをフックして強制的に任意のURLに遷移させたい

534 views
Skip to first unread message

マッキー3

unread,
Aug 3, 2015, 4:07:24 AM8/3/15
to 日本Androidの会
マッキーと申します。よろしくお願いいたします。
ここの使い方ルールを間違えていたらご指摘いただければ助かります。

【質問】WebViewでリクエストをフックして強制的に任意のURLに遷移させたい。
質問①〜④とありますが無視していただいても構いません。

やり方を知りたいだけなので、ソース無視していただいて構いません。


package com.example.makki.webviewhooktest;

import android.app.Activity;
import android.graphics.Bitmap;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.content.Intent;

public class MainActivity extends Activity {
    public void onCreate(Bundle savedInstanceState) {

        WebView webview = new WebView(this);
        webview.setWebViewClient(new WebViewClient() {

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
            }

            public boolean shouldOverrideUrlLoading(WebView webView, String url) {
                //URLがYahooのトップページだったらインテントする
                if (url.equals("http://www.yahoo.co.jp")) {
                    Intent intent = new Intent(MainActivity.this, TestActivity.class);
                    startActivity(intent);
                    return true;
                }
                //エラーが出るので追加した。
                return false;
            }
        });
    }
}

質問です。
WebViewでリクエストをフックして強制的に任意のURLに遷移させたいです。

下記の情報を参考にして試そうとしていますが、エラーが出てしまいます。
http://6rats.blog62.fc2.com/blog-entry-108.html
①37行目でエラーが出るので、return false;を追加しました。理由を理解していないので教えて下さい。
②実行するとエミュレーターで「unfortunately, <アプリ名> has stopped.」が出ます
解決方法を教えて下さい。
http://hyottokoaloha.hatenablog.com/entry/2015/03/24/214407
マニュフェストファイルにパーミッションの追加はしました。activity_main.xmlは初期状態のままです。

③Bitmapは任意の画像を表示するクラスでしょうか?それだと、画像ファイルを用意する記述も足りないですね。

④もし役立ちそうな参考URLなどがあったら教えていただきたいです。


よろしくお願いいたしますm(_ _)m





この質問はスタックオーバーフローに載せています。ご解答はどちらでも結構です。
http://ja.stackoverflow.com/questions/12879/webview%E3%81%A7%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%82%92%E3%83%95%E3%83%83%E3%82%AF%E3%81%97%E3%81%A6%E5%BC%B7%E5%88%B6%E7%9A%84%E3%81%AB%E4%BB%BB%E6%84%8F%E3%81%AEurl%E3%81%AB%E9%81%B7%E7%A7%BB%E3%81%95%E3%81%9B%E3%81%9F%E3%81%84?sgp=2

Shigeo Mutoh

unread,
Aug 3, 2015, 4:35:27 AM8/3/15
to android-g...@googlegroups.com
武藤です。

shouldOverrideUrlLoading()にてWebView.loadUrl()すればよいと思います。

あと、ここの使い方というわけでもないですが、ソース添付して「エラーが出ます」
とここに書き込むよりも、もっと良い方法があります。

通常、logcatやconsoleにエラーの原因が赤い字で出力されていて、それを調べると
大抵は原因が判明します。これはプログラミング作業の一部です。避けて通れないです。

もし、そうやって調べてもまったくわからない、教えてほしいと思ったらぜひ
書き込んでください。

では。

ごりぽん

unread,
Aug 3, 2015, 6:13:45 AM8/3/15
to android-g...@googlegroups.com
 丸付き数字は確か機種依存文字なのでメールでは使わないほうがいいですよ。
 とまあ、それは置いておいて。

回答(2)
 条件が偽ならifのブロックが実行されない=ifのブロックが存在しないのと等
価ですので、試しにifのブロックを削って考えてみてください。
shouldOverrideUrlLoadingはboolean型を返すメソッドですが、ifブロックが無
い状態だと、返値が定義されないのでエラーになります。
 まあ言ってしまえばJavaの文法や構造のレベルの話で、特に今回の使い方だか
ら起きている訳ではありません。

回答(3)
 Bitmapクラスは「データとしての画像」を扱うクラスで、その機能に表示は含
まれません。たとえば画像ファイルを読み込んだとしても、それはそれだけでは
ただの「バイナリデータ列」でしかないので、Bitmapを使って「画像」として扱
えるようにします。
 表示する場合は、たとえばImageViewなどにBitmapを渡さなければいけません。

 とりあえずすぐ答えられるのはこのあたりまでですかね。
 では。

ごりぽん


On 2015/08/03 17:00, マッキー3 wrote:
> マッキーと申します。よろしくお願いいたします。
> ここの使い方ルールを間違えていたらご指摘いただければ助かります。
>
> 【質問】WebViewでリクエストをフックして強制的に任意のURLに遷移させたい。
> 質問①~④とありますが無視していただいても構いません。
>
> やり方を知りたいだけなので、ソース無視していただいて構いません。
>
>
> |packagecom.example.makki.webviewhooktest;importandroid.app.Activity;importandroid.graphics.Bitmap;importandroid.support.v7.app.ActionBarActivity;importandroid.os.Bundle;importandroid.view.Menu;importandroid.view.MenuItem;importandroid.webkit.WebView;importandroid.webkit.WebViewClient;importandroid.content.Intent;publicclassMainActivityextendsActivity{publicvoidonCreate(BundlesavedInstanceState){WebViewwebview
> =newWebView(this);webview.setWebViewClient(newWebViewClient()
> {@OverridepublicvoidonPageStarted(WebViewview,Stringurl,Bitmapfavicon)
> {super.onPageStarted(view,url,favicon);}@OverridepublicvoidonPageFinished(WebViewview,Stringurl)
> {super.onPageFinished(view,url);}publicbooleanshouldOverrideUrlLoading(WebViewwebView,Stringurl)
> {//URLがYahooのトップページだったらインテントするif(url.equals("http:
> //www.yahoo.co.jp")){Intentintent
> =newIntent(MainActivity.this,TestActivity.class);startActivity(intent);
> returntrue;}//エラーが出るので追加した。returnfalse;}});}}|
>
> 質問です。
> WebViewでリクエストをフックして強制的に任意のURLに遷移させたいです。
>
> 下記の情報を参考にして試そうとしていますが、エラーが出てしまいます。
> http://6rats.blog62.fc2.com/blog-entry-108.html
> ①37行目でエラーが出るので、return false;を追加しました。理由を理解してい
> ないので教えて下さい。
> ②実行するとエミュレーターで「unfortunately, <アプリ名> has stopped.」が
> 出ます
> 解決方法を教えて下さい。
> http://hyottokoaloha.hatenablog.com/entry/2015/03/24/214407
> マニュフェストファイルにパーミッションの追加はしました。
> activity_main.xmlは初期状態のままです。
>
> ③Bitmapは任意の画像を表示するクラスでしょうか?それだと、画像ファイルを
> 用意する記述も足りないですね。
>
> ④もし役立ちそうな参考URLなどがあったら教えていただきたいです。
>
>
> よろしくお願いいたしますm(_ _)m
>
>
>
>
>
> この質問はスタックオーバーフローに載せています。ご解答はどちらでも結構です。
> http://ja.stackoverflow.com/questions/12879/webview%E3%81%A7%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%82%92%E3%83%95%E3%83%83%E3%82%AF%E3%81%97%E3%81%A6%E5%BC%B7%E5%88%B6%E7%9A%84%E3%81%AB%E4%BB%BB%E6%84%8F%E3%81%AEurl%E3%81%AB%E9%81%B7%E7%A7%BB%E3%81%95%E3%81%9B%E3%81%9F%E3%81%84?sgp=2
>
> --
> このメールは Google グループのグループ「日本Androidの会」に登録している
> ユーザーに送られています。
> このグループから退会し、グループからのメールの配信を停止するには
> android-group-j...@googlegroups.com
> <mailto:android-group-j...@googlegroups.com> にメールを送信
> してください。
> このグループに投稿するには android-g...@googlegroups.com
> <mailto:android-g...@googlegroups.com> にメールを送信してください。
> http://groups.google.com/group/android-group-japan からこのグループにア
> クセスしてください。
> その他のオプションについては https://groups.google.com/d/optout にアクセ
> スしてください。

マッキー3

unread,
Aug 6, 2015, 8:55:19 PM8/6/15
to 日本Androidの会
ありがとうございます。m(__)m

マッキー3

unread,
Aug 6, 2015, 8:55:51 PM8/6/15
to 日本Androidの会
ありがとうございますm(__)m
Reply all
Reply to author
Forward
0 new messages