2014-06-19 3 views
0

Я пытаюсь реализовать контекстные голосовые команды в своем приложении Glass, описанном в documentation.Устранение фокуса активности после контекстных голосовых команд

У меня есть FrameLayout внутри моего макета, и в моей деятельности я реализую OnKeyDown, чтобы распознавать краны. Однако, когда пользователь говорит «ОК стекло», а затем выбирает одну из доступных команд, возвращается такая же активность, но не отвечает (я даже не могу закрыть приложение, сползая вниз).

Я попытался использовать requestFocus() на FrameLayout несколькими способами, но у него не было никаких эффектов. Как мне вернуть фокус, не перезагружая работу?

По сути, это код, который я до сих пор для основной деятельности:

public class MainActivity extends Activity { 

    public static String TAG = "DummyProject::MainActivity"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     getWindow().requestFeature(WindowUtils.FEATURE_VOICE_COMMANDS); 

     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public boolean onCreatePanelMenu(int featureId, Menu menu) { 
     if (featureId == WindowUtils.FEATURE_VOICE_COMMANDS) { 
      getMenuInflater().inflate(R.layout.main, menu); 
      return true; 
     } 

     return super.onCreatePanelMenu(featureId, menu); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.layout.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onMenuItemSelected(int featureId, MenuItem item) { 
     if (featureId == WindowUtils.FEATURE_VOICE_COMMANDS) { 
      switch (item.getItemId()) { 
      case R.id.awesome: 
       Log.i(TAG, "Selected!"); 
       break; 
      default: 
       return true; 
      } 

      return true; 
     } 

     return super.onMenuItemSelected(featureId, item); 
    } 

    @Override 
    public boolean onKeyDown(int keycode, KeyEvent event) { 
     if(keycode == KeyEvent.KEYCODE_DPAD_CENTER) { 
      Log.i(TAG, "tap!"); 
      return true; 
     } 

     return super.onKeyDown(keycode, event); 
    } 
} 

Для этого примера, OnKeyDown не дозвонился после того как я выбрать любой из опций меню «ОК стекла».

Заранее спасибо.

ответ

0

Оказывается, что проблема была с Manifest файлом. Я задавал тему для приложения, т.е.

<application android:theme="@android:style/Theme.NoTitleBar"> ... 

Как только я удалил тему, все сработало отлично. GDK demo sample от Google был полезен, когда я пытался найти эту странную ошибку.

4

предпочитают GestureDetector для ловли сенсорной панели событий ...

... 

private GestureDetector mGestureDetector; 

... 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    ... 

    mGestureDetector = createGestureDetector(this); 

    ... 

} 

... 

private GestureDetector createGestureDetector(Context context) { 

GestureDetector gestureDetector = new GestureDetector(context); 
// Create a base listener for generic gestures 
gestureDetector.setBaseListener(new GestureDetector.BaseListener() { 
@Override 
public boolean onGesture(Gesture gesture) { 
    if (gesture == Gesture.TAP) { 
     Log.d(TAG, "TAP!!!"); 
      return true; 
    } 
    return false; } 
    }); 

gestureDetector.setFingerListener(new GestureDetector.FingerListener() { 
    @Override 
    public void onFingerCountChanged(int previousCount, int currentCount) { 
    // do something on finger count changes 
    } 
}); 

gestureDetector.setScrollListener(new GestureDetector.ScrollListener() { 
    @Override 
    public boolean onScroll(float displacement, float delta, float velocity) { 
    // do something on scrolling 
     return true; 
    } 
}); 
return gestureDetector; 
} 

/* 
* Send generic motion events to the gesture detector 
*/ 
@Override 
public boolean onGenericMotionEvent(MotionEvent event) { 
    if (mGestureDetector != null) { 
     return mGestureDetector.onMotionEvent(event); 
    } 
    return false; 
} 
+0

Вы избили меня до него. – w9jds

+1

Привет, Шанкар, спасибо за ответ. Однако это не будет полностью работать. Опция «ok glass» также исчезает при возврате активности. В [документации] (https://developers.google.com/glass/develop/gdk/voice#contextual_voice_commands) Google говорит, что «... голосовая команда« ok, glass »автоматически появляется снова в разделе нижнего колонтитула экран, готовый принять новую голосовую команду, пока активность остается в фокусе ». Поэтому я предполагаю, что есть что-то связанное с этим, но я не нашел способ вернуть фокус. –

Смежные вопросы