安卓小视频app源代码进入程序后启动与手势密码相关的代码。 1.我们先分析第一种方法,进入APP时启动手势密码。 进入app时启动手势密码有一个关键点,就是前后切换。如何判断app有没

Android小视频app源码进入程序后启动手势密码

安卓小视频app源代码进入程序后启动与手势密码相关的代码。

1.我们先分析第一种方法,进入APP时启动手势密码。

进入app时启动手势密码有一个关键点,就是前后切换。如何判断app有没有前后切换?

(1)使用ProcessLifecycleOmner。

ProcessLifecycleOwner

这个类提供了整个应用程序流程的生命周期。

它可以被认为是所有活动的生命周期所有者,其中生命周期。事件。ON_START代表应用程序进入前台和生命周期。事件。开_停代表应用程序进入后台。当然(生命周期。事件。On_RESUME和生命周期。事件. ON_PAUSE也可以分别表示进入前台和后台)。

ProcessLifecycleOwner.get().lifecycle.addObserver(object:LifecycleObserver{ @OnLifecycleEvent(Lifecycle.Event.ON_START) fun onForeground(){ EasyLog.e(TAG,"== onForeground==") } @OnLifecycleEvent(Lifecycle.Event.ON_STOP) fun onBackground(){ EasyLog.e(TAG,"== onBackground==") } });

ProcessLifecycle可以很好地监控前台和后台切换,但不适合手势密码的前台和后台切换。首先,手势密码不需要在主页和登录页面弹出,这些页面需要过滤,这是ProcessLifecycle很难做到的。看下面的第二种方法。

(2)使用生命周期反馈界面:

通过这个接口,我们在onativity start回调方法中记录mactivitycount的开始时间,在onativity start回调中记录mActivityCount -的开始时间。当mActivityCount == 1时,认为它在前台,而mActivityCount ==0则在后台。代码如下:

/** * 监听 前后台启动 * 自定义 可以很容易过滤一些不需要跳出手势密码的特殊的场景,比如 登录页 */class GestureLifecycleHandler constructor(context:Context): Application.ActivityLifecycleCallbacks { companion object{ private const val TAG = "GestureLifecycleHandler" } private val uiScope = CoroutineScope(Dispatchers.Main) private var isOpenHandLock = false init { } /** * 记录 activity 前后台情况 */ private var mActivityCount: Int = 0 override fun onActivityPaused(activity: Activity?) { } override fun onActivityResumed(activity: Activity?) { } override fun onActivityStarted(activity: Activity?) { if(activityFilter(activity)){ return } mActivityCount ++ EasyLog.e(TAG,"onForeground = $mActivityCount") uiScope.launch { withContext(Dispatchers.IO){ isOpenHandLock = GestureManager.getAppGestureState() if(isOpenHandLock && mActivityCount == 1){ GestureActivity.actionStart(activity!!,GestureActivity.GestureState.Verify) } } } } override fun onActivityDestroyed(activity: Activity?) { } override fun onActivitySaveInstanceState(activity: Activity?, outState: Bundle?) { } override fun onActivityStopped(activity: Activity?) { if(activityFilter(activity)){ return } mActivityCount-- EasyLog.e(TAG,"onBackground = $mActivityCount") } override fun onActivityCreated(activity: Activity?, savedInstanceState: Bundle?) { } private fun activityFilter(activity: Activity?):Boolean{ return activity is SplashActivity }}

以上是安卓小视频app源代码进入程序后启动手势密码的相关代码。更多内容请关注以下文章。

上一篇:Android 有哪些好用的小众软件推荐?    下一篇:Angelababy让助理脱鞋袜惹争议,红蜻蜓代言人一点都不亲民贴心?    

Powered by 国产一这里只有精品 @2018 RSS地图 HTML地图

2013-2021 版权所有