Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Unity-Native Android插件中不触发dispatchKeyEvent_Java_C#_Android_Unity3d_Native - Fatal编程技术网

Java Unity-Native Android插件中不触发dispatchKeyEvent

Java Unity-Native Android插件中不触发dispatchKeyEvent,java,c#,android,unity3d,native,Java,C#,Android,Unity3d,Native,我想在Android中触发onKeyUp或dispatchKeyEvent,并向按键的Unity3D发送一条消息 我制作了一个Java本机插件,包括: public class VolumeKeyClass extends Activity { @Override public boolean onKeyUp(int keyCode, KeyEvent event) { Log.d("Unity","onKeyUp UP"); int acti

我想在Android中触发onKeyUp或dispatchKeyEvent,并向按键的Unity3D发送一条消息

我制作了一个Java本机插件,包括:


public class VolumeKeyClass extends Activity {

    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        Log.d("Unity","onKeyUp UP");
        int action = event.getAction();
        switch (keyCode) {
            case KeyEvent.KEYCODE_VOLUME_UP:
                if (action == KeyEvent.ACTION_DOWN) {
                    Log.d("test", "Volume UP pressed! " + event);
             UnityPlayer.UnitySendMessage("MainController","logStatus","Volume up!!");
                }
                return true;
            case KeyEvent.KEYCODE_VOLUME_DOWN:
                if (action == KeyEvent.ACTION_DOWN) {
                    Log.d("test", "Volume DOWN pressed! " + event);
                    UnityPlayer.UnitySendMessage("MainController","logStatus","Volume Down!");
                }
                return true;
            default:
                return super.dispatchKeyEvent(event);
        }
    }

已经测试过Unity和插件之间的通信是否正确记录了消息,但onKeyUp或dispatchKeyEvent未触发发送消息,也未触发Logcat。(目标API 15,冰淇淋三明治)

您必须像这样使用OnKeyListener:

   public class VolumeKeyClass extends Activity {

        void InitializeKeyListener ()
        {
           OnKeyListener keyListener = new OnKeyListener() {
        @Override
        public boolean onKeyUp(int keyCode, KeyEvent event) {
            Log.d("Unity","onKeyUp UP");
            int action = event.getAction();
            switch (keyCode) {
                case KeyEvent.KEYCODE_VOLUME_UP:
                    if (action == KeyEvent.ACTION_DOWN) {
                        Log.d("test", "Volume UP pressed! " + event);
                 UnityPlayer.UnitySendMessage("MainController","logStatus","Volume up!!");
                    }
                    return true;
                case KeyEvent.KEYCODE_VOLUME_DOWN:
                    if (action == KeyEvent.ACTION_DOWN) {
                        Log.d("test", "Volume DOWN pressed! " + event);
                        UnityPlayer.UnitySendMessage("MainController","logStatus","Volume Down!");
                    }
                    return true;
                default:
                    return super.dispatchKeyEvent(event);
            }
           };
        }
    }

您必须像这样使用OnKeyListener:

   public class VolumeKeyClass extends Activity {

        void InitializeKeyListener ()
        {
           OnKeyListener keyListener = new OnKeyListener() {
        @Override
        public boolean onKeyUp(int keyCode, KeyEvent event) {
            Log.d("Unity","onKeyUp UP");
            int action = event.getAction();
            switch (keyCode) {
                case KeyEvent.KEYCODE_VOLUME_UP:
                    if (action == KeyEvent.ACTION_DOWN) {
                        Log.d("test", "Volume UP pressed! " + event);
                 UnityPlayer.UnitySendMessage("MainController","logStatus","Volume up!!");
                    }
                    return true;
                case KeyEvent.KEYCODE_VOLUME_DOWN:
                    if (action == KeyEvent.ACTION_DOWN) {
                        Log.d("test", "Volume DOWN pressed! " + event);
                        UnityPlayer.UnitySendMessage("MainController","logStatus","Volume Down!");
                    }
                    return true;
                default:
                    return super.dispatchKeyEvent(event);
            }
           };
        }
    }

您需要使用“+=”注册事件。请参见以下内容:AJO=newandroidjavaobject(“com.company.volumekeyslibrary.VolumeKeyClass”);在我的主脚本的Start()中。在插件构造函数中,我有一个线程执行,用于向unity发送一条保持活动的消息。请将所有信息放入问题中,而不是将其隐藏在注释中。您需要使用“+=”注册事件。请参见以下内容:AJO=newandroidjavaobject(“com.company.volumekeyslibrary.VolumeKeyClass”);在我的主脚本的Start()中。在插件构造器中,我有一个线程执行,向unity发送一条保持活动的消息。请将所有信息放入问题中,而不是将其隐藏在注释中。