有没有人知道如何在Android上运行getWindow()?

Duc*_*eon 18 service android android-activity

我使用WindowManager创建了一个没有Activity的视图.

但我必须改变下面的观点

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

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN, WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
Run Code Online (Sandbox Code Playgroud)

但getWindow()无法在服务中使用.

有办法吗?

the*_*ook 7

无法在服务中获得窗口.但您可以使用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);
Run Code Online (Sandbox Code Playgroud)


use*_*305 1

由于服务没有 UI,您必须从它启动活动到 getWindow() 属性。

要么创建一个透明活动,要么只是启动活动, getWindow() 并立即完成它。我认为你必须创建一个透明活动。(这是我个人的看法)