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

时间:2011-12-14 05:01:17

标签: android service 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);

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

有办法吗?

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

根据服务没有UI,你必须从它开始活动到getWindow()属性..

要么制作透明活动,要么只是启动活动,getWindow()并立即完成它。我认为你必须做一个透明的活动。 (这是我个人的意见)

答案 2 :(得分:0)

我想要做的是,我收集的是服务信号,表明应该在活动的外观上做出改变。执行此操作的方法是让服务使用Context.sendBroadcast(Intent)广播意图,并让您的活动以onReceive方式进行回复。 this thread中接受的答案详细说明了如何进行设置。