当前位置: 代码迷 >> Android >> android4.0自定义锁屏apk方式总结
  详细解决方案

android4.0自定义锁屏apk方式总结

热度:74   发布时间:2016-05-01 10:38:11.0
android4.0自定义锁屏apk形式总结
 好了,言归正传,说说锁屏了,其实把锁屏做成apk的形式,会引起很多问题的,导致不必要的麻烦,就像市场上的流行的Go锁屏和91锁屏也是会有一些问题的,只是影响不大,最好的做法是修改源码,在源码中定制自己的锁屏,这样一劳永逸;

首先做锁屏考虑的事有以下四点;

        (1)替换掉系统的锁屏,不能让系统的锁屏显示出来;

        (2)屏蔽掉Home键盘,back键,menu键;

        (3)在其他界面或Launcher界面,长按home键,不能让自己的锁屏apk显示在最近任务中;

        (4)每次开机显示自己的锁屏


 

        针对这四点一一做解答,不一定是完整的代码,只是提供以下思路,有兴趣的同学可以提出疑问;

         针对(1),这个比较容易,就调用disableKeyguard掉系统的就可以了;


[java] view plaincopyprint?
mKeyguardManager = (KeyguardManager)Class.this.getSystemService(Context.KEYGUARD_SERVICE);  
        mKeyguardLock = mKeyguardManager.newKeyguardLock("my_lockscreen");   
        mKeyguardLock.disableKeyguard();  
注意:在Manifext.xml中加入权限:
           <uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>



         针对(2),这个Home键的处理,我看网上有同学写博客了,有同学这么处理:

[java] view plaincopyprint?

   原理:是把这个view当成系统的错误的view,sdk文档有解释说明,

Window type: internal system error windows, appear on top of everything they can. In multiuser systems shows only on the owning user's window.

这个error的view在所有的view的最上面,所以就可以达到屏蔽home键的效果了,但是长按power键,关机界面就弹不出来了,这个我试验过,所以这个方法不可取;

       还有同学说这么做:

private static final int FLAG_HOMEKEY_DISPATCHED = 0x80000000;

public class LockLayer {     
    private Activity mActivty;     
    private WindowManager mWindowManager;     
    private View mLockView;     
    private LayoutParams mLockViewLayoutParams;     
    private static LockLayer mLockLayer;     
    private boolean isLocked;     
        
    public static synchronized LockLayer getInstance(Activity act){     
        if(mLockLayer == null){     
            mLockLayer = new LockLayer(act);     
        }     
        return mLockLayer;     
    }     
        
    private LockLayer(Activity act) {     
        mActivty = act;     
  相关解决方案