Событие кнопки возврата Adobe AIR не работает с Android API 28+ - PullRequest
2 голосов
/ 03 октября 2019

Событие key_down не запускается, и мы не можем предотвратить закрытие приложения. Это происходит в играх Adobe AIR, когда мы нацелены только на Android API 28+ (все работает нормально, если сборка была нацелена на 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 и все выглядит хорошо. На самом деле я сделал некоторые изменения для обработки dispatchKeyEvent () через их AndroidActivityWrapper, получил событие и возвращаю «true», чтобы предотвратить закрытие приложения, но все еще не работает, оно игнорирует событие.

Мне нужны некоторые подсказки о том, что было изменено в Android API 28, почему тот же SDK Adobe AIR не работает только с этим API. Я читал, что Харман работает над исправлением, но официальной информации об этом нет.

Я предоставляю часть трассировки стека, где вы можете увидеть вызов dispatchKeyEvent, исходящий из нативных компонентов Android:

 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)

1 Ответ

0 голосов
/ 03 октября 2019

Наконец, я обнаружил проблему, это связано с тем, что фокус не назначается AIRWindowSurfaceView, когда я нацеливаю игру на Android API 28.

Это код, который я должен запустить, когда ANE инициализируется в порядкечтобы восстановить фокус:

  AndroidActivityWrapper aaw = AndroidActivityWrapper.GetAndroidActivityWrapper();
  aaw.getView().requestFocus();
  aaw.getView().onWindowFocusChanged(true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...