Xamarin: View.OnVisibilityChanged, OnWindowVisibilityChanged не вызываются - PullRequest
0 голосов
/ 03 мая 2019

У меня есть приложение, которое я разрабатываю, которое использует Fragments и ViewPager. Мое расширение WebView содержит методы OnWindowVisibilityChanged, OnVisibilityChanged, OnWindowSystemUiVisibilityChanged, но ни один из них не вызывается, когда я блокирую экран или переключаюсь на другое приложение. Я установил точки останова на всех них; вот откуда я знаю, что их не вызывают.

Я пытался назначить вид вручную с помощью

view = inflater.Inflate(Resource.Layout.TheFragmentLayout1, container, false); 

внутри OnVisibilityChanged и я пытался переопределить ViewState внутри каждого метода, но это бесполезно, если методы никогда не вызываются. Оба метода OnPageFinished и OnPageStarted вызываются.

Внутри моего Fragment:

readonly ExtWebViewClient _wvc = new ExtWebViewClient();

Внутри OnCreateView:

 _wv.SetWebViewClient(_wvc);

Мое расширение WebViewClient расположено внутри Fragment:

    private class ExtWebViewClient : WebViewClient
    {

        public override void OnPageStarted(WebView view, string url, Android.Graphics.Bitmap favicon)
        {
            base.OnPageStarted(view, url, favicon);
        }

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

            string _jsHideBanner = "javascript:(function() { " +
                            "document.getElementById('nav-top-menu').style.display='none'; " + "})()";

            string _jsHideBuff = "javascript:(function() { " +
           "document.getElementById('nav-menu-buffer').style.display='none'; " + "})()";

            //string _jsHideBannerC = "javascript:(function() { " +
            //   "document.getElementsByClassName('logo-wrap--home').style.display='none'; " + "})()";

            _wv.LoadUrl(_jsHideBanner);

            _wv.LoadUrl(_jsHideBuff);

        }

        [Android.Runtime.Register("onWindowVisibilityChanged", "(I)V", "GetOnWindowVisibilityChanged_IHandler")]
        protected virtual void OnWindowVisibilityChanged([Android.Runtime.GeneratedEnum] ViewStates visibility)
        {
            this.OnWindowVisibilityChanged(ViewStates.Visible);
            visibility = ViewStates.Visible;
        }


        protected virtual void OnVisibilityChanged(View changedView, [Android.Runtime.GeneratedEnum] ViewStates visibility)
        {                
            changedView = view;

            view.Visibility = ViewStates.Visible;
        }

        [Android.Runtime.Register("onWindowSystemUiVisibilityChanged", "(I)V", "GetOnWindowSystemUiVisibilityChanged_IHandler")]
        public virtual void OnWindowSystemUiVisibilityChanged([Android.Runtime.GeneratedEnum] SystemUiFlags visible)
        {
            var yo = "test";
        }


    }

Мое полное приложение можно найти здесь:

https://github.com/hexag0d/BitChute_Mobile_Android_BottomNav

Я просто хочу знать, что я делаю неправильно с точки зрения того, почему эти методы не будут вызываться, или как я мог бы реструктурировать свой код, чтобы они вызывались, когда приложение переводится в режим блокировки или в фоновом режиме. Я выложу ответ, если смогу разобраться.

Существует ответ для java / android studio, который я перевел на Xamarin, но, похоже, он работает не так:

Как заставить WebView поддерживать воспроизведение видео или аудио в фоновом режиме?

UPDATE:

Я нашел этот метод (intellisense = awesome!), Который вызывается, когда приложение переводится в фоновое состояние:

    public override void OnWindowFocusChanged(bool hasFocus)
    {
        base.OnWindowFocusChanged(hasFocus);

        _fm1.BackgroundViewOverride();
    }

и это входит в MainActivity. Теперь проблема в том, что ViewState, похоже, не меняется, так как мои видео все еще останавливаются, когда приложение переводится в фоновое состояние.

&& Вот мое переопределение ViewStates внутри Fragment1:

    public void BackgroundViewOverride()
    {
        view.Visibility = ViewStates.Visible;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...