You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Billing切换竖屏模式致应用崩溃问题求助

问题解决:横屏应用调用Billing Client触发Resources$NotFoundException崩溃

问题背景

应用固定为sensorLandscape横屏模式(已在Manifest和BaseActivity中声明),使用com.android.billingclient:billing-ktx:6.0.0实现内购功能。点击购买按钮时,旧设备正常,但部分新设备触发Resources$NotFoundException崩溃,原因是应用被切换到竖屏模式却无对应资源。尝试在Billing Client调用时设置方向、全局Activity生命周期回调强制横屏均无效。

核心原因

Google Play Billing在部分新设备上启动内购界面时,会强制触发宿主Activity的屏幕方向切换为竖屏,导致Activity因配置变化(orientation/screenSize)重建,此时系统会尝试加载竖屏资源(如layout目录下的布局),但应用仅提供横屏资源(layout-land),从而引发资源找不到的崩溃。

解决方案

1. 禁止宿主Activity因方向变化重建

在Manifest中对应Activity的标签内添加configChanges属性,覆盖方向、屏幕尺寸相关的配置变化,避免Activity重建:

<activity
    android:name=".YourMainActivity"
    android:screenOrientation="sensorLandscape"
    android:configChanges="orientation|screenSize|smallestScreenSize">
    <!-- 其他属性 -->
</activity>

2. 强制保持横屏方向

在Activity中重写onConfigurationChanged方法,确保即使发生配置变化,仍强制设置为横屏:

override fun onConfigurationChanged(newConfig: Configuration) {
    super.onConfigurationChanged(newConfig)
    // 强制保持横屏模式
    requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE
}

3. 升级Billing Client版本(可选)

尝试升级到最新稳定版的Billing Client,Google可能在后续版本中修复了该方向适配问题:

// 替换为最新稳定版,如6.1.0或更高
implementation 'com.android.billingclient:billing-ktx:6.1.0'

补充说明

  • 全局Activity生命周期回调无效的原因:回调仅作用于应用内的Activity,而Billing内购界面属于Google Play的系统Activity,无法通过应用内回调修改其方向。
  • 若应用仍需要支持竖屏资源,可补充对应竖屏布局,但此方案会增加维护成本,优先推荐前两种方法。

内容的提问来源于stack exchange,提问作者Vlad Bulan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 14:27:33