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

2019/7/7 22:00:31

本文主要是介绍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实现带页面切换的锁屏功能的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程