setGameScreenStateChangeListener
设置屏幕状态变化监听器
setGameScreenStateChangeListener 用于处理小游戏发起的屏幕属性修改请求。在游戏运行过程中,JS 层可能会通过 API 申请改变屏幕亮度(如进入暗光关卡)或设置屏幕常亮(防止游戏过程中熄屏)。
由于修改系统屏幕设置涉及用户体验甚至系统权限,SDK 不会自动执行这些操作,而是通过此监听器询问宿主 App 的意见。
方法声明
java
/**
* 设置小游戏屏幕状态变化监听器。
* 当小游戏想要改变屏幕属性(亮度、常亮)时调用。
*
* @param listener 屏幕状态监听器
*/
void setGameScreenStateChangeListener(SUDRTGameHandle.GameScreenStateChangeListener listener);内部接口定义
java
public interface GameScreenStateChangeListener {
/**
* 小游戏请求改变屏幕亮度。
* @param brightness 目标亮度值(通常为 0.0 到 1.0)
* @return 返回 true 允许修改;返回 false 拒绝修改。
*/
boolean queryChangeScreenBrightness(float brightness, Bundle info);
/**
* 小游戏请求设置屏幕常亮。
* @param keepOn 是否常亮
* @return 返回 true 允许修改;返回 false 拒绝修改。
*/
boolean queryChangeScreenKeepOn(boolean keepOn, Bundle info);
}运行行为
- 决策权在 App:此监听器采用“请求-确认”模式。只有当回调返回
true时,引擎才会根据参数尝试调整底层窗口属性。 - 默认行为:如果不设置此监听器,小游戏发起的相关 JS 调用通常会静默失败或被 SDK 忽略。
- UI 线程:该回调通常在游戏线程执行,如果 App 需要在此时弹出原生提示或修改 UI 元素,需注意线程同步。
代码示例
java
gameHandle.setGameScreenStateChangeListener(new SUDRTGameHandle.GameScreenStateChangeListener() {
@Override
public boolean queryChangeScreenBrightness(float brightness, Bundle info) {
// 示例:如果亮度太低(小于 0.1),为了用户眼睛着想,拒绝修改
if (brightness < 0.1f) {
Log.w("SUDOP", "Requested brightness too low, ignoring.");
return false;
}
// 允许修改,SDK 会尝试修改当前 Activity 的窗口亮度
return true;
}
@Override
public boolean queryChangeScreenKeepOn(boolean keepOn, Bundle info) {
// 游戏通常需要保持常亮,这里建议直接同意
Log.d("SUDOP", "Screen keep on requested: " + keepOn);
// 返回 true 后,SDK 会自动为当前 Activity
// 设置/清除 WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
return true;
}
});注意事项
- 返回值的重要性:如果您的 App 有全局的节能模式或亮度控制逻辑,可以通过
queryChangeScreenBrightness的返回值来屏蔽游戏的请求。 - Activity 生命周期:这些设置通常只对当前运行游戏的 Activity 窗口生效。一旦 Activity 销毁,系统会自动恢复默认状态。
- 权限说明:修改屏幕常亮通常不需要特殊权限,但如果引擎尝试修改系统级亮度(而非仅仅是当前窗口),可能需要 Android 的
WRITE_SETTINGS权限(取决于具体的 SDK 内部实现,通常仅限窗口级)。