Listar todos los extras de una intención
Por razones de depuración, quiero enumerar todos los extras (y sus valores) de un Intent. Ahora conseguir las llaves no es un problema
Set<String> keys = intent.getExtras().keySet();
pero obtener los valores de las claves es algo para mí, porque algunos valores son cadenas, otros son booleanos... ¿Cómo podría obtener los valores en un bucle (recorriendo las claves) y escribir los valores en un archivo de registro? ¡Gracias por cualquier pista!
Esto es lo que utilicé para obtener información sobre una intención no documentada (de terceros):
Bundle bundle = intent.getExtras();
if (bundle != null) {
for (String key : bundle.keySet()) {
Log.e(TAG, key + " : " + (bundle.get(key) != null ? bundle.get(key) : "NULL"));
}
}
Asegúrese de verificar si bundle
es nulo antes del ciclo.
Así es como defino el método de utilidad para desechar todos los extras de un Intent.
import java.util.Iterator;
import java.util.Set;
import android.os.Bundle;
public static void dumpIntent(Intent i){
Bundle bundle = i.getExtras();
if (bundle != null) {
Set<String> keys = bundle.keySet();
Iterator<String> it = keys.iterator();
Log.e(LOG_TAG,"Dumping Intent start");
while (it.hasNext()) {
String key = it.next();
Log.e(LOG_TAG,"[" + key + "=" + bundle.get(key)+"]");
}
Log.e(LOG_TAG,"Dumping Intent end");
}
}
Puedes hacerlo en una línea de código:
Log.d("intent URI", intent.toUri(0));
Produce algo como:
"#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10a00000;component=com.mydomain.myapp/.StartActivity;sourceBounds=12%20870%20276%201167; l .perfil=0; fin"
Al final de esta cadena (la parte que puse en negrita) puedes encontrar la lista de extras (solo un extra en este ejemplo).
Esto es de acuerdo con la documentación de toUri : "El URI contiene los datos del Intent como URI base, con un fragmento adicional que describe la acción, categorías, tipo, indicadores, paquete, componente y extras".
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tv = new TextView(this);
tv.setText("Extras: \n\r");
setContentView(tv);
StringBuilder str = new StringBuilder();
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
Set<String> keys = bundle.keySet();
Iterator<String> it = keys.iterator();
while (it.hasNext()) {
String key = it.next();
str.append(key);
str.append(":");
str.append(bundle.get(key));
str.append("\n\r");
}
tv.setText(str.toString());
}
}