自定义手机锁屏界面

前两天尝试使用『悦跑圈』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地址

猜你喜欢

转载自blog.csdn.net/chenrenxiang/article/details/72528952
今日推荐