2012-01-25 1 views
5

J'essaie d'écrire un filtre d'intention correct. Je suis fondamentalement familier avec les intentions, ils fonctionnent bien dans mon application, mais je veux savoir la meilleure façon de le faire. Voici ce que je dois faire:Conception d'une application Android: écriture du filtre d'intention correct

J'ai une application qui possède des données. (données provenant du calculateur, unité de commande du moteur) Il y a deux activités: une activité peut afficher les données sous forme de chiffres, et une autre peut l'afficher sous forme de graphique.

Voyons voir la première activité.

  1. Que fait-il? Il s'affiche.
  2. Qu'est-ce qu'il affiche? Données ECU.
  3. Comment affiche-t-il ces données? en tant que chiffres.

La deuxième activité est presque la même, mais le troisième élément est différent: elle affiche des données sous forme de graphiques.

Donc, je veux être en mesure d'envoyer intention qui spécifie exatly toutes les informations, tout comme "Hey Android, j'ai besoin d'afficher les données ECU comme chiffres", puis la première activité devrait être ouverte.

Et je veux également être en mesure d'envoyer l'intention qui spécifie seulement deux premiers articles, tout comme "Hey Android, j'ai besoin d'afficher les données ECU", puis android devrait demander à l'utilisateur quelle activité devrait être ouverte.

Mon application devrait également être en mesure de répondre à d'autres applications.

Quelle est la meilleure façon de réaliser tout cela?

MISE À JOUR: Voici mon fichier XML. Que dois-je spécifier dans <intent-filter>?

<activity 
    android:name=".MyActivity" 
    > 

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

MISE À JOUR 2: Voici ce que je suis en train de faire: j'ai une application avec Service qui communique via Bluetooth avec appareil distant et reçoit des données ECU. Il y a quelques activités simples qui peuvent afficher ces données: comme je l'ai déjà dit, on peut afficher des chiffres, un autre peut afficher des graphiques. Cette application fournit AIDL interface pour toute autre application pour être en mesure d'obtenir des données ECU aussi.

Comme je l'ai dit, ces activités sont assez simples, elles fournissent juste une interface utilisateur de base.

Dites, un homme veut que ces données soient affichées comme indicateur de pointeur mobile. Pas de problème: il peut écrire son propre Activity qui va lier mon Service, obtenir des données et afficher juste ce qu'il veut.

Alors, si j'envoie Intent comme « Hey Android, je dois afficher les données ECU », puis Android devrait me demander ce que l'activité devrait être ouvert, et je veux être en mesure de voir ce nouveau Activity aussi.

+0

Je pense que vous n'êtes pas clair sur la façon dont les intentions et les activités fonctionnent. La réponse de TJ ci-dessous semble correcte pour ce que vous essayez de faire. – SeanPONeil

Répondre

1

Eh bien, je me suis trouvé ce que je cherchais.

dans 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> 

Et puis je peux dire "Hey Android, je dois afficher les données de voiture" comme ç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(android.content.Intent.CATEGORY_DEFAULT); 

    startActivity(mIntent); 

Si je veux dire "Hey Android, j'ai besoin d'afficher les données de voiture comme chiffres", je dois remplacer CATEGORY_DEFAULT avec ma propre catégorie:

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

Et c'est tout. Bien sûr, je peux remplacer DIGITS par GRAPHS pour ouvrir MyActivityForGraphs au lieu de MyActivityForDigits. Cela fonctionne exactement comme je le veux.

+0

Génial :) Content que vous ayez des choses configurées comme vous le vouliez! –

2

Si vous transmettez des informations entre les activités au sein de votre propre application; il est préférable d'utiliser Bundles (Ou vous pouvez utiliser SharedPreferences, ou lecture/écriture à la mémoire mais je trouve des faisceaux plus facile)

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 vous voulez travailler avec son intention personnalisée - vérifier cette question sur: Filter Intent based on custom data

Je n'ai pas encore eu l'occasion de jouer avec, mais je pense que cela devrait vous aider - d'après les apparences, il semble qu'ils ont un «expéditeur et un receveur» comme vous essayez de le faire.

+0

Faites-moi savoir si cela répond à votre question ou non :) –

+0

pas vraiment =) Je sais à propos des extras, mais maintenant je ne dois pas passer une telle info entre les activités. J'ai besoin de savoir ce que je devrais spécifier dans la section ''. Je viens de mettre à jour ma question. –

+0

Hm, je suis confus sur pourquoi les extras ne fonctionneront pas pour ce que vous essayez d'accomplir? Vous souhaitez transférer les données des chiffres vers un graphique et un graphique vers les chiffres - correct? Vous devriez être en mesure d'utiliser un extra pour les pousser d'avant en arrière, puis onCreate() utilise ces valeurs pour manipuler votre activité - par ex. Dites que vous voulez afficher les chiffres x = y de x = 1-10 Vous commencez à afficher vos chiffres sur le premier, puis pour le second, soit pousser votre info (ce que vous voulez afficher, comme x = y de x = 1-10) ou des données de fin (x = 1-10, y = 1-10), puis créez vos données avec les informations fournies. –