2011-08-23 6 views
8

Próbuję przekazać dowolne dane do BroadcastReceiver poprzez jego Intent.Jak określić typ dodatku w pakiecie w posiadaniu intencji?

Więc mogę zrobić coś jak na poniższym

intent.putExtra("Some boolean", false); 
intent.putExtra("Some char", 'a'); 
intent.putExtra("Some String", "But don't know what it will be"); 
intent.putExtra("Some long", 15134234124125); 

a następnie przekazać to do BroadcastReceiver

chcę iterację Intent.getExtras() z czymś keySet(), ale chciałbym również, aby móc Uzyskaj wartość klucza bez konieczności kodowania twardego wywołania metodami takimi jak .getStringExtra() lub.

W jaki sposób dana osoba to robi?

Odpowiedz

15

Można użyć następującego kodu, aby uzyskać przedmiot każdej chwili z Intent:

Bundle bundle = intent.getExtras(); 
Object value = bundle.get("key"); 

Następnie można określić value jest prawdziwy typ korzystając Object 's metod.

4

Możesz przeglądać klawisze thye bez znajomości rodzaju wartości za pomocą keySet(). Zwraca on zestaw String, który można iterować (zobacz doc).

Ale dla wartości jest to normalne, że trzeba użyć wpisanej metody (getStringExtra(), getBooleanExtra(), itp.): Jest to spowodowane faktem, że sama Java jest wpisana.

Jeśli chcesz przesłać dane z dowolnych typów do Twojego BroadcastReceiver, należy albo:

  • konwertować wszystkie dodatki do String s przed ich wysłaniem, i pobrać wszystkie z nich jako String s:

    intent.putExtra("Some boolean", "false"); 
    intent.putExtra("Some char", "a"); 
    intent.putExtra("Some String", "But don't know what it will be"); 
    intent.putExtra("Some long", "15134234124125"); 
    
  • lub użyć sposobu Bundle zwracającej Object s get() (patrz doc)

    Object o = bundle.get(key)