Cocos2d-x通过Jni实现Cocos2d-x界面跳转到新的Activity

废话不多说,直接上源码

1、Java层

1)首先在org.cocos2dx.cpp目录下添加新类UserInfoActivity.java,该类自行定义即可,代码如下:

package org.cocos2dx.cpp;

import com.pactera.jni.R;//注意路径
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.content.Intent;
public class UserInfoActivity extends Activity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.userinfo);

        Intent intent = getIntent();
        String string = intent.getStringExtra("name");  

        TextView textView = new TextView(this);
        textView.setTextSize(40);
        textView.setText(string);  

        setContentView(textView);
    }
}

2)AppActivity.java类

package org.cocos2dx.cpp;

import org.cocos2dx.lib.Cocos2dxActivity;
import org.cocos2dx.lib.Cocos2dxGLSurfaceView;
import android.content.Intent;
import android.os.Bundle;

public class AppActivity extends Cocos2dxActivity{
	public static final int SHOW_DIALOG = 0x0001;

	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
	}
	//设置OpenGL的相关信息
	public Cocos2dxGLSurfaceView onCreateView() {
        Cocos2dxGLSurfaceView glSurfaceView = new Cocos2dxGLSurfaceView(this);
        // GuideLayer should create stencil buffer
        glSurfaceView.setEGLConfigChooser(5, 6, 5, 0, 16, 8);

        return glSurfaceView;
    }
	//加载Cocos2d-x的库
	static {

		System.loadLibrary("cocos2dcpp");
	}
	public static void Share(){   //Jni的Java层nativa代码,在Jni目录下的test.cpp实现,并被C++调用
		 Intent intent = new Intent();
         intent.setClass(AppActivity.getContext(), UserInfoActivity.class);
         intent.putExtra("name", "Hello World");
         AppActivity.getContext().startActivity(intent);
    }
}

2、Jni层

jni目录下添加test类的.h和.cpp

test.h

#ifndef TEST_H_
#define TEST_H_
extern "C"
{
	//C++调Java的函数接口,该方法在HelloWorldScene中menuCallback函数中使用。
	void Share();
}
#endif

test.cpp

#include "test.h"
#include "cocos2d.h"
#include "platform/android/jni/JniHelper.h"
#include "../../../Classes/JniTest.h"
#include <jni.h>

//#define CLASS_NAME "org/cocos2dx/cpp/JniTestHelper"
#define CLASS_NAMENEW "org/cocos2dx/cpp/AppActivity"
using namespace cocos2d;
extern "C"
{
	void Share()
	{
		bool hasMethod;
		JniMethodInfo t;
		hasMethod = JniHelper::getStaticMethodInfo(t,CLASS_NAMENEW,"Share","()V");
		if(hasMethod)
		{
			log("Share function");
			if(t.methodID)
			{
				t.env->CallStaticVoidMethod(t.classID,t.methodID);
				log("function share() was called");
			}else{
				log("function share was not called");
			}
		}else
		{
			log("function share was not found");
		}
	}
}

3、C++层

void HelloWorld::menuCloseCallback(Ref* pSender)
{
#if(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

    Share();

#endif

#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
    exit(0);
#endif
}

4、注意事项

添加平台判断头文件

#if(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include "../proj.android/jni/hellocpp/test.h"
#endif

5、运行结果

时间: 2024-10-17 19:58:28

Cocos2d-x通过Jni实现Cocos2d-x界面跳转到新的Activity的相关文章

cocos2d 中使用jni C++ 调用 Java 方法

1.简单数据类型例子 假设我们Java中有这么一个open的静态方法,它没有参数,有一个int的返回值.怎么在C++中调用它呢? package cb.CbCCBLE; public class CbCCBLECentralManager { public static final String TAG = "CbCCBLECentralManager Android"; public static int open() { Log.d(TAG,"open"); r

cocos2d 中使用jni Java 调用 C++ 方法

1.首先是LoadLibrary cocos2d中的C++代码会编译成一个.so文件,放在安卓目录下的libs/armeabi 下,然后java会load进来,这步我们不用做了,因为cocos2d已经帮我们做好了. package cb.CbCCBLE; public class CbCCBLECentralManager { public static final String TAG = "CbCCBLECentralManager Android"; public native

本地推送通知界面跳转demo

本地推送通知界面跳转demo: /* 1.在发送本地通知的时候,通过userInfo属性来指示跳转到那个界面 2.监听本地通知的接收 1.当收到本地通知就会调用该代理方法 调用场景 1.如果应用程序在后台,当点击通知的时候 2.如果应用程序在前台,一旦收到本地通知,就会调用该方法 所以:判断如果应用程序在前台时候,不要执行界面跳转,来提高用户体验 3.如果应用程序被杀死了,那么这个方法就不再执行了 //- (void)application:(UIApplication *)applicatio

界面跳转:Intent的使用

1)A-->B startActivity(Context,.class); 2)A-->B-->A A:startActivityForResult(intent,0);   (此处的0为requestCode) B:  a)Intent intent = new Intent();/Intent intent= getIntent(); b)intent.putExtra("",""); c)setResult(0,intent);    (此

开发一个新的android界面、界面跳转 看图学Android---Android 开发实例教程三、四

Android实例图解教程目录 http://blog.csdn.net/wyx100/article/details/45061407 一.课程功能 本课程讲述建立一个新界面和界面切换(从界面一切换到界面二). 二.课程界面 界面一(启动界面) 界面二(主界面) 三.工作流程 完成页面切换需要2个过程: 1.建立一个工程,见第二节. http://blog.csdn.net/wyx100/article/details/45248209 可以在该项目基础继续开发. 2.建立开机界面 先引入资源

Android实现界面跳转

实现界面跳转的代码如下: 第一种: Intent mIntent =  new Intent();mIntent.setClassName(mcureeActivity.this, nextActivity.class);startActivity(mIntent) 第二种: Intent mIntent =  new Intent();mIntent.setClassName("com.android.test", "com.android.test.next")

Java中轻松实现界面跳转

作者:兄弟连Java中轻松实现界面跳转,Java中轻松实现界面跳转 假设这样一种情况,我们的系统的界面使用javax.swing包构建,界面的基础是BaseView,他是一个容器,当然他应当提供获取控件元素的功能,比如得到按钮,下拉框,表格等,当然仅仅是一个容器而已,而我们的界面的元素全部部署在JPanel上. 描述为: 一个界面就是一个BaseView,他只包含一个JPanel,这个包含JPanel包含所有我们的Swing控件,例如JButton,JLable等等. 问题出现了:我们通常因为业

Android 界面跳转及数据交换

作者:卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/40015757 本文演示:Android 界面跳转及数据交换,通过一个小Demo展示全部过程. 效果如下所示: 1)MainActivity.java package doogle.xian.bundletest; import android.app.Activity; import android.content.Intent; import android.os.Bund

Android Intent实现界面跳转切换,随时记录一下

好久不用Android,今天突然用到了Intent实现界面跳转. Intent方法:Intent itent = new Intent(); intent.setClass(**Activity1.this,**Activity2.class); **Activity1.this.startActivity(intent); 不要忘记在AndroidManifest.xml中需要注册**Activity2. <activity android:name=".**Activity2"