android手机系统锁屏出现了,其他的提示框几不会弹出来,这是怎么做到的?
举例:我有一个短信应用,在收到短信时会弹出一个提示框出来提示给用户,但是如果这时手机系统的锁屏界面起来了,我弹出的提示框就不显示了,要等解开系统锁屏才会看到该弹出的提示框。请问一下大牛们:系统是怎么将自己的锁屏界面置于界面的最顶端而不受其他的提示框盖上来的???

解决方案 »

  1.   

    ScreenLock是PhoneWindowManager创建的一个最顶层的View,其他View无法在上面显示。这是Android的Framework决定的。
      

  2.   

    你说的是LockScreen吧?
    LockScreen.java我已经看过源码,但是在里面没看到其他将该view置于最顶层的代码,是否存在于其他什么地方?
      

  3.   

    它是由PhoneWindowManager直接显示的,不许要置顶啊。其他Dialog或View也是一个PhoneWindow。
      

  4.   

    补充说明一下吧:
    在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。
    是否我搞错什么地方了?
      

  5.   

    你不能把窗口覆盖在LockScreen上面,只能重写KeyguardView.
      

  6.   

    这位同学可能误解我的本意了。
    我现在是想把我自己的Activity一直的置于屏幕的最顶端,防止其他的程序盖在我的这个Activit上,如:有些短信软件,接收到短信时会弹出对话框,我现在就是不想它的这个对话框弹出来。
      

  7.   

    就算你做一个闹钟,其他闹钟响的时候一样会覆盖的。
    看一下WindowManagerService,Window有一个叠加顺序的,系统Dialog是优先级最高的。