Есть ли кто-нибудь знает, как 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
. В принятом ответе этот поток содержится более подробная информация о том, как установить это.