Кто-нибудь знает, как получить Window () в службе на Android? - PullRequest
17 голосов
/ 14 декабря 2011

Я сделал View без Activity с помощью 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 () нельзя использовать в сервисе.

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

Ответы [ 3 ]

7 голосов
/ 14 февраля 2014

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

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

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

//let's 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);
0 голосов
/ 14 декабря 2011

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

0 голосов
/ 14 декабря 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...