1、c++部分(Dialog.h、Dialog.cpp)

/* * Dialog.h * * Created on: 2015-5-13 * Author: lin */#ifndef DIALOG_H_#define DIALOG_H_#include <jni.h>#include "cocos2d.h"#include "platform/android/jni/JniHelper.h"#define Dialog_CLASS_NAME "com/DialogBox/org/JniTestHelper"using namespace cocos2d;void setPackageName(const char *packageName);void exitApp();extern "C"{void showTipDialog(const char *title, const char *msg);void Java_com_DialogBox_org_JniTestHelper_setPackageName(JNIEnv *env, jobject thiz, jstring packageName);void Java_com_DialogBox_org_JniTestHelper_exitApp(JNIEnv *env, jobject thiz);}#endif /* DIALOG_H_ *//* * Dialog.cpp * * Created on: 2015-5-13 * Author: lin */#include "Dialog.h"void setPackageName(const char *packageName){    CCLog("packageName: %s", packageName);}void exitApp(){    CCDirector::sharedDirector()->end();}extern "C"{void showTipDialog(const char *title, const char *msg)    {        JniMethodInfo t;        if(JniHelper::getStaticMethodInfo(t, Dialog_CLASS_NAME, "showTipDialog", "(Ljava/lang/String;Ljava/lang/String;)V"))        {            jstring jTitle = t.env->NewStringUTF(title);            jstring jMsg = t.env->NewStringUTF(msg);            t.env->CallStaticVoidMethod(t.classID, t.methodID, jTitle, jMsg);            t.env->DeleteLocalRef(jTitle);            t.env->DeleteLocalRef(jMsg);        }    }void Java_com_DialogBox_org_JniTestHelper_setPackageName(JNIEnv *env, jobject thiz, jstring packageName){    const char *pkgName = env->GetStringUTFChars(packageName, NULL);    setPackageName(pkgName);    env->ReleaseStringUTFChars(packageName, pkgName);}    void Java_com_DialogBox_org_JniTestHelper_exitApp(JNIEnv *env, jobject thiz)    {        exitApp();    }}

2、java部分(JniTestHelper、DialogMessage、)

package com.DialogBox.org;import android.os.Handler;import android.os.Message;public class JniTestHelper {    private static Handler mHandler;    public static void init(Handler handler)    {        JniTestHelper.mHandler = handler;    }    public static native void setPackageName(String packageName);    public static native void exitApp();    //c++函数调用java层函数,显示一个对话框    private static void showTipDialog(final String title, final String text)      {        Message msg = mHandler.obtainMessage();          msg.what = DialogBox.SHOW_DIALOG;          DialogMessage dm = new DialogMessage(title, text);          msg.obj = dm;          msg.sendToTarget();      }}package com.DialogBox.org;public class DialogMessage {    public String title;    public String msg;    public DialogMessage(String title, String msg) {        super();        this.title = title;        this.msg = msg;    }    public String getTitle() {        return title;    }    public void setTitle(String title) {        this.title = title;    }    public String getMsg() {        return msg;    }    public void setMsg(String msg) {        this.msg = msg;    }}package com.DialogBox.org;import org.cocos2dx.lib.Cocos2dxActivity;import org.cocos2dx.lib.Cocos2dxGLSurfaceView;import android.app.AlertDialog;import android.content.Context;import android.content.DialogInterface;import android.content.SharedPreferences;import android.os.Bundle;import android.os.Handler;import android.os.Message;public class DialogBox extends Cocos2dxActivity{    public static final int SHOW_DIALOG = 0x0001;    public static SharedPreferences sharedPreferences;    public static SharedPreferences.Editor editor;    protected void onCreate(Bundle savedInstanceState){        super.onCreate(savedInstanceState);         JniTestHelper.init(mHandler);        JniTestHelper.setPackageName(this.getPackageName());        sharedPreferences = this.getSharedPreferences("cn",Context.MODE_PRIVATE);        editor = sharedPreferences.edit();        System.out.println(getInt("count", -1));    }    public Cocos2dxGLSurfaceView onCreateView() {        Cocos2dxGLSurfaceView glSurfaceView = new Cocos2dxGLSurfaceView(this);        // GuideLayer should create stencil buffer        glSurfaceView.setEGLConfigChooser(5, 6, 5, 0, 16, 8);        return glSurfaceView;    }        //显示对话框的函数    private Handler mHandler = new Handler()    {        @Override        public void handleMessage(Message msg) {            switch(msg.what)            {            case SHOW_DIALOG:                DialogMessage dm = (DialogMessage)msg.obj;                new AlertDialog.Builder(DialogBox.this)                .setTitle(dm.getTitle())                .setMessage(dm.getMsg()).setNegativeButton("cancle", new DialogInterface.OnClickListener() {                    @Override                    public void onClick(DialogInterface dialog, int which) {                        dialog.dismiss();                    }                })                .setPositiveButton("Ok",                         new DialogInterface.OnClickListener() {                    @Override                    public void onClick(DialogInterface dialog, int which) {                        dialog.dismiss();                        JniTestHelper.exitApp();                    }                })                .create().show();                break;            }        }    };

3、备注:Dialog_CLASS_NAME根据实际情况定义,
android.mk中的LOCAL_SRC_FILES添加Dialog.cpp 路径。

更多相关文章

  1. (20120808)(01)android菜单与对话框--之日期及时间选择对话框
  2. [Innost]Android深入浅出之Binder机制
  3. android 处理鼠标滚轮事件
  4. Android的Location功能代码
  5. Android自定义对话框的使用
  6. Android自定义对话框的使用
  7. Android自定义对话框的使用
  8. Android(安卓)Excel导入
  9. Android自定义对话框的使用

随机推荐

  1. 从键盘输入若干个学生成绩,输入负数作为输
  2. 【案例】使用flex弹性布局仿写移动端苏宁
  3. PHP基础知识:常见运算符、语句分支(模板写
  4. 0325作业
  5. List集合封装获取参数
  6. 0318作业
  7. 面向对象编程基础
  8. 如何充分利用小程序?
  9. 通过注解的 springboot+mybatis 多数据
  10. 0331作业