Android 自定义锁屏(带页面切换)

来源:互联网 发布:双向数据绑定的实现 编辑:程序博客网 时间:2024/05/17 22:44

我简单的了解一下自定义锁屏,顺便总结了一下思路顺便画个图帮助理解

这里写图片描述

我的效果图

这里写图片描述

代码思路
锁屏分为两块,一块是UI(自定义布局)另一块这就是服务了

自定义锁屏布局
ACTION_DOWN按下:中间的ImageView会变成另一种形态
ACTION_MOVE移动: 移动到左/右边,左/右ImageView形态也要发生变化,
ACTION_UP抬起:判断滑动到左/右那边,或者回到最初位置

*服务

 @Override    public void onCreate() {        super.onCreate();        mContext = getApplicationContext();        //管理打开的窗口程序        mWinMng = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);        i = new Intent(mContext, MyService.class);        i.setAction(MyService.LOCK_ACTION);        zdLockIntent = new Intent(MyService.this , MyService.class);        //设置此状态,首先会查找是否存在和被启动的Activity具有相同的亲和性的任务栈        zdLockIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        /*注册广播*/        IntentFilter mScreenOnFilter = new IntentFilter("android.intent.action.SCREEN_ON");        MyService.this.registerReceiver(mScreenOnReceiver, mScreenOnFilter);        /*注册广播*/        IntentFilter mScreenOffFilter = new IntentFilter("android.intent.action.SCREEN_OFF");        MyService.this.registerReceiver(mScreenOffReceiver, mScreenOffFilter);    }

这个View 就是之前自定义的View,我只说说核心的代码 稍后上Demo

    @Override    public int onStartCommand(Intent intent, int flags, int startId) {        if(intent!=null){            String action = intent.getAction();            if(TextUtils.equals(action, LOCK_ACTION))                //锁屏添加view                addView();            else if(TextUtils.equals(action, UNLOCK_ACTION))            {    //解屏移除view                removeView();            }        }        return Service.START_STICKY;    }

当程序销毁的时候.服务要重新启动,不然这个app的锁屏,会随着app的销毁而被销毁

  @Override    public void onDestroy(){        super.onDestroy();        MyService.this.unregisterReceiver(mScreenOnReceiver);        MyService.this.unregisterReceiver(mScreenOffReceiver);        //在此重新启动        startService(new Intent(MyService.this, MyService.class));    }

当屏幕变量或者变暗的时候,要解除屏幕锁定的方法,如果不解除 那只能一直锁着了=_=

  //屏幕变亮的广播,我们要隐藏默认的锁屏界面    private BroadcastReceiver mScreenOnReceiver = new BroadcastReceiver(){        @Override        public void onReceive(Context context , Intent intent) {            Log.i(TAG, intent.getAction());            if(intent.getAction().equals("android.intent.action.SCREEN_ON")){                //键盘锁的服务                mKeyguardManager = (KeyguardManager)context.getSystemService(Context.KEYGUARD_SERVICE);                mKeyguardLock = mKeyguardManager.newKeyguardLock("zdLock 1");                mKeyguardLock.disableKeyguard();                startService(i);            }        }    };      //屏幕变暗/变亮的广播 , 我们要调用KeyguardManager类相应方法去解除屏幕锁定    private BroadcastReceiver mScreenOffReceiver = new BroadcastReceiver(){        @Override        public void onReceive(Context context , Intent intent) {            String action = intent.getAction() ;            Log.i(TAG, intent.toString());            if(action.equals("android.intent.action.SCREEN_OFF")                    || action.equals("android.intent.action.SCREEN_ON") ){                mKeyguardManager = (KeyguardManager)context.getSystemService(Context.KEYGUARD_SERVICE);                mKeyguardLock = mKeyguardManager.newKeyguardLock("zdLock 1");                mKeyguardLock.disableKeyguard();                startService(i);            }        }    };

权限问题

  <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /><!-- 屏蔽HOME键需要的权限 -->    <uses-permission android:name="android.permission.VIBRATE" />    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

这个锁屏Demo涉及到的东西有点多,我写的这个博客掐不住重点,写的繁琐反而浪费大家时间,什么也不说了全在代码中↓

源码地址
http://download.csdn.net/detail/macaopark/9861172

补充一点
用小米手机当测试机,一定要把这个Demo锁屏权限打开,手机设置中找到app,打开锁屏。不然一运行就崩掉

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 被家养松鼠咬了怎么办 碳酸碱在空气中怎么办 养殖水硬度太低怎么办 dnf主线任务没了怎么办 强制执行2年过了怎么办 绣球一天就蔫了怎么办 水插绣球蔫了怎么办 小孩吃到防潮剂怎么办 狗吃了防腐潮剂怎么办 新买的鲜花蔫了怎么办 咖啡粉受潮结坨怎么办 网购兰花不开花怎么办? 月季移植后蔫了怎么办 月季叶子掉光了怎么办 红鹦鹉鱼变白了怎么办 红鹦鹉鱼生病了怎么办 泡鱿鱼干没有碱怎么办 彩虹6号买了68怎么办 r6买了乞丐版怎么办 狙击精英3闪退怎么办 踩到地雷怎么办 知乎 蛋糕海绵灌胶了怎么办 蝴蝶的翅膀断了怎么办 培乐多彩泥干了怎么办 ps4被ban机了怎么办 塔吊离建筑物8米怎么办 手表带掉边缘皮怎么办 脸皮肤过敏痒肿怎么办 脸过敏发红发肿怎么办 皮肤过敏又红又肿怎么办 春天脸过敏发红痒怎么办 皮卡车后斗生锈怎么办 没带卸妆的东西怎么办 审车尾气过不了怎么办 违章停车条丢了怎么办 停车被城管贴条怎么办 违停告知单丢了怎么办 交通事故责任认定书不服怎么办 对交通事故认定书有异议怎么办 老婆不让我碰她怎么办 车被城管拖走了怎么办