Por razones de depuración, quiero enumerar todos los extras (y sus valores) de una Intención. Ahora, obtener las llaves no es un problema
Set<String> keys = intent.getExtras().keySet();
pero obtener los valores de las claves es uno para mí, porque algunos valores son cadenas, algunos son booleanos ... ¿Cómo podría obtener los valores en un bucle (recorrer las teclas) y escribir los valores en un archivo de registro? Gracias por cualquier pista!
android
android-intent
stefan.at.wpf
fuente
fuente
if (bundle == null) { return; }
FTWBundle bundle = data.getExtras();
¿Dóndedata
está la intención? Para principiantes de Android.value = "null"
.Así es como defino el método de utilidad para volcar todos los extras de un Intent.
fuente
Puedes hacerlo en una línea de código:
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 .profile = 0; end "
Al final de esta cadena (la parte en negrita) puede encontrar la lista de extras (solo uno adicional en este ejemplo).
Esto está de acuerdo con la documentación de toUri : "El URI contiene los datos del Intent como el URI base, con un fragmento adicional que describe la acción, categorías, tipo, indicadores, paquete, componente y extras".
fuente
fuente
El método get (String key) de Bundle devuelve un Object. Su mejor opción es girar sobre el conjunto de teclas llamando a get (String) en cada tecla y usando toString () en el Objeto para generarlas. Esto funcionará mejor para las primitivas, pero puede encontrar problemas con los Objetos que no implementan un toString ().
fuente
fuente
Quería una forma de generar el contenido de una intención en el registro y poder leerlo fácilmente, así que esto es lo que se me ocurrió. Creé una
LogUtil
clase, y luego tomé eldumpIntent()
método que @Pratik creó y lo modifiqué un poco. Así es como se ve todo:¡Espero que esto ayude a alguien!
fuente
Puede usar
for (String key : keys) { Object o = get(key);
para devolver un objeto,getClass().getName()
invocarlo para obtener el tipo y luego hacer un conjunto de cosas de tipo if name.equals ("String") para determinar a qué método debería llamar realmente, para obtener el valor ?fuente
Noté en la fuente de Android que casi todas las operaciones obligan al paquete a desempaquetar sus datos. Entonces, si (como yo) necesita hacer esto con frecuencia para fines de depuración, lo siguiente es muy rápido para escribir:
fuente
Lo siento si esto es demasiado detallado o demasiado tarde, pero esta fue la única forma que pude encontrar para hacer el trabajo. El factor más complicado fue el hecho de que Java no tiene funciones de paso por referencia, por lo que los métodos get --- Extra necesitan un valor predeterminado para devolver y no pueden modificar un valor booleano para determinar si el valor predeterminado se devuelve o no por casualidad, o porque los resultados no fueron favorables. Para este propósito, hubiera sido mejor hacer que el método generara una excepción que devolver un valor predeterminado.
Encontré mi información aquí: Documentación de intención de Android .
Establecer documentación
fuente
La versión de Kotlin del método de utilidad de Pratik que descarga todos los extras de un Intent:
fuente
for (key in bundle.keySet())
Si para la depuración, todo lo que desea es una cadena (algo implícito en el OP pero no se indica explícitamente), simplemente use
toString
en los extrasBundle
:Devuelve una cadena como:
Documentación: Bundle.toString () (desafortunadamente es el
Object.toString()
javadoc predeterminado y, como tal, bastante inútil aquí).fuente