key_down事件未触发,我们无法阻止该应用程序关闭。当我们仅针对Android API 28+时,这便在Adobe AIR游戏中发生(如果构建针对API 27或更低版本,则一切正常)
NativeApplication.nativeApplication.addEventListener( KeyboardEvent.KEY_DOWN, keyDownHandler );
function keyDownHandler( event:KeyboardEvent ):void
{
trace( event.keyCode );
if (event.keyCode == Keyboard.BACK)
{
event.preventDefault();
}
}
我进行了一些研究,查看了一些Adobe AIR .jar文件,然后一切看起来都很好。实际上,我通过其AndroidActivityWrapper进行了一些更改以处理dispatchKeyEvent(),收到了该事件,并返回“ true”以防止该应用程序被关闭,但仍然无法正常工作,它忽略了该事件。
我需要一些有关Android API 28中更改内容的线索,为什么同一个Adobe AIR sdk仅在使用此API时会失败。我了解到Harman正在研究修复程序,但没有有关该程序的官方信息。
我提供了stacktrace的一部分,您可以在其中看到来自本地android组件的dispatchKeyEvent调用:
at com.app.mobile.appMobile.onKeyDown(appMobile.java:834)
at com.core.ane.Context.onKeyEvent(Context.java:669)
at com.adobe.air.AndroidActivityWrapper.callInputEventListeners(AndroidActivityWrapper.java:1921)
at com.adobe.air.AndroidActivityWrapper.dispatchKeyEvent(AndroidActivityWrapper.java:1488)
at java.lang.reflect.Method.invoke(Native Method)
at air.com.app.mobile.test.AppEntry.InvokeMethod(AppEntry.java:365)
at air.com.app.mobile.test.AppEntry.dispatchKeyEvent(AppEntry.java:496)
at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:563)
at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:6038)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5893)
答案 0 :(得分:0)
最后,我发现了问题,这与将游戏定位到Android API 28时没有将焦点分配给AIRWindowSurfaceView有关。
这是初始化ANE时为了恢复焦点而必须运行的代码:
AndroidActivityWrapper aaw = AndroidActivityWrapper.GetAndroidActivityWrapper();
aaw.getView().requestFocus();
aaw.getView().onWindowFocusChanged(true);