Как определить тип дополнительного в пакете, удерживаемом намерением?

Я пытаюсь передать произвольные данные в BroadcastReceiver через его Intent .

Поэтому я мог бы сделать что-то вроде следующего

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

И затем передайте это BroadcastReceiver

Я хочу, чтобы итерации через Intent.getExtras() с чем-то вроде keySet() , но я также хотел бы иметь возможность получить значение ключа без необходимости жесткого вызова вызовов таким методам, как .getStringExtra() или .getBooleanExtra() .

Как человек делает это?

Вы можете использовать следующий код, чтобы получить объект в любое время от Intent :

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

Затем вы можете определить реальный тип value с помощью методов Object .

Вы можете просматривать ключи thye, не зная тип значений с помощью keySet() . Он возвращает вам набор String который вы можете выполнять итерацию (см. Doc ).

Но для значений, это нормально, что вы должны использовать типизированный метод ( getStringExtra() , getBooleanExtra() и т. Д.): Это вызвано тем, что сам Java набирается.

Если вы хотите отправить данные произвольных типов в ваш BroadcastReceiver , вы должны либо:

  • Преобразуйте все свои дополнения в String s перед их отправкой и извлеките все из них как 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"); 
  • Или использовать метод get() для Bundle который возвращает Object s (см. Doc ):

     Object o = bundle.get(key)