2012-01-25 9 views
5

Próbuję napisać prawidłowy filtr intencji.Projekt aplikacji na Androida: napisz prawidłowy filtr intencji

Zasadniczo jestem zaznajomiony z intencjami, działają one dobrze w mojej aplikacji, ale chcę wiedzieć, jak to zrobić lepiej. Oto, co muszę zrobić:

Mam aplikację, która jest właścicielem niektórych danych. (dane z ECU, jednostki sterującej silnika) Istnieją dwie Aktywności: jedna Aktywność może wyświetlać dane jako cyfry, a inna może wyświetlać je jako wykresy.

Zobaczmy na pierwszej czynności.

  1. Co robi? Wyświetla.
  2. Co wyświetla? Dane ECU.
  3. Jak wyświetla te dane? jako cyfry.

Druga czynność jest prawie taka sama, ale trzecia pozycja jest inna: wyświetla dane w postaci wykresów.

Tak więc, chcę być w stanie wysłać zamiar, który określa dokładnie wszystkie informacje, tak jak "Hej, Android, muszę wyświetlić dane ECU jako cyfry", a następnie należy otworzyć pierwszą czynność.

Chcę również móc wysłać zamiar, który określa tylko dwa pierwsze elementy, tak jak "Hej, Android, muszę wyświetlić dane ECU", a następnie Android powinien zapytać użytkownika, jakie działanie należy otworzyć.

Moja aplikacja powinna również być w stanie odpowiadać na inne aplikacje.

Jaki jest lepszy sposób na osiągnięcie tego wszystkiego?

AKTUALIZACJA: Oto mój xml. Co powinienem podać w <intent-filter>?

<activity 
    android:name=".MyActivity" 
    > 

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

UPDATE 2: Oto, co usiłuję zrobić: Mam aplikacji z Service który komunikuje się poprzez Bluetooth z urządzenia zdalnego i odbiera dane ECU. Jest kilka prostych działań, które mogą wyświetlać te dane: jak już powiedziałem, można wyświetlać cyfry, inne wyświetlać wykresy. Ta aplikacja zapewnia interfejs AIDL dla każdej innej aplikacji, aby móc pobierać dane ECU.

Jak już powiedziałem, te działania są dość proste, zapewniają jedynie podstawowy interfejs użytkownika.

Powiedzmy, że jeden człowiek chce, aby te dane były wyświetlane jako wskaźnik wskaźnika ruchomy. Nie ma problemu: może napisać swoją własną Activity, która będzie wiązać mój Service, pobrać z niej dane i wyświetlić, jak chce.

Następnie, jeśli mogę wysłać Intent jak „Hey Androida, muszę do wyświetlania danych ECU”, a następnie Android powinien zapytać mnie, co aktywny powinien być otwarty, a chcę, aby móc zobaczyć to nowe Activity też.

+0

Myślę, że nie wiesz, jak działają intencje i działania. Odpowiedź TJ poniżej wygląda poprawnie, co próbujesz zrobić. – SeanPONeil

Odpowiedz

1

Cóż, znalazłem się, czego szukałem.

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

A potem mogę powiedzieć "Hej Android, muszę wyświetlać dane samochodu" ot tak:

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

jeśli chcę powiedzieć "Hej, Android, muszę wyświetlić dane samochodu jako cyfry", muszę zastąpić CATEGORY_DEFAULT z własnej kategorii:

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

I to wszystko. Oczywiście można zastąpić DIGITS przez GRAPHS, aby otworzyć MyActivityForGraphs zamiast MyActivityForDigits. Działa tak, jak chcę, żeby działał.

+0

Awesome :) Cieszę się, że masz skonfigurowane rzeczy, jak chcesz! –

2

Jeśli przekazujesz informacje między działaniami w ramach własnej aplikacji; lepiej wykorzystywać zestawy (Albo można użyć SharedPreferences lub odczytu/zapisu do pamięci, ale uważam wiązek łatwiej)

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

Jeśli chcesz pracować z niestandardowych Intent'S - sprawdź to pytanie się: Filter Intent based on custom data

Nie miałem jeszcze okazji się z nim bawić, ale myślę, że powinno ci to pomóc - wygląda na to, że mają "nadawcę i odbiorcę", jak próbujesz to zrobić.

+0

Daj mi znać, jeśli to odpowie na twoje pytanie, czy nie :) –

+0

niezupełnie =) Wiem o dodatkach, ale teraz nie muszę przekazywać takich informacji między działaniami. Muszę wiedzieć, co powinienem podać w sekcji ''. Właśnie zaktualizowałem moje pytanie. –

+0

Hm, jestem zdezorientowany, dlaczego dodatki nie będą działać dla tego, co próbujesz osiągnąć? Chcesz przesłać dane z cyfr do wykresu, a wykres do cyfr - poprawny? Powinieneś być w stanie użyć dodatkowego, aby popchnąć je tam iz powrotem, a następnie onCreate() użyć tych wartości do manipulowania twoją działalnością - np. Powiedzmy, że chcesz wyświetlić cyfry x = y od x = 1-10 Zaczynasz wyświetlać swoje cyfry na pierwszym, a następnie na drugi, albo naciśnij informacje (co chcesz wyświetlić, np. X = y z x = 1-10) lub danych końcowych (x = 1-10, y = 1-10), a następnie utwórz dane za pomocą podanych informacji. –

Powiązane problemy