Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get window from a Service?

I made a View without an Activity by using the WindowManager.

I want to change the state of the view like below:

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

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

but I cannot use getWindow() in a Service.

Is there a way to do this?

like image 342
DuckJin Jeon Avatar asked Dec 14 '11 05:12

DuckJin Jeon


2 Answers

You can't get a window in a Service. But you can use WindowManager to add a view(root) as you did already.

And You can also update view through updateViewLayout, you can change your window's status(window type, flag, x, y, w, h, gravity, etc...) like below codes.

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);
like image 70
theWook Avatar answered Oct 14 '22 21:10

theWook


As per Service doesn't have UI, You have to start activity from it to getWindow() attribute..

Either make a Transparent activity or just start activity, getWindow() and immediately finish it.. I think you have to make a transparent activity. (This is my personal opinion)

like image 1
user370305 Avatar answered Oct 14 '22 20:10

user370305