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
相关产品推荐
相关产品推荐

