Android实现带页面切换的锁屏功能

 更新时间:2018年06月05日 10:40:31   作者:Xia_焱  
这篇文章主要为大家详细介绍了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 Activity向右滑动返回

    Android Activity向右滑动返回

    这篇文章主要介绍了Android Activity向右滑动返回,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • Android实现自定义滑动刻度尺方法示例

    Android实现自定义滑动刻度尺方法示例

    这篇文章主要给大家介绍了关于Android实现自定义滑动刻度尺的相关资料,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • 详解Android studio 动态fragment的用法

    详解Android studio 动态fragment的用法

    这篇文章主要介绍了Android studio 动态fragment的用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • Android使用注解代替枚举节省系统内存开销的方法

    Android使用注解代替枚举节省系统内存开销的方法

    在本篇文章里小编给大家整理的是关于Android使用注解代替枚举节省系统内存开销的方法和实例,需要的朋友们参考下。
    2020-01-01
  • Android解决所有双击优化的问题

    Android解决所有双击优化的问题

    这篇文章主要为大家介绍了Android解决所有双击优化的问题,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Android中AsyncTask详细介绍

    Android中AsyncTask详细介绍

    这篇文章主要介绍了Android中AsyncTask详细介绍,AsyncTask是一个很常用的API,尤其异步处理数据并将数据应用到视图的操作场合,需要的朋友可以参考下
    2015-01-01
  • Android sqlite cursor的遍历实例详解

    Android sqlite cursor的遍历实例详解

    在本篇内容里小编给大家整理的是一篇关于Android sqlite cursor的遍历的相关实例及知识点,需要的朋友们可以学习下。
    2021-06-06
  • Android RecyclerView加载不同布局简单实现

    Android RecyclerView加载不同布局简单实现

    这篇文章主要为大家详细介绍了Android RecyclerView加载不同布局简单实现,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • Android之自定义实现BaseAdapter(通用适配器二)

    Android之自定义实现BaseAdapter(通用适配器二)

    这篇文章主要为大家详细介绍了Android之自定义实现BaseAdapter通用适配器第二篇,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • Kotlin的枚举与异常示例详解

    Kotlin的枚举与异常示例详解

    这篇文章主要给大家介绍了关于Kotlin的枚举与异常的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Kotlin具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07

最新评论