Java Unity-Native Android插件中不触发dispatchKeyEvent
我想在Android中触发onKeyUp或dispatchKeyEvent,并向按键的Unity3D发送一条消息 我制作了一个Java本机插件,包括: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
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发送一条保持活动的消息。请将所有信息放入问题中,而不是将其隐藏在注释中。