如何将JNI C#类传递给Java或处理这种情况?

我试图从C#调用Java方法,而从Java调用它是这样的:

EgamePay.pay(thisActivity, payAlias, new EgamePayListener() {
            @Override
            public void paySuccess(String alias) {
            }

            @Override
            public void payFailed(String alias, int errorInt) {
            }

            @Override
            public void payCancel(String alias) {
            }
        });

前两个参数都可以,但是如何在C#中传递EgamePayListner?简单地创建具有相同功能的C#类是行不通的...

这是我目前正在做的事情:

using (AndroidJavaClass jc = new AndroidJavaClass("cn.egame.terminal.smspay.EgamePay"))
        {
            System.IntPtr cls_Activity = AndroidJNI.FindClass("com/unity3d/player/UnityPlayer");
            System.IntPtr fid_Activity = AndroidJNI.GetStaticFieldID(cls_Activity, "currentActivity", "Landroid/app/Activity;");
            object[] p = { fid_Activity, "payAlias", new EgamePayListener() };
            jc.CallStatic("pay", p);
        }

..

 class EgamePayListener
    {
        public void paySucess(string alias)
        {
        }

        public void payFailed(string alians, int errorInt)
        {
        }

        public void payCancel(string alias)
        {
        }
    }

显然那是错误的,我该如何处理这种情况,以便在这些函数被触发时可以在C#领域得到通知?

一猫

如果您在Unity3D的上下文中,则从Java本机代码与Unity3D C#脚本进行交互的更好方法是调用该UnitySendMessage方法。您可以在Java代码中调用此方法,并且一条消息将发送到C#,因此您可以获得在C#中执行的指定方法。

您可以在Unity场景中添加一个gameObject并创建一个MonoBehavior脚本,其中包含这三种方法(paySucess(字符串消息),payFailed(字符串消息)和payCancel(消息))。然后,新创建的脚本附加到游戏对象(让我们假设这个游戏物体的名称为“PayListener”),并确保在场景中现有的Java代码的时候要执行的游戏对象(你可以调用DontDestroyOnLoad的游戏对象中Awake,例如)。

然后,在您的Java代码中,只需编写如下代码:

EgamePay.pay(thisActivity, payAlias, new EgamePayListener() {
    @Override
    public void paySuccess(String alias) {
        com.unity3d.player.UnityPlayer.UnitySendMessage("PayListener","paySuccess", alias);
    }

    @Override
    public void payFailed(String alias, int errorInt) {
        com.unity3d.player.UnityPlayer.UnitySendMessage("PayListener","payFailed", alias + "#" + errorInt);
    }

    @Override
    public void payCancel(String alias) {
        com.unity3d.player.UnityPlayer.UnitySendMessage("PayListener","payCancel", alias);
    }
});

如果没有com.unity3d.player.UnityPlayer该类,它将阻止Java文件成功构建您可以找到/Applications/Unity/Unity.app/Contents/PlaybackEngines/AndroidPlayer/bin/classes.jar文件并将其添加为Java项目的依赖库。然后,您可以正确生成,生成和使用新的jar文件。

由于该UnitySendMessage方法只能接受1个参数,因此您可能必须payFailed通过策略结果别名和errorInt连接起来,然后在Unity C#端将其解析回去。

通过使用新构建的jar文件并将其加载为AndroidJavaClassAndroidJavaObject,当调用Java中的一个时,应该调用PayListener脚本中的相应方法。

对于Android插件与UnitySendMessage的文档,你可以参观如何实现一个Android的JNI插件的官方指南这里,在具体例3。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将字节数组从android java类传递给JNI C NDK?

来自分类Dev

如何将char数组作为字节从C JNI函数传递给Java方法[]

来自分类Dev

如何将char数组从C JNI函数作为字节传递给Java方法[]

来自分类Dev

如何将结构作为参数传递给Java函数或如何从jni返回到Java

来自分类Dev

