Pregunta

Estoy siguiendo los patrones que se utilizan en el ejemplo de la brújula en un nuevo proyecto y tienen la mayor parte del trabajo lógico.Sin embargo, cuando toque Mientras se muestra mi tarjeta en vivo, escucho el ruido 'clic', pero mi actividad del menú no se muestra.Creo que me estoy perdiendo un pedazo del rompecabezas, pero no he podido averiguar qué hasta el momento.

Cuando toque, además del clic, también veo esto en Logcat:

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

Entonces parece que debería estar comenzando mi actividad, pero no se presenta.Aquí hay algunas piezas de código relevante ... aunque no estoy seguro de dónde está el problema.

parte de servicio en 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>

Método de OnstartCommand en 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;

}

Aquí está mi SpeedDisplayMenuactivity.Java.Ninguno de estos métodos se llama.

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();
}

¿Alguien ve lo que me falta?

¿Fue útil?

Solución

Eso es correcto, declarar la velocidad de velocidad de SpeedDisplay es el problema en este caso.

He visto los casos en los que muchos otros tipos de excepciones / choque que normalmente suceden en el entorno de Android se maneja con gracia en vidrio.

Eso es definitivamente bueno para la experiencia del usuario, pero hace poco difícil de desarrollo.¡Esperemos que algún tipo de entornos llegue en el futuro para permitir excepciones también en el futuro!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top