2014-01-08 2 views
1

Я следую шаблонам, которые используются в примере Compass в новом проекте и имеют большую часть логики. Тем не менее, когда я нажимаю, пока отображается живая карта, я слышу шум «щелчка», но моя активность в меню не отображается. Я думаю, что мне не хватает части головоломки, но я пока не мог понять, что на данный момент.Как я могу показать свою функцию MenuActivity?

Когда я нажимаю, кроме мыши, я вижу это в LogCat:

01-08 10:02:26.796: I/ActivityManager(196): START {flg=0x10008000 cmp=com.example.speeddisplay/.SpeedDisplayMenuActivity} from pid -1 

Так это выглядит, как он должен начинать свою деятельность, но она не появляется. Вот несколько частей соответствующего кода ... хотя я не уверен, где проблема.

часть Обслуживание в AndroidManifest.xml:

<service 
     android:name="com.example.speeddisplay.service.SpeedService" 
     android:enabled="true" 
     android:icon="@drawable/ic_drive_50" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="com.google.android.glass.action.VOICE_TRIGGER" /> 
     </intent-filter> 

     <meta-data 
      android:name="com.google.android.glass.VoiceTrigger" 
      android:resource="@xml/voiceinput_speeddisplay" /> 
    </service> 

onStartCommand метод SpeedService.java:

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    if (Constants.DEBUG) { 
     Log.d(TAG, "onStartCommand"); 
    } 
    if (liveCard == null) { 
     liveCard = timelineManager.createLiveCard(LIVE_CARD_ID); 
     speedRenderer = new SpeedRenderer(this, speedManager); 
     liveCard.setDirectRenderingEnabled(true); 
     liveCard.getSurfaceHolder().addCallback(speedRenderer); 

     // Display the options menu when the live card is tapped. 
     Intent menuIntent = new Intent(this, SpeedDisplayMenuActivity.class); 
     menuIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
     liveCard.setAction(PendingIntent.getActivity(this, 0, menuIntent, 0)); 
     liveCard.publish(PublishMode.REVEAL); 

     if(Constants.DEBUG){ 
      Log.d(TAG, "liveCard published"); 
     } 
    } 

    return START_STICKY; 

} 

Вот мой SpeedDisplayMenuActivity.java. Ни один из этих методов не вызван.

public class SpeedDisplayMenuActivity extends Activity { 

private SpeedService.SpeedBinder speedService; 
private boolean mResumed; 

private ServiceConnection mConnection = new ServiceConnection() { 
    @Override 
    public void onServiceConnected(ComponentName name, IBinder service) { 
     if (Constants.DEBUG) { 
      Log.e("Service Stuff", "Service connected."); 
     } 
     if (service instanceof SpeedService.SpeedBinder) { 
      speedService = (SpeedService.SpeedBinder) service; 
      openOptionsMenu(); 
     } 
     if (Constants.DEBUG) { 
      Log.e("Service Stuff", "service was an instance of " + service.getClass().getName()); 
     } 
    } 

    @Override 
    public void onServiceDisconnected(ComponentName name) { 
     // Do nothing. 
    } 
}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    if(Constants.DEBUG){ 
     Log.e("Menu", "Created."); 
    } 
    super.onCreate(savedInstanceState); 
    bindService(new Intent(this, SpeedService.class), mConnection, 0); 
} 

@Override 
protected void onResume() { 
    if(Constants.DEBUG){ 
     Log.e("Menu", "Resumed."); 
    } 
    super.onResume(); 
    mResumed = true; 
    openOptionsMenu(); 
} 

@Override 
protected void onPause() { 
    if(Constants.DEBUG){ 
     Log.e("Menu", "Paused."); 
    } 
    super.onPause(); 
    mResumed = false; 
} 

@Override 
public void openOptionsMenu() { 
    if (Constants.DEBUG) { 
     Log.e("Options Menu", "Open"); 
    } 
    if (mResumed && speedService != null) { 
     if (Constants.DEBUG) { 
      Log.e("Options Menu", "Open with correct params"); 
     } 
     super.openOptionsMenu(); 
    } else { 
     if (Constants.DEBUG) { 
      Log.e("Options Menu", "Open with INCORRECT params"); 
     } 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    if (Constants.DEBUG) { 
     Log.e("Options Menu", "Created"); 
    } 
    getMenuInflater().inflate(R.menu.speed, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (Constants.DEBUG) { 
     Log.e("Options Menu", "Item Selected"); 
    } 
    switch (item.getItemId()) { 
    // case R.id.read_aloud: 
    // mCompassService.readHeadingAloud(); 
    // return true; 
    case R.id.stop: 
     if (Constants.DEBUG) { 
      Log.e("Options Menu", "Stop"); 
     } 
     stopService(new Intent(this, SpeedService.class)); 
     return true; 
    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 

@Override 
public void onOptionsMenuClosed(Menu menu) { 
    if (Constants.DEBUG) { 
     Log.e("Options Menu", "Closed"); 
    } 
    super.onOptionsMenuClosed(menu); 

    unbindService(mConnection); 

    // We must call finish() from this method to ensure that the activity 
    // ends either when an 
    // item is selected from the menu or when the menu is dismissed by 
    // swiping down. 
    finish(); 
} 

Кто-нибудь видит то, что мне не хватает?

+1

Вы зарегистрировали SpeedDisplayMenuActivity в своем манифесте? – KickAss

+0

Я не вижу SpeedDisplayMenuActivity.java, он определен в вашем файле манифеста где угодно. Вы это проверили? –

+0

Вы, ребята, оба удивительные. Я всегда забываю вводить новые действия в свой манифест. Я просто привык к «нормальному» Android-приложению, и вот как я помню :) Похоже, что Glassware просто изящно выходит из строя. – Innova

ответ

1

Это верно, объявив SpeedDisplayMenuActivity проблемой в этом случае.

Я видел случаи, когда многие другие типы исключений/сбоев, которые обычно происходят в среде Android, изящно обрабатываются в Glass.

Это, безусловно, хорошо для пользователей, но мало влияет на развитие. Надеемся, что в будущем в будущем будут задействованы какие-то настройки, чтобы в будущем можно было исключать и исключения!

+0

Да, мне нравится грациозная обработка проблемы, но сообщение в журнале было бы полезно! Я уверен, что они все еще работают над такими деталями. – Innova

+0

Надеюсь, так. Иначе это будет очень трудно понять, что происходит. – sivag1

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