Как играть в YouTube в фоновом режиме с Android Webview?

Мое решение для .NET 4.0 с использованием Enterprise Library 5 заключалось в том, чтобы добавить ссылку на:

Microsoft.Practices.Unity.Interception.dll

1
задан Zain Tanveer 18 January 2019 в 15:20
поделиться

1 ответ

[решено] Через неделю я могу ответить на этот долгожданный вопрос Как запустить Youtube в фоновом режиме с помощью Webview . Да, веб-просмотр требует, чтобы пользовательский интерфейс запускался, мы не можем запустить его в фоновом режиме, используя сервис, даже если вы все же найдете свой путь, у вас все равно будут проблемы.

Уловки заключаются в следующем:

  1. Да, вам нужно добавить android.permission.SYSTEM_ALERT_WINDOW, потому что вы хотите создать плавающее окно, которое останется поверх других приложений.

    [1 125]
  2. Допустим, вы запросили разрешение и готовы начать MainActivity, на данный момент забудьте о setContentView(R.layout.activity_main);, вместо этого вам нужно добавить свой макет в WindowManager, используя windowManager.addView(yourLayout, yourWindowParams);

activity_main.xml

В моем макете моим родительским макетом был DrawerLayout

<android.support.v4.widget.DrawerLayout 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:id="@+id/drawer"
android:layout_width="match_parent"
android:layout_height="match_parent".....

Итак, мне пришлось определить мою переменную-член следующим образом [ 1141]

private static DrawerLayout windowMain;

MainActivity

 windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
 inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
 windowMain = (DrawerLayout) inflater.inflate(R.layout.activity_main, null);
  1. Теперь основная часть с помощью этого windowMain, вы должны позвонить

    [ 113]

например

windowMain.findViewById(R.id.btn);
windowMain.findViewById(R.id.webview);
  1. Вам также необходимо определить его WindowManager.LayoutParams. Инициализация параметров.

    WindowManager.LayoutParams=expandParams
    expandParams = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
            WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON|
                    WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
            PixelFormat.TRANSLUCENT);
    expandParams.gravity = Gravity.START | Gravity.TOP;
    expandParams.x = 0;
    expandParams.y = 0;
    
  2. Наконец, вам нужно добавить windowMain и его параметры в windowManager с помощью

      windowManager.addView(windowMain, expandParams);
    

Все сделано для того, чтобы окно плавало вокруг и возьмите весь экран, а затем сделайте то, что вам нужно, например, загрузив URL в веб-просмотр, используя wv.loadURL(url). Это гарантирует, что мы загрузили наше веб-представление внутри окна и нам просто нужно обновить параметры нашего windowMain так, чтобы оно минимизировало его или даже полностью исчезло, установив w:0 и h:0 вместо MATCH_PARENT

У вас может быть btn_ghost, который обновляет окно, например:

windowManager.updateViewLayout(windowMain, ghostParams);
  1. Наконец, когда мы создали это созданное, мы можем вызвать moveTaskToBack(true); ] это остановит деятельность, переместит ее на задачу, потому что она нам не нужна. При завершении этого действия, которое было создано, но остановлено, мы должны удалить наши windowMain.

      windowManager.removeView(windowMain);
      finish()
    
0
ответ дан Zain Tanveer 18 January 2019 в 15:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: