糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > Android仿网易云音乐中锁屏后在开锁界面插屏功能

Android仿网易云音乐中锁屏后在开锁界面插屏功能

时间:2024-05-13 13:21:37

相关推荐

Android仿网易云音乐中锁屏后在开锁界面插屏功能

这个功能实现起来应该有多种方式,可以使用WindowManager创建window的方法。

在本文中我们使用开启一个Activity来充当锁屏界面。

实现步骤有以下两步:

一、后台开启一个Service,监听屏幕锁屏广播。

二、当屏幕熄灭,收到广播后,开启充当锁屏界面的Activity。

实现思路就是这么简单,但具体细节需要说说。

首先开启Service。

Intent service = new Intent(this, LockService.class);startService(service);

在Service监听屏幕锁屏广播。

public void onCreate() {receiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction() == Intent.ACTION_SCREEN_OFF) {System.out.println("收到锁屏广播");Intent lockscreen = new Intent(LockService.this, LockScreenActivity.class);lockscreen.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(lockscreen);}}};IntentFilter filter = new IntentFilter();filter.addAction(Intent.ACTION_SCREEN_OFF);registerReceiver(receiver, filter);}

Intent.ACTION_SCREEN_OFF表示屏幕熄灭。

在广播onReceive()方法中,收到屏幕熄灭的广播后,开启充当锁屏界面的Activity,我们知道在Service中启动Activity需要添加一个标志位。

addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

这样我们便实现了锁屏功能。

问题还没有结束。

首先开启的Activity我们最好把它设置在单独的一个任务栈中,它与当前APP的任务栈没有关系,相互独立,这样才是一个好的锁屏功能。既然是锁屏,那么这个任务栈有且只有这一个Activity。

我们很容易想到singleInstance属性了。

android:launchMode="singleInstance"android:taskAffinity="com.example.suoping.lockscreen"

其次,这个Activity在最近打开的Activity中不能出现,也就是按住home键出现最近打开的Activity界面中不能有它。因为它是锁屏功能嘛,解锁之后肯定就不能再看到它。

android:excludeFromRecents="true"

最后,在Activity设置Window的Flags,一定要在setContentView之前设置。

this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);

假如我们的手机有锁屏功能,就是系统的那种锁屏,滑动图案解锁之类的,那么我们无法越过这个界面,只能在这个界面之上加入我们的Activity,加入这两个flag保证了Activity会出现在锁屏界面。

至此我们的锁屏后插屏功能已经实现。

要完全仿的话,它首先需要滑动finish功能,且不响应back键。

不响应back键容易,覆写onBackPressed()方法什么也不做。

@Overridepublic void onBackPressed() {}

滑动finish功能我们这里用到开源项目SwipeBackLayout,将Activity主题设置为透明,继承SwipeBackActivity即可。

<style name="LockScreenBase" parent="android:Theme.Light.NoTitleBar.Fullscreen"><item name="android:windowIsTranslucent">true</item><item name="android:windowBackground">@android:color/transparent</item><item name="android:colorBackgroundCacheHint">@null</item><item name="android:windowNoTitle">true</item><item name="android:backgroundDimEnabled">false</item><item name="android:windowAnimationStyle">@null</item><item name="android:windowContentOverlay">@null</item></style>

android:windowIsTranslucent表示透明。

android:windowAnimationStyle表示动画,如果锁屏Activity关闭掉后,打开的是APP,可能会短暂黑屏,那么就是因为Activity关闭动画导致的,这种需求下,可以不加这个动画。如果打开的是主页面,不会出现这个问题。

转载地址:/u010696525/article/details/51445515

如果觉得《Android仿网易云音乐中锁屏后在开锁界面插屏功能》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。