【解決方法】特定の URL を検出してアクティビティを変更する

プログラミングQA

[ad_1]

WebView で特定の URL を検出し、別のアクティビティを開始するために使用できる方法を見つけようとしています。 コードは次のとおりです。

C#
public class ClientWebView : WebViewClient
        {


            public override bool ShouldOverrideUrlLoading(WebView view, string url)
            {
                view.LoadUrl(url);
                return true;
            }

            public override void OnPageStarted(WebView view, string url, Bitmap favicon)
            {
                progressDialog.Show();
                if(url=="http://test-domain.com")
                     StartActivity(typeof(MainActivity));
                base.OnPageStarted(view, url, favicon);
            }

            public override void OnPageFinished(WebView view, string url)
            {
                base.OnPageFinished(view, url);
            }

            public override void OnReceivedError(WebView view, IWebResourceRequest request, WebResourceError error)
            {
                base.OnReceivedError(view, request, error);
            }
        }

しかし、「非静的フィールド、メソッド、またはプロパティ ‘Context.StartActivity(Type)’」にはオブジェクト参照が必要です” というエラーが表示されるため、WebViewClient で StartActivity を使用できないことはわかっています。 誰でも解決策を教えてもらえますか?

私が試したこと:

「string url= webView.URL;」で WebView の URL を取得しようとしました。 しかし、別のアクティビティを開始する方法に行き詰まります。

解決策 1

クラスに次の変更を加えることで解決できました。

C#
public class ClientWebView : WebViewClient
        {
            private Context context;
            public ClientWebView(Context context)
            {
                this.context = context;
            }

            public override bool ShouldOverrideUrlLoading(WebView view, string url)
            {
                view.LoadUrl(url);
                return true;
            }

            public override void OnPageStarted(WebView view, string url, Bitmap favicon)
            {
                progressDialog.Show();
                if (url.Equals("https://test.com/"))
                {
                    var intent = new Intent(context, typeof(MainActivity));
                    context.StartActivity(intent);
                }
                base.OnPageStarted(view, url, favicon);
            }

            public override void OnPageFinished(WebView view, string url)
            {
                if (progressDialog != null)
                {
                    progressDialog.Hide();
                }
                base.OnPageFinished(view, url);
            }

            public override void OnReceivedError(WebView view, IWebResourceRequest request, WebResourceError error)
            {
                webView.Visibility = ViewStates.Invisible;
                dialog.Show();
                base.OnReceivedError(view, request, error);
            }
        }

そして、私の oncreate メソッドに以下を追加しました:

C#
webView.SetWebViewClient(new ClientWebView(this));

[ad_2]

コメント

タイトルとURLをコピーしました