Adobe AIR 后退按钮事件不适用于 Android API 28+
Adobe AIR back button event not working with Android API 28+
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(),我收到了事件并且我 return 'true' 以防止应用程序关闭,但仍然无法正常工作,它忽略了事件。
我需要一些关于 Android API 28 中更改内容的线索,为什么同一个 Adobe AIR sdk 仅在此 API 中失败。我听说 Harman 正在修复,但没有关于此的官方信息。
我提供了部分堆栈跟踪,您可以在其中看到来自原生 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)
终于找到问题了,和我把游戏定位到Android API 28.
时焦点没有分配到AIRWindowSurfaceView有关
这是我在初始化 ANE 时必须 运行 以恢复焦点的代码:
AndroidActivityWrapper aaw = AndroidActivityWrapper.GetAndroidActivityWrapper();
aaw.getView().requestFocus();
aaw.getView().onWindowFocusChanged(true);
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(),我收到了事件并且我 return 'true' 以防止应用程序关闭,但仍然无法正常工作,它忽略了事件。
我需要一些关于 Android API 28 中更改内容的线索,为什么同一个 Adobe AIR sdk 仅在此 API 中失败。我听说 Harman 正在修复,但没有关于此的官方信息。
我提供了部分堆栈跟踪,您可以在其中看到来自原生 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)
终于找到问题了,和我把游戏定位到Android API 28.
时焦点没有分配到AIRWindowSurfaceView有关这是我在初始化 ANE 时必须 运行 以恢复焦点的代码:
AndroidActivityWrapper aaw = AndroidActivityWrapper.GetAndroidActivityWrapper();
aaw.getView().requestFocus();
aaw.getView().onWindowFocusChanged(true);