2012-01-25 19 views
5

Estoy intentando escribir el filtro de intención correcto.Diseño de la aplicación para Android: escriba el filtro de intención correcta

Estoy básicamente familiarizado con los intentos, funcionan bien en mi aplicación, pero quiero saber la mejor manera de hacerlo. Esto es lo que debo hacer:

Tengo una aplicación que posee algunos datos. (datos de la ECU, unidad de control del motor) Hay dos actividades: una actividad puede mostrar datos como dígitos, y otra puede mostrarla como un gráfico.

Veamos la primera actividad.

  1. ¿Qué es lo que hace? Muestra.
  2. ¿Qué muestra? Datos de la ECU.
  3. ¿Cómo se muestran estos datos? como dígitos.

La segunda actividad es casi la misma, pero el tercer elemento es diferente: muestra los datos como un gráfico.

Por lo tanto, quiero ser capaz de enviar la intención que especifica exatly toda la información, al igual que "Hey Android, necesito para mostrar los datos ECU como dígitos", y luego se debe abrir primero la actividad.

Y también quiero ser capaz de enviar la intención que especifica sólo dos primeros puntos, al igual que "Hey Android, necesito para mostrar los datos ECU", y luego androide debe pedir usuario lo que la actividad se debe abrir.

Mi aplicación también debería ser capaz de responder a otras aplicaciones.

¿Cuál es la mejor manera de lograr todo esto?

ACTUALIZACIÓN: Aquí está mi xml. ¿Qué debo especificar en <intent-filter>?

<activity 
    android:name=".MyActivity" 
    > 

    <intent-filter > 
     <!-- what should i specify here? --> 
    </intent-filter> 
    </activity> 

ACTUALIZACIÓN 2: Esto es lo que estoy tratando de hacer: Tengo una aplicación con Service que se comunica a través de Bluetooth con el dispositivo remoto y recibe datos de la ECU. Hay algunas Actividades simples que pueden mostrar estos datos: como ya dije, uno puede mostrar dígitos, otro puede mostrar gráficos. Esta aplicación proporciona la interfaz AIDL para cualquier otra aplicación para poder obtener datos de la ECU también.

Como ya he dicho, estas actividades son bastante simples, proporcionan una interfaz de usuario sencilla.

Digamos, un hombre quiere que estos datos se muestren como indicadores de puntero movible. No hay problema: puede escribir su propio Activity que vinculará mi Service, obtendrá datos de él y mostrará cómo él quiere.

Entonces, si envío Intent como "Hey Android, lo que necesito para mostrar los datos ECU", a continuación, Android debería preguntarme qué actividad debe ser abierta, y yo quiero ser capaz de ver esta nueva Activity también.

+0

Creo que no está claro cómo funcionan Intents and Activities. La respuesta de TJ a continuación parece correcta para lo que estás tratando de hacer. – SeanPONeil

Respuesta

1

Bueno, encontré lo que buscaba.

en AndroidManifest.xml:

<activity 
    android:name=".MyActivityForDigits" 
    > 

    <intent-filter > 
     <action android:name="android.intent.action.VIEW" /> 
     <data android:mimeType="ru.orionspb.bk100_iface_android/car_data" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <category android:name="ru.orionspb.bk100_iface_android.category.DIGITS" /> 
    </intent-filter> 
</activity> 

<activity 
    android:name=".MyActivityForGraphs" 
    > 

    <intent-filter > 
     <action android:name="android.intent.action.VIEW" /> 
     <data android:mimeType="ru.orionspb.bk100_iface_android/car_data" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <category android:name="ru.orionspb.bk100_iface_android.category.GRAPHS" /> 
    </intent-filter> 
</activity> 

Y entonces lo que puedo decir "Hey Android, necesito para mostrar los datos del coche" así como así:

 Intent mIntent = new Intent(); 
    mIntent.setAction("ru.orionspb.bk100_iface_android.action.VIEW"); 
    mIntent.setType("ru.orionspb.bk100_iface_android/car_data"); 
    mIntent.addCategory(android.content.Intent.CATEGORY_DEFAULT); 

    startActivity(mIntent); 

si quiero decir "Hola, Android, necesito mostrar datos del coche como dígitos", necesito reemplazar CATEGORY_DEFAULT con mi propia categoría:

 Intent mIntent = new Intent(); 
    mIntent.setAction("ru.orionspb.bk100_iface_android.action.VIEW"); 
    mIntent.setType("ru.orionspb.bk100_iface_android/car_data"); 
    mIntent.addCategory("ru.orionspb.bk100_iface_android.category.DIGITS"); 

    startActivity(mIntent); 

Y eso es todo. Por supuesto, puedo reemplazar DIGITS con GRAPHS para abrir MyActivityForGraphs en lugar de MyActivityForDigits. Funciona igual que yo quiero que funcione.

+0

Impresionante :) ¡Me alegra que hayas configurado las cosas como querías! –

2

Si está pasando información entre actividades dentro de su propia aplicación; es mejor utilizar paquetes (o puede utilizar SharedPreferences, o leer/escribir en la memoria, pero me parece paquetes más fácil)

First activity: 

Intent i = new Intent().newClass(first.this, second.class); 
i.putExtra("keynamehere", value); 
startActivity(i); 

Second activity: 
Bundle b = getIntent().getExtras(); 
b.getString/getInt/getByte/etc("keynamehere"); 

Si se desea trabajar con el intento de costumbre - comprobar esta pregunta fuera: Filter Intent based on custom data

Todavía no he tenido la oportunidad de jugar con eso, pero creo que eso debería ayudarte, por lo que parece, tienen un "remitente y receptor" como el que intentas hacer.

+0

Avísame si eso responde a tu pregunta o no :) –

+0

en realidad no =) Sé de extras, pero ahora no tengo que pasar ninguna información entre actividades. Necesito saber qué debo especificar en la sección ''. Acabo de actualizar mi pregunta. –

+0

Hm, estoy confundido sobre por qué los extras no funcionan para lo que estás tratando de lograr? Desea insertar los datos de los dígitos en un gráfico y representar gráficamente los dígitos, ¿correcto? Debería poder usar un extra para empujarlos hacia adelante y hacia atrás, y luego onCreate() usar esos valores para manipular su actividad, por ej. Supongamos que quiere mostrar los dígitos x = y de x = 1-10. Comienza mostrando sus dígitos en el primero, y luego en el segundo, inserta su información (lo que desea mostrar, como x = y desde x = 1-10) o datos finales (x = 1-10, y = 1-10) y luego crea tus datos con la información dada. –

Cuestiones relacionadas