2016-07-19 9 views
0

Мы разрабатываем приложение Gear VR с использованием GVRf. В приложении есть два GVRScenes, и мы хотим, чтобы, если пользователь коротко нажимает кнопку «Назад» в сцене B, он возвращается к сцене A, а если пользователь коротко нажимает кнопку «Назад» в сцене A, она выходит из приложения. Кроме того, длительное нажатие кнопки «Назад» должно отображать меню настроек Oculus, а также повторное нажатие, которое должно возобновить приложение (в соответствии с требованиями магазина Oculus).Функциональность кнопок обратной связи для редуктора VR

GVRActivity.onBackPressed() Поскольку не вызывается из рамок, мы пытались переопределить onKeyUp из GVRActivity:

@Override 
public boolean onKeyUp(int keyCode, KeyEvent event) { 
    if (KeyEvent.KEYCODE_BACK == keyCode) { 
     if (mScript.onBackPressed()) {//mScript.onBackPressed() handles change scene logic 
             //and returns true if we are in scene B, and returns 
             //false if we are in scene A 
      super.onBackPressed(); 
     } 
     return true; 
    } 
    return super.onKeyUp(keyCode, event); 
} 

Сейчас короткое нажатие от сцены B нормально, и длительное нажатие показывает Окулус настройки. Проблема в том, что если мы вернемся из сцены B и вернемся из настроек, она переключится на сцену A, и если мы сделаем то же самое с сцены A, приложение перезагрузится.

Каков правильный способ реализации этого? Заранее спасибо.

ответ

0

Мы нашли обход для этого.

Прежде всего, изменить GVRActivitymPaused на protected.

protected boolean mPaused = true; 

И затем мы добавили перегрузили onKeyUp() в нашем Activity:

@Override 
public boolean onKeyUp(int keyCode, KeyEvent event) { 
    Log.d(TAG, "onKeyUp: "+keyCode); 
    if(!mPaused && keyCode==KeyEvent.KEYCODE_BACK){ 
     if(!mScript.onBackPressed()) 
      return true; 
    } 
    return super.onKeyUp(keyCode, event); 
} 

Надеется, что это может помочь кому-то еще, если у кого есть лучшее решение, не стесняйтесь отправлять его.