如何将结构作为参数传递给Java函数或如何从jni返回到Java

来自分类Dev

C# WebBrowser:如何将事件处理程序的发送者传递给单独的方法?

来自分类Dev

如何将变量的值从 Java 类传递给 JSP?

来自分类Dev

如何将C#泛型类型传递给另一个类

来自分类Dev

C# - 如何将数组中的元素传递给类中的属性

来自分类Dev

Java中的Singleton类如何处理这种情况?

来自分类Dev

如何将Drawable传递给类?

来自分类Dev

C#将串行传递给类

来自分类Dev

如何将向量列表(vector <Point2f>)从JNI返回到Java?

来自分类Dev

如何将C#加密代码传递给TypeScript?

来自分类Dev

如何将C#对象传递给$ .ajax

来自分类Dev

如何将 c# DataTable 传递给 jquery DataTable

来自分类Dev

如何在MVC C#中处理这种情况?

来自分类Dev

如何在MVC C#中处理这种情况?

来自分类Dev

如何将一个类的实例传递给另一种形式C#

来自分类Dev

如何将“ C ++完成处理程序”传递给NSURLSessionDataTask来处理返回的数据?

来自分类Dev

如何将参数传递给处理程序

来自分类Dev

如何将参数传递给事件处理程序?

来自分类Dev

快递:如何将请求传递给特定的处理程序?

来自分类Dev

如何将处理程序传递给LocalBroadcastManager.registerReceiver(...)

来自分类Dev

如何将更多参数传递给UIAlertAction的处理程序?

来自分类Dev

如何将函数传递给组件以处理拖动事件

来自分类Dev

如何将道具传递给事件处理程序

来自分类Dev

如何将参数传递给事件处理程序?

来自分类Dev

如何将道具传递给 reactjs 处理程序?

Related 相关文章

  1. 1

    如何将字节数组从android java类传递给JNI C NDK?

  2. 2

    如何将char数组作为字节从C JNI函数传递给Java方法[]

  3. 3

    如何将char数组从C JNI函数作为字节传递给Java方法[]

  4. 4

    如何将结构作为参数传递给Java函数或如何从jni返回到Java

  5. 5

    如何将结构作为参数传递给Java函数或如何从jni返回到Java

  6. 6

    C# WebBrowser:如何将事件处理程序的发送者传递给单独的方法?

  7. 7

    如何将变量的值从 Java 类传递给 JSP?

  8. 8

    如何将C#泛型类型传递给另一个类

  9. 9

    C# - 如何将数组中的元素传递给类中的属性

  10. 10

    Java中的Singleton类如何处理这种情况?

  11. 11

    如何将Drawable传递给类?

  12. 12

    C#将串行传递给类

  13. 13

    如何将向量列表(vector <Point2f>)从JNI返回到Java?

  14. 14

    如何将C#加密代码传递给TypeScript?

  15. 15

    如何将C#对象传递给$ .ajax

  16. 16

    如何将 c# DataTable 传递给 jquery DataTable

  17. 17

    如何在MVC C#中处理这种情况?

  18. 18

    如何在MVC C#中处理这种情况?

  19. 19

    如何将一个类的实例传递给另一种形式C#

  20. 20

    如何将“ C ++完成处理程序”传递给NSURLSessionDataTask来处理返回的数据?

  21. 21

    如何将参数传递给处理程序

  22. 22

    如何将参数传递给事件处理程序?

  23. 23

    快递:如何将请求传递给特定的处理程序?

  24. 24

    如何将处理程序传递给LocalBroadcastManager.registerReceiver(...)

  25. 25

    如何将更多参数传递给UIAlertAction的处理程序?

  26. 26

    如何将函数传递给组件以处理拖动事件

  27. 27

    如何将道具传递给事件处理程序

  28. 28

    如何将参数传递给事件处理程序?

  29. 29

    如何将道具传递给 reactjs 处理程序?

热门标签

归档