自定义手机锁屏界面

前两天尝试使用『悦跑圈』app跑步,发现一个蛮有意思的功能。手机锁屏之后,再点亮手机,手机锁屏界面变成了悦跑圈的界面,并且实时显示跑步的里程、速度等信息。觉得这个功能还蛮实用的,于是想试着实现一下。搜索了一些资料,具体实现过程如下:


1. 首先,锁屏界面是一个单独的界面,新建一个Activity作为锁屏界面。对这个Activity需要有几个设置。

1)背景透明,解锁滑动时背后的内容能够显示出来

2)取代系统的锁屏界面

3)不响应返回键,手机已解锁之后进入app此界面不会展示

4)右滑解锁


Activity代码如下,

public class ScreenLockActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //屏蔽系统的锁屏界面,将此activity设置为锁屏界面
        this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
                | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);

        setContentView(R.layout.activity_screen_lock);

        setRightSlide();
    }

    //右滑解锁
    private void setRightSlide(){
        SlidrConfig config = new SlidrConfig.Builder()
                .position(SlidrPosition.LEFT)
                .sensitivity(1f)
                .scrimColor(Color.BLACK)
                .scrimStartAlpha(0.8f)
                .scrimEndAlpha(0f)
                .velocityThreshold(2400)
                .distanceThreshold(0.5f)
                .build();
        Slidr.attach(this, config);
    }

    @Override
    protected void onUserLeaveHint() {
        //用户手动点击Home键或者手动切换app时,此方法会被调用,在这里销毁掉此界面。
        this.finish();
        super.onUserLeaveHint();
    }

    @Override
    public void onBackPressed() {
//        super.onBackPressed();    屏蔽返回按钮
    }

}
其中的右滑解锁,其实就是销毁掉activity,右滑销毁功能来自一个第三方库: Slidr   可以实现滑动返回功能,用起来也很方便。

背景透明在activity的Theme里设置,具体就不贴代码了。


2. 需要监听手机锁屏,当监听到手机锁屏时才创建锁屏界面,可以用一个Service来监听锁屏。service部分代码如下:

    @Override
    public void onCreate() {
        super.onCreate();

        screenLockReceiver = new BroadcastReceiver() {

            @Override
            public void onReceive(Context context, Intent intent) {
                if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
                    Intent lockScreen = new Intent(ScreenLockService.this, ScreenLockActivity.class);
                    lockScreen.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(lockScreen);
                }
            }
        };

        IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        registerReceiver(screenLockReceiver, filter);
    }
在service里监听锁屏广播,当锁屏时开启锁屏界面。

 Demo地址

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值