c++ 部分
//继承cclayer的 XXXXLayer的.h文件中
virtualvoid keyBackClicked();
//XXXXLayer.cpp 中 头部添加 相应的jni头文件
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include "platform/android/jni/JniHelper.h"
#include <jni.h>
#include <android/log.h>
#endif
//XXXXLayer.cpp 中 onEnter() 添加
this->setKeypadEnabled(true);
//XXXXLayer.cpp 中 实现keyBackClicked() 函数
voidNewYearBigViewLayer::keyBackClicked()
{
JniMethodInfo minfo;
bool isHave = JniHelper::getStaticMethodInfo(minfo,"com/xxxx/xxxxx/XXXXAndroid",
"sendCloseAppMessage","()V");
if(!isHave){
CCLog("jni:此方法不存在");
}else{
minfo.env->CallStaticVoidMethod(minfo.classID,minfo.methodID);
}
CCLog("jni:jni-java执行完毕");
}
//AppDelegate.cpp 中
bool ispre_exit =false;
extern "C" {
void Java_com_xxxxx_xxxxx_XXXXXAndroid_nativecloseApp(JNIEnv* env, jobject thiz)
{
ispre_exit =false;
CCDirector::sharedDirector()->end();
}
voidJava_com_xxxxx_xxxxx_XXXXXAndroid_nativecancleCloseApp(JNIEnv* env, jobject thiz)
{
ispre_exit =false;
}
}
#endif
//java 部分
//用hander发送消息调用 closeAppDialog()
public staticvoid sendCloseAppMessage(){
Log.d("Animals", ">>>>>>>>>>>>>>>>>>>>>>>>sendCloseAppMessage");
Message msg = Message.obtain();
msg.what = MYHandle.OPEN_CLOSE_DIALOG;
myHandler.sendMessage(msg);
}
//显示对话框
public void closeAppDialog()
{
new AlertDialog.Builder(MyPictureBook.this)
.setTitle(R.string.DialogTitle)
.setMessage(R.string.closeAppMsg).setNegativeButton(R.string.positiveBtn,new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,int which)
{
dialog.dismiss();
nativecloseApp();
finish();
}
})
.setPositiveButton(R.string.negativeBtn,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,int which) {
dialog.dismiss();
nativecancleCloseApp();
}
})
.create().show();
}
public staticnativevoid nativecloseApp();
public staticnativevoid nativecancleCloseApp();
大概意思是 当点击返回键时 弹出一个对话框显示是否退出程序 选择是退出 选择否 对话框消失