Android实现带页面切换的锁屏功能
一个简单的Android 锁屏小Demo,可以设置左滑有滑,我简单的了解一下自定义锁屏,顺便总结了一下思路顺便画个图帮助理解。

我的效果图

代码思路
锁屏分为两块,一块是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涉及到的东西有点多,我写的这个博客掐不住重点,写的繁琐反而浪费大家时间,什么也不说了全在代码中↓
源码地址:锁屏
补充一点
用小米手机当测试机,一定要把这个Demo锁屏权限打开,手机设置中找到app,打开锁屏,不然一运行就崩掉。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
Android RecycleView和线型布局制作聊天布局
大家好,本篇文章主要讲的是Android RecycleView和线型布局制作聊天布局,感兴趣的同学赶紧来看一看吧,对你有帮助的话记得收藏一下2022-01-01
Android webview手动校验https证书(by 星空武哥)
有些时候由于Android系统的bug或者其他的原因,导致我们的webview不能验证通过我们的https证书,最明显的例子就是华为手机mate7升级到Android7.0后,手机有些网站打不开了,而更新了webview的补丁后就没问题了2017-09-09
Android App中使用ViewPager+Fragment实现滑动切换效果
这篇文章主要介绍了Android App中使用ViewPager+Fragment实现滑动切换效果的方法,借助Fragment可以使Activity的内部管理逻辑更加清晰,需要的朋友可以参考下2016-03-03


最新评论