Listar todos los extras de una intención

Resuelto me.at.coding asked hace 54 años • 0 respuestas

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!

me.at.coding avatar Jan 01 '70 08:01 me.at.coding
Aceptado

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 bundlees nulo antes del ciclo.

kshahar avatar Feb 25 '2013 18:02 kshahar

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");
    }
}
Pratik avatar May 28 '2013 00:05 Pratik

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".

TechAurelian avatar Sep 17 '2016 06:09 TechAurelian
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());
    }
}
user123321 avatar Oct 24 '2012 18:10 user123321