MIUI 11/12主题切换导致LifeCycleException,ClassCastException

问题描述

由于Miui 11/12使用其自己的暗模式自定义实现,因此使用以下代码会导致ClassCastException 和活动生命周期异常,因为DefaultNightMode和LocalNightMode始终未指定,即-100而不是0或1。

如果有人针对Miui 11/12专门针对小米设备构建了解决方法。请帮我解决这个问题。

使用的代码

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
this.recreate();

导致的错误

2020-10-25 07:04:43.626 9167-9167/com.xxxx.xxxxxx E/ActivityInjector: get life cycle exception
    java.lang.classCastException: android.os.BinderProxy cannot be cast to android.app.servertransaction.ClientTransaction

解决方法

我自己解决了。经过一个星期的摆弄后,我做到了。

方法如下:

-而不是为每个Activity设置android:forceDarkAllowed =“ false”。

-只需进入values.xml并将其放置在您的AppTheme中

        <item name="android:forceDarkAllowed">false</item>

它将要求您创建一个valuesv29.xml。创建它,然后从所有活动中删除forceDarkAllowed =“ false”。

欢迎。 :)

,

同样在 jetpack compose 中,只需将行添加到 theme.xml

<item name="android:forceDarkAllowed" tools:targetApi="q">false</item>

这个目标 api 对我来说很好