简体   繁体   English

dispatchKeyEvent不会在Unity中触发-本机Android插件

[英]dispatchKeyEvent does not trigger in Unity - Native Android plugin

I want to trigger onKeyUp or dispatchKeyEvent in Android, and send a message to Unity3D of the keyPress 我想在Android中触发onKeyUp或dispatchKeyEvent,并向keyPress的Unity3D发送消息

I made a Java native Plugin with: 我用以下方法制作了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);
        }
    }

Already Tested the communication, between Unity and The plugin, is correctly loggin the message, but onKeyUp nor dispatchKeyEvent is not triggering to send the message, nor the Logcat. 已经测试了Unity和插件之间的通信是否正确登录了消息,但是onKeyUp或dispatchKeyEvent既不触发发送消息,也不触发Logcat。 (target API 15, Ice Cream Sandwich) (目标API 15,冰淇淋三明治)

You have to use OnKeyListener like this: 您必须像这样使用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);
            }
           };
        }
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM