转载自: https://blog.csdn.net/chenrenxiang/article/details/72528952
前两天尝试使用『悦跑圈』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里监听锁屏广播,当锁屏时开启锁屏界面。