Есть ли кто-нибудь знает, как getWindow() в службе на Android?

Я сделал вид без активности с помощью WindowManager.

но мне нужно изменить состояние просмотра, как показано ниже

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN, WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);

но getWindow() не может использоваться в службе.

Есть ли способ?

Ответы

Ответ 1

Вы не можете получить окно в Сервисе. Но вы можете использовать WindowManager, чтобы добавить представление (root), как вы уже делали.

И вы также можете обновить представление через updateViewLayout, вы можете изменить статус своего окна (тип окна, флаг, x, y, w, h, гравитация и т.д.), как показано ниже.

private WindowManager mWindowManager;
private WindowManager.LayoutParams mLayoutParams;
..........

//let assume that an event occurred
if(mConfiguration.orientation==Configuration.ORIENTATION_LANDSCAPE){
    mLayoutParams.screenOrientation=Configuration.ORIENTATION_PORTRAIT;
}
mLayoutParams.softInputMode=WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN;

mLayoutParams.gravity = Gravity.TOP|Gravity.CENTER; 
int flag=0
            |WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN
            |WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
            |WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM
            ; 
mLayoutParams.flags=flag;

mWindowManager.updateViewLayout(mRootView, mLayoutParams);

Ответ 2

В соответствии с Сервисом нет пользовательского интерфейса, вы должны начать с него активировать атрибут getWindow().

Либо сделайте прозрачную активность, либо просто запустите активность, getWindow() и сразу закончите ее. Я думаю, вам нужно сделать прозрачную деятельность. (Это мое личное мнение)

Ответ 3

То, что вы пытаетесь сделать, как я понимаю, имеет служебный сигнал о том, что необходимо внести изменения в вид активности. Способ сделать это для того, чтобы служба транслировала намерение с помощью Context.sendBroadcast(Intent) и чтобы ваша деятельность отвечала в нем методом onReceive. В принятом ответе этот поток содержится более подробная информация о том, как установить это.