Включение режима сна при воспроизведении видео в Android WebView - PullRequest
0 голосов
/ 16 июня 2020

У меня есть WebView для наблюдения за веб-камерой. Канал представляет собой проигрыватель javascript, встроенный в страницу html. У меня есть контроль над страницей html, но не над потоком и самим проигрывателем js. Канал требует большой пропускной способности как для пользователя, так и для провайдера. Пытаюсь заставить, дать устройству уснуть во время просмотра видео - через минуту-две. Кажется, что бодрствование во время воспроизведения видео запечено в android. Моя проблема в том, что пользователи выключают свое устройство, а приложение играет, сжигая гигабайты даты и часы автономной работы.

Если пользователь ставит проигрыватель на паузу, устройство переходит в спящий режим. Если нет, он просто играет. Если я гуглию "положить android в режим сна при воспроизведении видео" et c. т. д. Меня тонут страницы и страницы о том, как не дать устройству заснуть. Кажется, я единственный в мире, кто хочет спать.

Было бы неплохо обнаружить флаг напротив этого:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
like: FORCE_SCREEN_TIMEOUT, 50000

Соответствующий код из моей MainActivity:

public class MainActivity extends AppCompatActivity  {
private WebView webView;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// webview webcam

String webcam = "https://xxx/webcam.html";
webView = (WebView) findViewById(R.id.webCam);
webView.setWebChromeClient(new WebChromeClientCustomPoster());
webView.setKeepScreenOn(false); // trying to get the thing to sleep
webView.setInitialScale(1); // to fill the screen no work
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView.loadUrl(webcam);
WebSettings webSettings = webView.getSettings();

// trying to pause webview with the js player buttons -- works
@Override
public void onWindowFocusChanged(boolean hasFocus) {
    webView = (WebView) findViewById(R.id.webCam);
    // TODO Auto-generated method stub
    if (hasFocus) {
        try {
            Class.forName("android.webkit.WebView")
                    .getMethod("onResume", (Class[]) null)
                    .invoke(webView, (Object[]) null);
        } catch (Exception e) {

        }
        webView.resumeTimers();
        webView.loadUrl("javascript:setflashfocus()");
    } else {
        try {
            Class.forName("android.webkit.WebView")
                    .getMethod("onPause", (Class[]) null)
                    .invoke(webView, (Object[]) null);
        } catch (Exception e) {

        }
        webView.pauseTimers();
    }
    super.onWindowFocusChanged(hasFocus);
}

Некоторые из xml при необходимости :

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="8dp"
tools:context=".MainActivity">

 <WebView
    android:id="@+id/webCam"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.022" />
...