我使用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()无法在服务中使用。
有办法吗?
答案 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中接受的答案详细说明了如何进行设置。