转载请注明地址,谢谢。。

Cocos2d-x中提供了一个JniHelper类来让我们对Jni进行操作。

(PS:弄了一天想自己写代码操作Jni的,但是总是出错,技术差不得不使用Cocos2d-x现成的了)。

我们有一个Android工程 :CocosDemoAndroid

还有一个Win32工程:Cocos2dDemo.win32

这个是必备的。。。

在C++ Win32工程中有一个Scene,点击按钮调用Jni函数。

void CallJni::getInputCallBack(CCObject* pSender)
{
g_AndroidPlatform.showDialog(); }

这个 g_AndroidPlatform.showDialog(); 在这个函数里面
使用JniHelper类来使用Jni。

void AndroidPlatform::showDialog()
{
CCLog("showDialog"); #ifdef ANDROID
//下面是利用jnihelper类来调用Android Static
JniMethodInfo methodInfo; //jni函数信息结构体
/*getStaticMethodInfo获取到MethodId和ClassId,ClassID通过穿进去的Activity即类名获取,MethodId通过函数名获取*/
bool isHave=JniHelper::getStaticMethodInfo(methodInfo,"com/example/cocosdemoandroid/MainActivity","showMessage","()V");
if(isHave)
{
/*调用这个函数*/
methodInfo.env->CallStaticVoidMethod(methodInfo.classID,methodInfo.methodID);
} #endif
}

C++层关键的代码就是这两个了,在使用JniHelper的时候不要忘记加上头文件

#ifdef ANDROID
#include<jni.h>
#include"platform/android/jni/JniHelper.h"
#endif

下面来看Android层代码了。

从上面的C++代码中也能看得出来

工程包名 : com.example.cocosdemoandroid

Activity:MainActivity

public class MainActivity extends Cocos2dxActivity {

	public static   Context mContext;

	/*****消息类型****/
private static final int SHOW_MESSAGE = 0; private static Handler handler=new Handler()
{
@Override
public void handleMessage(Message msg)
{
//接受消息然后去做相应的事情
if(msg.what==SHOW_MESSAGE)
{
Log.d("CocosDemoAndroid", String.valueOf(msg.obj)); //获取到Handler传递的参数数据
AlertDialog.Builder builder=new Builder(mContext);
builder.setTitle("C++调用Android");
builder.setMessage("C++调用Android显示弹出框");
builder.show();
}
super.handleMessage(msg);
}
}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext=MainActivity.this;
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} public static void showMessage()
{
Log.d("showMessage", "showMessage");
Message msg=new Message();
msg.what=SHOW_MESSAGE;
msg.obj="showmessage demos"; //可以传递参数
handler.sendMessage(msg);
} public native int InitJni(); static
{
System.loadLibrary("CocosDemo");
} }

对于Android:

为什么要使用Handle sendMessage() ??

因为如果直接在showMessage中弹出提示框,会崩溃提示 Can't create handle inside thread that has not called Looper.prepare()

再附上的Android.mk文件:

LOCAL_PATH := $(call my-dir)

RAKNET_LIB_PATH := ../../../../RakNet_PC-4.08/Android/obj/local/$(TARGET_ARCH_ABI)/libRakNet.a

$(call import-add-path, $(Cocos2d)) \
$(call import-add-path, $(Cocos2d)\cocos2dx\platform\third_party\android\prebuilt) \ include $(CLEAR_VARS) LOCAL_MODULE := libRakNet
LOCAL_SRC_FILES :=$(RAKNET_LIB_PATH) include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := CocosDemo_shared LOCAL_CFLAGS := -w -DANDROID -DRAPIDXML_NO_EXCEPTIONS LOCAL_MODULE_FILENAME := libCocosDemo LOCAL_SRC_FILES := jni.cpp \
../../Classes/TristanaLayer.cpp \
../../Classes/AppDelegate.cpp \
../../Classes/HelloWorldScene.cpp \
../../Classes/CControlTest.cpp \
../../Classes/CocosDemoMenu.cpp \
../../Classes/CCScrollViewTest.cpp \
../../Classes/CocosRakNet.cpp \
../../Classes/MissCardSprite.cpp \
../../Classes/MoveWithMouse.cpp \
../../Classes/TransCards.cpp \
../../Classes/AndroidPlatform.cpp \
../../../public/network/MissGameNetWork.cpp \
../../Classes/CallJni.cpp LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes \
$(LOCAL_PATH)/../../../public \
$(LOCAL_PATH)/../../../public/network \
$(RakNet)/Source \
$(Cocos2d)/cocos2dx \
$(Cocos2d)/cocos2dx/include \
$(Cocos2d)/cocos2dx/kazmath/include \
$(Cocos2d)/cocos2dx/platform/android \
$(Cocos2d)/cocos2dx/platform/third_party/android \
$(Cocos2d)/external \
$(Cocos2d)/CocosDenshion/include \
$(Cocos2d)/CocosDenshion/android \
$(Cocos2d)/extensions \
$(Cocos2d)/extensions/GUI/CCControlExtension \ LOCAL_STATIC_LIBRARIES := libRakNet
LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static cocosdenshion_static cocos_extension_static include $(BUILD_SHARED_LIBRARY) $(call import-module,CocosDenshion/android) \
$(call import-module,cocos2dx) \
$(call import-module,extensions)

