Member 13276989 Ответов: 1

Обнаружение определенного URL-адреса и изменение активности


Я пытался найти способ, который можно использовать для обнаружения определенного URL-адреса в веб-представлении, а затем начать другое действие. Ниже приведен код:

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);
            }
        }


Но я знаю, что StartActivity не может быть использован в WebViewClient, так как я получаю следующую ошибку: "ССЫЛКА на объект требуется для нестатического поля, метода или свойства Context.StartActivity(Type)". Может ли кто-нибудь, пожалуйста, помочь мне с решением?

Что я уже пробовал:

Я попытался получить url-адрес webview с помощью "string url= webView. URL;", но снова застрял на том, как начать другое действие.

1 Ответов

Рейтинг:
2

Member 13276989

Я смог решить эту проблему, внеся следующие изменения в класс:

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:
webView.SetWebViewClient(new ClientWebView(this));