各位大侠,小弟遇到一个很诡异的问题,android的锁屏程序(frameworks/policies/base/phone/com/android/internal/policy/impl) 在第一次烧写完板子之后不能全屏显示,但是重启之后就是全屏显示的了,跟踪代码,感觉设置锁屏界面大小的代码应该在LockPatternKeyguardView.java里面,但是log之后发现没有call到里面的画屏幕的函数,请教一下,谢谢!

解决方案 »

  1.   

    http://www.eoeandroid.com/thread-82042-1-1.html这里面有方法可以解
    但是我改之后还有一点问题就是:使用的过程中,把屏旋转成坚屏后,锁屏,再开屏 ,屏锁只省一边了。
    希望大家能忙解决这个问题!
      

  2.   

    晕你说的那个帖子就是我发的,三楼那个也是我。你遇到的那个问题我每碰到过,我拿到的是fsl的代码,不知道你的是不是
      

  3.   

    结个贴吧,解决方法见http://www.eoeandroid.com/thread-82042-1-1.html,老大说要找到root cause哎,木有办法,纠结了
      

  4.   

    楼主在这里可以找到根本原因:
    把原来的改动还原,在 frameworks/base/core/java/android/content/res/CompatibilityInfo.java中
        public static void updateCompatibleScreenFrame(DisplayMetrics dm, int orientation,
                Rect outRect) {
            int width = dm.widthPixels;
            int portraitHeight = (int) (DEFAULT_PORTRAIT_HEIGHT * dm.density + 0.5f);
            int portraitWidth = (int) (DEFAULT_PORTRAIT_WIDTH * dm.density + 0.5f);
            if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
                int xOffset = (width - portraitHeight) / 2 ;
               outRect.set(0, 0, 0 + dm.widthPixels, dm.heightPixels);
            } else {
                int xOffset = (width - portraitWidth) / 2 ;
                outRect.set(0, 0, 0 + dm.widthPixels, dm.heightPixels);
            }
        }在这个文件中代码跟上去就可以找到原因了。
      

  5.   

    谢谢xubin341719同学!问题解决了,我有几点请教一下:
    1. 看这个函数的名字updateCompatibleScreenFrame联想,这个现象和CompatibleScreen有没有关系?CompatibleScreen是什么?为什么起来的时候会调到这里
    2. 如果就如同你改的那样是不是就可以了,会不会引起其他地方的bug?
    3. DEFAULT_PORTRAIT_HEIGHT,DEFAULT_PORTRAIT_WIDTH这两个值我改成我们屏幕的大小800*480可以吗?会不会有其他的bug出现?
    4. 是不是系统有什么property没有设置导致了这个现象的产生?说到底我还是没有找到真正的root cause,自己太菜了,不过还是很感谢你!
      

  6.   

    嘿嘿,其实我也是菜鸟。前面我还是跟你的贴子改的。
    这个方法是比较别人提供的。所以您的问题我也没仔细研究。
    其实比较android2.2/2.3的代码,这两个地方都没太大变动。方法一:/phone/com/android/internal/policy/impl/KeyguardViewManager.java 把这里面的值写死,我这里蛭到的问题(系统:android2.3.4,平台:s5pc110)
    (1)把屏转成竖屏锁屏时,屏锁只有一边;(我的平台是有这种现象)
    (2)长按home键显示最近程序时,出现相同的现象,那个半透明的界面没有全屏,(不知道这个楼主注意到没有)方法二:frameworks/base/core/java/android/content/res/CompatibilityInfo.java这里面。
    我觉得改DEFAULT_PORTRAIT_HEIGHT /DEFAULT_PORTRAIT_WIDTH 这两个值是根本原因,不过看android2.2的也是一样的,那这个观点也不成立,不好意思。
    我按这种方法改,测试还没发现问题。在出问题的情况下我打印了几个值的信息,看对你分析有用没:
     width  = dm.widthPixels = 1024
     dm.density     = 1.5
     portraitHeight = 720
     portraitWidth = 480dm.widthPixels = 1024
    dm.heightPixels= 600其实出现偏移的原因是:
    假设横屏:
      xOffset = (width - portraitHeight) / 2= (1024-720)/ 2 = 152
    所在在程序中原来的代码是
    outRect.set(xOffset, 0, xOffset + portraitHeight, portraitWidth);
    outRect.set(152, 0, 152+ 720, 480);
    xOffset 所以有了左右的偏移。
    我们改动是:
    outRect.set(0, 0, 0 + dm.widthPixels, dm.heightPixels);
    outRect.set(0, 0, 0 + 1024, 600);
    你注意下你长按home看最近应用程序,会满屏不、
      

  7.   

    恩,如果不改的话,长按home看最近应用程序也是不会全屏的,我之前也遇到过,觉得是一个问题,解了其中一个另一个应该也就好了。
    我最新的发现如下:WindowManagerService.java中函数computeFrameLw里面            if ((mAttrs.flags & FLAG_COMPATIBLE_WINDOW) != 0) {
                    container.intersect(mCompatibleScreenFrame);    //问题出在这里
                    if ((mAttrs.flags & FLAG_LAYOUT_NO_LIMITS) == 0) {
                        display.intersect(mCompatibleScreenFrame);
                    }
                }我在想怎么让mAttrs.flags & FLAG_COMPATIBLE_WINDOW == 0 这样就好了,呵呵,还要进一步看一下~471473543,我的qq号,加一下吧~