У меня есть приложение, которое я разрабатываю, которое использует 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;
}