游戏开发中,有时候用户点击了返回键(原生Android
)需要我们对当前的App
进行最小化或者退出操作,很多CocosCreator
的开发者,例如笔者,对原生这块儿不是很熟悉,于是就想着写个文档记录一下,也希望帮到同样需求的人。
构建原生Android
本次使用环境
1 | NDK路径 /Users/myuser/Library/Android/sdk/ndk/21.4.7075529 |
注意如果是Apple M2(M3)
芯片需要修改 ndk-build
文件,笔者本地测试过 NDK 25
就不需要修改关于M2
的修改。
1 | arch -x86_64 /bin/bash $DIR/build/ndk-build "$@" |
其他关于 Gradle 和 Gradle 插件的相关知识
https://developer.android.com/build/releases/gradle-plugin?hl=zh-cn 1
增加逻辑
退出操作
方法一 Android端处理
首先需要让
Activity
获取焦点 在Activity
的onCreate
中的最后,为SurfaceView
加上focus
mGLSurfaceView.requestFocus();
AppActivity.java
路径:build/jsb-default/frameworks/runtime-src/proj.android-studio/app/src/org/cocos2dx/javascript/AppActivity.java
1 | //添加焦点 |
- 在
Android
工程中,AppActivity
类里,覆盖如下方法
1 |
|
方法二 在Javascript端处理
- 监听系统按键
- 处理按键信息
1 | if (cc.sys.platform == cc.sys.ANDROID) { |
退出游戏:为了防止玩家误点,一般会要求再点一次后退才确认退出游戏。退出游戏的话,用 cc.game.end()
。
简单流程:
1). 添加标记_toExitGame
来记录首次按键。
2). 首次点击后退时,该标记设置为true,发出消息,用于弹出提示“再次点击后退,退出游戏”。
3). 如果3秒内没有再次点击,则重置该标记。
1 | if (!this._toExitGame) { |
注意:测试中,如果发现某些手机不兼容,请使用方法一
最小化App
首先需要让
Activity
获取焦点 在Activity
的onCreate
中的最后,为SurfaceView
加上focus
mGLSurfaceView.requestFocus();
AppActivity.java
路径:build/jsb-default/frameworks/runtime-src/proj.android-studio/app/src/org/cocos2dx/javascript/AppActivity.java
具体代码
1 | //添加焦点 |
- 在
Android
工程中,AppActivity
类里,覆盖如下方法
1 |
|
总结
通过介绍,学习了如何在Android
应用中实现退出和窗口最小化的功能。通过调用onBackPressed
和moveTaskToBack(true)
方法,我们可以将应用窗口退出或最小化到后台,让应用退出或在后台运行但不占据用户屏幕空间。