最后上效果图:

Cocos2d-x C++调用Android弹出提示框的更多相关文章

  1. SilverLight 页面后台方法XX.xaml.cs 创建JS,调用JS ,弹出提示框

    1.Invoke和InvokeSelf [c-sharp] view plaincopy public partial class CreateJSDemo : UserControl { publi ...

  2. android标题栏上面弹出提示框(二) PopupWindow实现,带动画效果

    需求:上次用TextView写了一个从标题栏下面弹出的提示框.android标题栏下面弹出提示框(一) TextView实现,带动画效果,  总在找事情做的产品经理又提出了奇葩的需求.之前在通知栏显示 ...

  3. android标题栏下面弹出提示框(一) TextView实现,带动画效果

    产品经理用的是ios手机,于是android就走上了模仿的道路.做这个东西也走了一些弯路,写一篇博客放在这里,以后自己也可用参考,也方便别人学习. 弯路: 1.刚开始本来用PopupWindow去实现 ...

  4. iOS bug 之 H5 页面没有弹出提示框

    描述:在安卓上有提示框,但是在iOS上没有提示框. step 1: 失误,是我没有在正确的位置设置网址. step 2: 修改之后,测试页能弹出提示框,但是正式的页面没有提示框. step 3: 我输 ...

  5. C#自动关闭弹出提示框

    自动关闭弹出提示框(用一个小窗体显示提示信息):例如在一个form窗体中弹出自动关闭的提示框1.首先创建一个弹出提示信息的窗体 AutoCloseMassageBox,在里面拖一个lable控件,去掉 ...

  6. odoo13之右上角弹出提示框

    前言 在odoo中已经提供好了右上角弹出提示框的接口,我们只需要调用即可: 而提示框的实现又分为前端js实现和后段函数实现,前后端实现的效果相同. 实现效果图 前端实现提示框 在前端中显示提示框最常用 ...

  7. PHP弹出提示框并跳转到新页面即重定向到新页面

    本文为大家介绍下使用PHP弹出提示框并跳转到新页面,也就是大家所认为的重定向,下面的示例大家可以参考下   这两天写一个demo,需要用到提示并跳转,主要页面要求不高,觉得没必要使用AJAX,JS等, ...

  8. Android弹出选项框及指示箭头动画选择

     Android弹出选项框及指示箭头动画选择 Android原生的Spinner提供了下拉列表选项框,但在一些流行的APP中,原生的Spinner似乎不太受待见,而通常会有下图所示的下拉列表选项框 ...

  9. [转] 在Asp.net前台和后台弹出提示框

    一.在前台弹出提示框 1.点击"A"标记或者"控件按钮"弹出提示框 <asp:LinkButton ID="lbtnDel" runa ...

随机推荐

  1. vs2013 中HTML页 无法在设计窗口中查看的解决

    VS2013不支持HTML文件的解决办法: 1.将html文件重命名为aspx即可.不需要创建项目,直接拖进vs即可. 2.打开VS菜单->工具->选项->文本编辑器->文件扩 ...

  2. springmvc的ModelAndView的简单使用

    参考:http://blog.csdn.net/zzjjiandan/article/details/34089313 先上图: MAVTest.java package com.wyl; impor ...

  3. Listview 多个ViewHolder实现

    简单代码示例: package com.edaixi.adapter; import android.content.Context; import android.view.View; import ...

  4. python+sublime text2中文乱码[Decode error - output not utf-8]

    转自: http://blog.sina.com.cn/s/blog_765abd7b0101dtbw.html 学习,记录一下.中文编码真的挺麻烦.抽空把自己的sb3的配置写一些. 该问题让我纠结了 ...

  5. nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException

    You should autowire interface AbstractManager instead of class MailManager. If you have different im ...

  6. Android快速开发框架——AndroidAnnotations(Code Diet)

    简介:AndroidAnnotations是一个依赖注入方式来简化代码结构 ,快速开发的开源框架,使结构代码更清晰,减少代码重复性.对今后我们做自动化测试和自动化埋点开发都会提高开发效率.跟我们之前使 ...

  7. Android 动画animation 深入分析

    转载请注明出处:http://blog.csdn.net/farmer_cc/article/details/18259117 Android 动画animation 深入分析 前言:本文试图通过分析 ...

  8. linux搭建邮件服务器

    一.概述: 在配置邮件服务器之前,先解释几个概念. 通常使用Email都很容易,但是Internet的邮件系统是通过几个复杂的部分连接而成的,对于最终用户而言,我们熟悉的Outlook,Foxmail ...

  9. BootStrap 智能表单系列 五 表单依赖插件处理

    这一章比较简单哦,主要就是生产表单元素后的一些后续处理操作,比如日期插件的渲染.一些autocomplete的处理等,在回调里面处理就可以了, demo: $("input.date-pic ...

  10. visual studio2013负载测试简单问题记录

    问题1: 错误 xxxx/xx/xx xx:xx:xx 未能对测试运行“xxxxxxxxxxx”进行排队: 活动的测试设置配置为使用 Visual Studio Online 运行测试. 使用团队资源 ...