Мое решение для .NET 4.0 с использованием Enterprise Library 5 заключалось в том, чтобы добавить ссылку на:
Microsoft.Practices.Unity.Interception.dll
[решено] Через неделю я могу ответить на этот долгожданный вопрос Как запустить Youtube в фоновом режиме с помощью Webview . Да, веб-просмотр требует, чтобы пользовательский интерфейс запускался, мы не можем запустить его в фоновом режиме, используя сервис, даже если вы все же найдете свой путь, у вас все равно будут проблемы.
Уловки заключаются в следующем:
Да, вам нужно добавить android.permission.SYSTEM_ALERT_WINDOW
, потому что вы хотите создать плавающее окно, которое останется поверх других приложений.
Допустим, вы запросили разрешение и готовы начать 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);
Теперь основная часть с помощью этого windowMain
, вы должны позвонить
например
windowMain.findViewById(R.id.btn);
windowMain.findViewById(R.id.webview);
Вам также необходимо определить его 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;
Наконец, вам нужно добавить windowMain и его параметры в windowManager с помощью
windowManager.addView(windowMain, expandParams);
Все сделано для того, чтобы окно плавало вокруг и возьмите весь экран, а затем сделайте то, что вам нужно, например, загрузив URL
в веб-просмотр, используя wv.loadURL(url)
. Это гарантирует, что мы загрузили наше веб-представление внутри окна и нам просто нужно обновить параметры нашего windowMain
так, чтобы оно минимизировало его или даже полностью исчезло, установив w:0
и h:0
вместо MATCH_PARENT
У вас может быть btn_ghost
, который обновляет окно, например:
windowManager.updateViewLayout(windowMain, ghostParams);
Наконец, когда мы создали это созданное, мы можем вызвать moveTaskToBack(true);
] это остановит деятельность, переместит ее на задачу, потому что она нам не нужна. При завершении этого действия, которое было создано, но остановлено, мы должны удалить наши windowMain
.
windowManager.removeView(windowMain);
finish()