CocosCreator之KUOKUO带你搞反射-简单的安卓交互

摘要

在使用 CocosCreator 打包的原生应用中,我们可以通过引擎封装好的反射机制调用 Java 的静态方法,从而实现提示、相册、支付跳转等功能。本次内容为环境介绍与简单的交互。

正文

先看效果

版本说明

  • CocosCreator 为 2.2.1 版本。
  • AndroidStudio 为 3.5.2 版本。
  • JDK 为 13 版本。(具体:13.0.1)
  • NDK 为 20 版本。(具体:20.1.5948944)
  • SDK 安装了 API 23 的。
  • 模拟器为 AVD。(可以在 AndroidStudio 内安装)

CocosCreator 设置截图:

jsb的反射方法

写一个获取字符串的方法:

const className = "org/cocos2dx/javascript/AppActivity"
let text = jsb.reflection.callStaticMethod(className, "getTestText", "()Ljava/lang/String;")

在 callStaticMethod 方法中,我们通过传入 Java 的类名,方法名,传入参数类型与返回类型,就可以直接调用 Java 的静态方法。其中方法名后面的参数代表类型。比如 “()V” 代表无参数无返回值,"()I" 代表无参数整型返回值(int)。具体的对应见下表。

布局

在 CocosCreator 中布局好两个按钮一个文本,在脚本中写两个方法并绑定至按钮,如图。

脚本

cc.Class({
    extends: cc.Component,

    properties: {
        testLabel: cc.Label,
    },

    showLabel () {
        const className = "org/cocos2dx/javascript/AppActivity"
        let text = jsb.reflection.callStaticMethod(className, "getTestText", "()Ljava/lang/String;")
        this.testLabel.string = text + ""
    },

    show () {
        this.showToast("弹窗啦!")
    },

    showToast (string) {
        const className = "org/cocos2dx/javascript/AppActivity"
        jsb.reflection.callStaticMethod(className, "showToast", "(Ljava/lang/String;)V", string)
    }

});

一切就绪,点击构建面板的“构建”,完成后在 “/build/jsb-default/frameworks/runtime-src/” 下你会发现 “proj.android-studio” 文件夹,这就是 AndroidStudio 工程,打开并 Build。

Java写法

找到 Java 文件 “/app/src/org/cocos2dx/javascript/AppActivity.java”,然后我们添加对应的静态方法:

public static String getTestText () {
    return "我是 Java 返回的字符串!";
}

这样就完成了第一个显示。然后接下来调用 Toast 提示要注意,cocos 引擎的渲染和 JS 的逻辑是在 GL 线程中进行的,而 Android 本身的 UI 更新是在 App 的 UI 线程进行的,所以 Toast 需要在 UI 线程进行,写法也很简单。

// 先定义一个静态变量 app 用于接收 this。
private static AppActivity app = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (!isTaskRoot()) {
        return;
    }
    SDKWrapper.getInstance().init(this);
    // 添加这一句
    app = this;
}

public static void showToast (final String string) {
    app.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            Toast.makeText(app, string, Toast.LENGTH_LONG).show();
        }
    });
}

这样就实现了 Toast 提示的弹出!给个全部截图:

结语

有意思吧,我们下一次介绍如何调起相机并选择图片!
O(∩_∩)O~~

微信公众号

发布了120 篇原创文章 · 获赞 133 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/kuokuo666/article/details/103997321