setGameQueryExitListener
设置小游戏退出请求监听器
setGameQueryExitListener 用于接管小游戏的退出逻辑。当玩家在游戏内点击“返回”按钮、点击游戏自定义的退出 UI,或者触发了某些导致小游戏申请结束运行的逻辑时,SDK 会通过此接口询问宿主 App 的处理意见。
如果不设置此监听器,SDK 的默认行为通常是直接关闭并清理小游戏。
方法声明
java
/**
* 设置小游戏退出请求监听器
* 若确认退出,需在回调中调用 destroy 退出小游戏。
* 若不设置回调,则小游戏申请退出时直接退出。
*
* @param listener 退出请求监听器
*/
void setGameQueryExitListener(SUDRTGameHandle.GameQueryExitListener listener);内部接口定义
java
public interface GameQueryExitListener {
/**
* 小游戏请求退出时调用
*
* @param appId 小游戏唯一性标识
* @param result 请求退出的附带文本信息(例如 JS 层传入的提示语)
*/
void onQueryExit(String appId, String result);
}运行行为
- 拦截机制:设置此监听器后,App 获得了对“退出动作”的拦截权。引擎会暂停当前退出流程,等待 App 的指令。
- 二次确认:最常见的用途是弹出原生对话框,询问用户“是否确认退出游戏?进度可能丢失”。
- 显示销毁:注意,在回调中,如果 App 确认要关闭游戏,**必须手动调用
gameHandle.destroy()**。如果不调用,游戏将保持在当前状态。
代码示例
java
gameHandle.setGameQueryExitListener(new SUDRTGameHandle.GameQueryExitListener() {
@Override
public void onQueryExit(String appId, String result) {
// 切换到主线程弹出对话框
runOnUiThread(() -> {
new AlertDialog.Builder(MainActivity.this)
.setTitle("退出提示")
.setMessage("您确定要离开游戏吗?")
.setPositiveButton("确定", (dialog, which) -> {
// 1. 停止并销毁游戏实例
gameHandle.stop("{}");
gameHandle.destroy();
// 2. 关闭当前 Activity 或移除 View
finish();
})
.setNegativeButton("取消", (dialog, which) -> {
// 用户反悔,不执行任何操作,游戏继续运行
})
.show();
});
}
});注意事项
- 必须手动 Destroy:设置监听器后,SDK 不再自动关闭游戏。开发者若在
onQueryExit中没有任何动作,游戏将“卡”在退出前的最后画面。 - 参数 result:该参数通常包含 JS 层传递过来的上下文(如退出原因),可以根据此内容展示不同的提示语。
- 物理返回键屏蔽:如果您的 Activity 捕获了系统的
onBackPressed,建议在逻辑内部也调用gameHandle.stop()等操作,或者与此监听器的逻辑进行整合。