手机屏幕关闭时Android导航架构无法导航

Posted

技术标签:

【中文标题】手机屏幕关闭时Android导航架构无法导航【英文标题】:Android Navigation Architecture not navigating when phone screen is OFF 【发布时间】:2019-02-21 11:26:59 【问题描述】:

我的项目中有以下架构:

MainActivity布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    tools:context=".MainActivity">

    <fragment
        android:layout_
        android:layout_
        android:id="@+id/my_nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        app:navGraph="@navigation/nav_graph"
        app:defaultNavHost="true"
        />

</android.support.constraint.ConstraintLayout>

nav_graph设计:

nav_graphxml:

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/nav_graph"
    app:startDestination="@id/loginFragment">

    <fragment
        android:id="@+id/loginFragment"
        android:name="com.example.LoginFragment"
        android:label="LoginFragment" >
        <action
            android:id="@+id/loginToContentAction"
            app:destination="@id/contentFragment" />
    </fragment>
    <fragment
        android:id="@+id/contentFragment"
        android:name="com.example.ContentFragment"
        android:label="ContentFragment" />
</navigation>

LoginFragment中,我有如下逻辑:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) 
    super.onViewCreated(view, savedInstanceState)
    if(presenter.isUserLogged()) 
        // getNav() returns NavController from the MainActivity
        getNav().navigateTo(R.id.loginToContentAction)
        return
    

    // init login views etc

如果手机屏幕打开,它可以完美运行,但是(例如)如果我通过 Android Studio 部署构建,并且手机屏幕关闭,它将不会导航到 ContentFragment 并停留在 LoginFragment。我调试了这种情况,代码输入NavController.navigate(R.id.loginToContentAction) 并进入其中,但它实际上并没有导航。有什么想法可能是造成这种情况的原因吗?

【问题讨论】:

活动通常在屏幕关闭时暂停,或者在屏幕关闭时暂停。它可能会在一个奇怪的点暂停,这会打乱流程。 我遇到了同样的问题。你找到解决方案了吗? 这里有同样的问题。我曾尝试获取部分唤醒锁,但它不起作用。在我的情况下,当快速进程以 bkg 结束时会发生导航,但如果用户在此过程中按下电源按钮,则会调用导航但不会发生。 有答案吗? 【参考方案1】:

我的情况完全一样。我还没有找到一个干净的解决方案,对我来说唯一的解决方法是在屏幕关闭时跳过导航。然后在“onStart”中,执行之前跳过的导航。

【讨论】:

以上是关于手机屏幕关闭时Android导航架构无法导航的主要内容,如果未能解决你的问题,请参考以下文章

Android知识串讲(1) 底部导航栏遮挡转屏锁定ActionBar隐藏

怎么设置滑动返回键

android关掉导航栏后怎么

HTML 编写页面在手机中无法全屏显示

手机端如何用JS实现触屏

上了下百度地图,后来手机屏幕上就老有个点在闪,怎么关掉