Por razões de depuração, quero listar todos os extras (e seus valores) de um Intent. Agora, obter as chaves não é um problema
Set<String> keys = intent.getExtras().keySet();
mas obter os valores das chaves é um para mim, porque alguns valores são strings, outros são booleanos ... Como eu poderia obter os valores em um loop (percorrendo as chaves) e gravar os valores em um arquivo de log? Obrigado por qualquer dica!
android
android-intent
stefan.at.wpf
fonte
fonte
if (bundle == null) { return; }
FTWBundle bundle = data.getExtras();
Ondedata
está a intenção. Para iniciantes no Android.value = "null"
.É assim que eu defino o método utilitário para despejar todos os extras de um Intent.
fonte
Você pode fazer isso em uma linha de código:
Ele gera algo como:
"#Intent; ação = android.intent.action.MAIN; categoria = android.intent.category.LAUNCHER; launchFlags = 0x10a00000; componente = com.mydomain.myapp / .StartActivity; sourceBounds = 12% 20870% 20276% 201167; l .profile = 0; final "
No final desta sequência (a parte que eu coloquei em negrito), você pode encontrar a lista de extras (apenas um extra neste exemplo).
Isso está de acordo com a documentação do toUri : "O URI contém os dados do Intent como o URI base, com um fragmento adicional que descreve a ação, categorias, tipo, sinalizadores, pacote, componente e extras".
fonte
fonte
O método get (String string) do Bundle retorna um Object. Sua melhor aposta é girar sobre o conjunto de teclas chamando get (String) em cada tecla e usando toString () no Object para produzi-las. Isso funcionará melhor para primitivas, mas você pode ter problemas com objetos que não implementam um toString ().
fonte
fonte
Eu queria uma maneira de exibir o conteúdo de uma intenção no log e poder lê-lo facilmente, então aqui está o que eu criei. Eu criei uma
LogUtil
classe e, em seguida, peguei odumpIntent()
método @Pratik criado e o modifiquei um pouco. Aqui está o que tudo parece:Espero que isso ajude alguém!
fonte
Você pode usar
for (String key : keys) { Object o = get(key);
para retornar um objeto, chamágetClass().getName()
-lo para obter o tipo e, em seguida, fazer um conjunto de coisas if.equals ("String") para descobrir qual método você realmente deveria chamar, a fim de obter o valor ?fonte
Percebi na fonte do Android que quase todas as operações obrigam o Bundle a descompactar seus dados. Portanto, se (como eu) você precisar fazer isso com frequência para fins de depuração, a seguir é muito rápido digitar:
fonte
Desculpe se isso é muito detalhado ou muito tarde, mas essa foi a única maneira que encontrei para concluir o trabalho. O fator mais complicador foi o fato de o java não possuir funções de referência de passagem. Portanto, os métodos get --- Extra precisam de um padrão para retornar e não podem modificar um valor booleano para saber se o valor padrão está ou não sendo retornado por acaso, ou porque os resultados não foram favoráveis. Para esse propósito, seria melhor ter o método gerar uma exceção do que retornar um padrão.
Encontrei minhas informações aqui: Android Intent Documentation .
Definir documentação
fonte
A versão Kotlin do método utilitário do Pratik que despeja todos os extras de um Intent:
fonte
for (key in bundle.keySet())
Se, para depurar, tudo o que você deseja é uma string (meio implícita no OP, mas não explicitamente declarada), basta usar
toString
os extrasBundle
:Retorna uma string como:
Documentation: Bundle.toString () (infelizmente é o
Object.toString()
javadoc padrão e, como tal, bastante inútil aqui.)fonte