2014-06-24 2 views
2

프로그래밍 방식으로 유리에 사용자 정의 "ok glass"메뉴를 채우는 방법이 있습니까?프로그래밍 방식으로 채워진 상황 별 "ok glass"메뉴

나는 사용자가 집중하고 음성 명령으로 주로 시스템과 상호 작용하는 응용 프로그램이 있습니다. 침수는 다른 데이터 세트를 표시하는 CardScrollView로 구성됩니다. 이 세트는 전화로 통화하는 블루투스 서비스에서 동적으로 추가 및 제거되며 유리 장치는 어떤 새로운 세트가 나타날지 미리 알 수 없습니다.

내가 원하는 것은 음성 메뉴의 모든 현재 세트를 나열하고 전환 할 세트를 선택하는 것입니다. 예를 들어, 지금 내가 세트 A, B, C 및 D를 가지고 있다면 사용자가 "ok glass, set to"라고 말하고 A, B, C 및 D가있는 하위 메뉴를보고 예를 들어 "C"라고 말하면보기에서 C로 전환하십시오.

이 모든 것이 가능합니까?

유리 제품은 MyGlass와 전혀 연결되어 있지 않은 닫힌 환경에서 실행되기 때문에 개발 권한이있는 메뉴의 사용자 지정 음성 명령은 문제가되지 않습니다.

답변

3

사용자가 말할 때 애플리케이션이 이미 실행되기를 바랍니다. 이것이 맞다면 contextual voice commands으로 사용자 정의 메뉴를 간단하게 구현할 수 있습니다. onPreparePanel을 무시하여 메뉴를 다시 채울 수 있다고 생각합니다.

나는 그것을 테스트하지만, 같은 가이드에서 뭔가 추측하지 않은 :

@Override 
    public boolean onPreparePanel(int featureId, View view, Menu menu) { 
    if (featureId == WindowUtils.FEATURE_VOICE_COMMANDS) { 
     menu.clear(); 
     for (MyMenuItem item : mCurrentMenuItems) { 
     menu.add(Menu.NONE, item.getId(), Menu.NONE, item.getTitle()); 
     } 
    } 
    return super.onPreparePanel(featureId, view, menu); 
    } 

    @Override 
    public boolean onMenuItemSelected(int featureId, MenuItem item) { 
    if (featureId == WindowUtils.FEATURE_VOICE_COMMANDS) { 
     switch (item.getItemId()) { 
     case MENU_ITEM_A: 
      // do something 
      break; 
     default: 
      return true; 
     } 
     return true; 
    } 
    return super.onMenuItemSelected(featureId, item); 
    } 

MyMenuItem는 항목 제목의 고유 ID를 보유하고 간단한 클래스 될 것입니다. mCurrentMenuItems은 현재 표시 할 항목 목록입니다. 예를 들어, 백그라운드 서비스를 사용하여 내용을 변경할 수 있습니다.

+0

정확히 내가해야 할 일의 라인을 따라있는 것처럼 보입니다. 이제 코드를 사용해 보지 않고도 실제로해야 할 일은 실제로 한 단계 더 아래로 내려가는 것입니다. 변경해야하는 메뉴 부분은 다른 것들의 하위 메뉴 일뿐입니다. 그래서 기본적으로 [this] (http://hastebin.com/mipuneqoyi.1c)와 같이 "동적 항목"은 런타임에 변경할 수 있어야하는 항목입니다. 하위 메뉴에 액세스하여이를 지우거나 채울 수 있습니까? – Kezo

+1

가능해야합니다. 비어있는 하위 메뉴가있는 메뉴 레이아웃을 만들어 프로그래밍 방식으로 채울 수 있습니다. http://stackoverflow.com/questions/6453016/create-submenus-programmatically-for-existing-menu-created-from-xml을보십시오 –

+0

이것은 놀랍습니다, 고마워요! 나는 그것이 또는 아무것도 아닌 것 같아요. 작동하지 않는다면, GDK에 내장 된 음성 기능을 기다려야 할 것입니다. – Kezo

관련 문제