310 Stimmen

Auflistung aller Extras eines Vorhabens

Aus Gründen der Fehlersuche möchte ich alle Extras (und ihre Werte) eines Intents auflisten. Nun, die Schlüssel zu erhalten ist kein Problem

Set<String> keys = intent.getExtras().keySet();

aber immer die Werte der Schlüssel ist eine für mich, denn einige Werte sind Zeichenfolgen, einige sind boolesche... Wie könnte ich die Werte in einer Schleife abrufen (die Schlüssel durchlaufen) und die Werte in eine Protokolldatei schreiben? Danke für jeden Hinweis!

562voto

kshahar Punkte 9983

Das habe ich verwendet, um Informationen über eine nicht dokumentierte Absicht (einer dritten Partei) zu erhalten:

Bundle bundle = intent.getExtras();
if (bundle != null) {
    for (String key : bundle.keySet()) {
        Log.e(TAG, key + " : " + (bundle.get(key) != null ? bundle.get(key) : "NULL"));
    }
}

Stellen Sie sicher, dass Sie prüfen, ob bundle vor der Schleife Null ist.

113voto

Pratik Punkte 1567

So definiere ich die Utility-Methode, um alle Extras eines Intents auszulagern.

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

67voto

Alex Vang Punkte 5241

Sie können dies in einer einzigen Codezeile tun:

Log.d("intent URI", intent.toUri(0));

Er gibt etwa Folgendes aus:

"#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; Ende"

Am Ende dieser Zeichenfolge (der fettgedruckte Teil) finden Sie die Liste der Extras (in diesem Beispiel nur ein Extra).

Dies ist nach der toUri-Dokumentation : "Der URI enthält die Daten des Intents als Basis-URI und ein zusätzliches Fragment, das die Aktion, die Kategorien, den Typ, die Flags, das Paket, die Komponente und die Extras beschreibt."

18voto

ruX Punkte 6852

Eine Kotlin-Lösung, die für die Auswertung im Debug-Modus nützlich ist:

// list: List<Pair<String!, Any?>>?
val list = intent.extras.keySet().map { it to intent.extras.get(it) }

Log.d("list", list.toString();

Das würde die Liste aller Extras im Paket ausdrucken extras

18voto

user123321 Punkte 12333
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());
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X