android手机系统锁屏出现了,其他的提示框几不会弹出来,这是怎么做到的?
举例:我有一个短信应用,在收到短信时会弹出一个提示框出来提示给用户,但是如果这时手机系统的锁屏界面起来了,我弹出的提示框就不显示了,要等解开系统锁屏才会看到该弹出的提示框。请问一下大牛们:系统是怎么将自己的锁屏界面置于界面的最顶端而不受其他的提示框盖上来的???
举例:我有一个短信应用,在收到短信时会弹出一个提示框出来提示给用户,但是如果这时手机系统的锁屏界面起来了,我弹出的提示框就不显示了,要等解开系统锁屏才会看到该弹出的提示框。请问一下大牛们:系统是怎么将自己的锁屏界面置于界面的最顶端而不受其他的提示框盖上来的???
LockScreen.java我已经看过源码,但是在里面没看到其他将该view置于最顶层的代码,是否存在于其他什么地方?
在KeyguardViewManager.show()函数里的代码如下:final int stretch = ViewGroup.LayoutParams.MATCH_PARENT;
int flags = WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN
| WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER
| WindowManager.LayoutParams.FLAG_KEEP_SURFACE_WHILE_ANIMATING
/*| WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
| WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR*/ ;
if (!mNeedsInput) {
flags |= WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
}
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
stretch, stretch, WindowManager.LayoutParams.TYPE_KEYGUARD,
flags, PixelFormat.TRANSLUCENT);
lp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN;
lp.windowAnimations = com.android.internal.R.style.Animation_LockScreen;
lp.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_NOSENSOR;
lp.setTitle("Keyguard");
mWindowLayoutParams = lp;其中的设置的WindowManager.LayoutParams 属性,我照搬过来用,可以没效果,而且整个Activity捕捉不到TouchEvent。
是否我搞错什么地方了?
我现在是想把我自己的Activity一直的置于屏幕的最顶端,防止其他的程序盖在我的这个Activit上,如:有些短信软件,接收到短信时会弹出对话框,我现在就是不想它的这个对话框弹出来。
看一下WindowManagerService,Window有一个叠加顺序的,系统Dialog是优先级最高的。