Android 列出意图的所有附加内容
出于调试原因,我想列出一个Intent的所有附加项(及其值)。现在,拿到钥匙不是问题Android 列出意图的所有附加内容,android,android-intent,Android,Android Intent,出于调试原因,我想列出一个Intent的所有附加项(及其值)。现在,拿到钥匙不是问题 Set<String> keys = intent.getExtras().keySet(); Set keys=intent.getExtras().keySet(); 但是获取键的值对我来说是一件事,因为有些值是字符串,有些是布尔值。。。如何在循环中获取值(通过键循环)并将值写入日志文件?谢谢你的提示 Bundle的get(字符串键)方法返回一个对象。最好的方法是旋转键集,在每个键上调用ge
Set<String> keys = intent.getExtras().keySet();
Set keys=intent.getExtras().keySet();
但是获取键的值对我来说是一件事,因为有些值是字符串,有些是布尔值。。。如何在循环中获取值(通过键循环)并将值写入日志文件?谢谢你的提示 Bundle的get(字符串键)方法返回一个对象。最好的方法是旋转键集,在每个键上调用get(String),然后在对象上使用toString()输出它们。这对于基本体最为有效,但对于未实现toString()的对象,您可能会遇到问题 您可以使用for(String key:keys){Object o=get(key);
来返回一个对象,对其调用getClass().getName()
来获取类型,然后执行一组if name.equals(“String”)类型操作,以确定您应该实际调用哪个方法来获取值?private TextView tv;
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());
}
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
tv=新文本视图(此);
tv.setText(“附加:\n\r”);
设置内容视图(电视);
StringBuilder str=新的StringBuilder();
Bundle Bundle=getIntent().getExtras();
if(bundle!=null){
Set keys=bundle.keySet();
Iterator 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());
}
}
以下是我用来获取未记录(第三方)意图信息的方法:
在循环之前,请确保检查bundle是否为null。如果这太冗长或太晚,很抱歉,但这是完成任务的唯一方法。最复杂的因素是java没有通过引用传递函数,因此get---Extra方法需要返回默认值,并且无法修改boolean值来判断默认值是否是偶然返回的,或者是因为结果不好。为此,让方法引发异常比让它返回默认值更好 我在这里找到了我的信息:
String[]anArray={};
Set extras1=(Set)intent.getExtras().keySet();
String[]extras=(String[])extras1.toArray(anArray);
//保存所有字符串的arraylist
//您可以显示字符串,而不是将字符串放在这里
ArrayList endResult=新的ArrayList();
对于(inti=0;i这就是我如何定义实用方法来转储意图的所有额外内容
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");
}
}
import java.util.Iterator;
导入java.util.Set;
导入android.os.Bundle;
公共静态无效转储意图(意图一){
Bundle=i.getExtras();
if(bundle!=null){
Set keys=bundle.keySet();
Iterator it=keys.Iterator();
Log.e(Log_标签,“转储意图开始”);
while(it.hasNext()){
String key=it.next();
Log.e(Log_标记,“[”+key+“=”+bundle.get(key)+“])”;
}
Log.e(Log_标签,“倾倒意图结束”);
}
}
如果调试所需的只是一个字符串(OP暗示了这一点,但没有明确说明),只需在extrasBundle
上使用toString
:
intent.getExtras().toString()
它返回一个字符串,例如:
Bundle[{key1=value1, key2=value2, key3=value3}]
文档:(不幸的是,它是默认的Object.toString()
javadoc,因此在这里非常无用。)Bundle extras=getIntent().getExtras();
Set ks=extras.keySet();
迭代器迭代器=ks.Iterator();
while(iterator.hasNext()){
Log.d(“KEY”,iterator.next());
}
我想要一种将意图的内容输出到日志的方法,并且能够轻松地读取它,所以我想到了以下方法。我创建了一个LogUtil
类,然后使用@Pratik创建的dumpIntent()
方法对其进行了一点修改。下面是它的样子:
public class LogUtil {
private static final String TAG = "IntentDump";
public static void dumpIntent(Intent i){
Bundle bundle = i.getExtras();
if (bundle != null) {
Set<String> keys = bundle.keySet();
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("IntentDump \n\r");
stringBuilder.append("-------------------------------------------------------------\n\r");
for (String key : keys) {
stringBuilder.append(key).append("=").append(bundle.get(key)).append("\n\r");
}
stringBuilder.append("-------------------------------------------------------------\n\r");
Log.i(TAG, stringBuilder.toString());
}
}
}
公共类LogUtil{
私有静态最终字符串TAG=“IntentDump”;
公共静态无效转储意图(意图一){
Bundle=i.getExtras();
if(bundle!=null){
Set keys=bundle.keySet();
StringBuilder StringBuilder=新的StringBuilder();
stringBuilder.append(“IntentDump\n\r”);
stringBuilder.append(“----------------------------------------------------------------\n\r”);
用于(字符串键:键){
stringBuilder.append(key.append(“=”).append(bundle.get(key)).append(“\n\r”);
}
stringBuilder.append(“----------------------------------------------------------------\n\r”);
Log.i(标签,stringBuilder.toString());
}
}
}
希望这对某人有所帮助!我在Android源代码中注意到,几乎每个操作都会强制捆绑包解析其数据。因此,如果(像我一样)您需要经常这样做以进行调试,则可以快速键入以下内容:
Bundle extras = getIntent().getExtras();
extras.isEmpty(); // unparcel
System.out.println(extras);
您可以在一行代码中完成此操作:
Log.d("intent URI", intent.toUri(0));
它的输出类似于:
“#Intent;action=android.Intent.action.MAIN;category=android.Intent.category.launchFlags=0x10100000;component=com.mydomain.myapp/.StartActivity;sourceBounds=12%20870%20276%201167;l.profile=0;end”
在这个字符串的末尾(我加粗的部分),您可以找到额外的列表(本例中只有一个额外的)
这是根据:
“URI包含作为基本URI的意图数据,还有一个描述操作、类别、类型、标志、包、组件和附加内容的附加片段。”Kotlin版本转储意图的所有附加内容:
fun dumpIntent(intent: Intent) {
val bundle: Bundle = intent.extras ?: return
val keys = bundle.keySet()
val it = keys.iterator()
Log.d(TAG, "Dumping intent start")
while (it.hasNext()) {
val key = it.next()
Log.d(TAG,"[" + key + "=" + bundle.get(key)+"]");
}
Log.d(TAG, "Dumping intent finish")
}
Kotlin oneliner,用于调试模式下的评估:
intent.extras.keySet().map{it to intent.extras.get(it)}
public class LogUtil {
private static final String TAG = "IntentDump";
public static void dumpIntent(Intent i){
Bundle bundle = i.getExtras();
if (bundle != null) {
Set<String> keys = bundle.keySet();
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("IntentDump \n\r");
stringBuilder.append("-------------------------------------------------------------\n\r");
for (String key : keys) {
stringBuilder.append(key).append("=").append(bundle.get(key)).append("\n\r");
}
stringBuilder.append("-------------------------------------------------------------\n\r");
Log.i(TAG, stringBuilder.toString());
}
}
}
Bundle extras = getIntent().getExtras();
extras.isEmpty(); // unparcel
System.out.println(extras);
Log.d("intent URI", intent.toUri(0));
fun dumpIntent(intent: Intent) {
val bundle: Bundle = intent.extras ?: return
val keys = bundle.keySet()
val it = keys.iterator()
Log.d(TAG, "Dumping intent start")
while (it.hasNext()) {
val key = it.next()
Log.d(TAG,"[" + key + "=" + bundle.get(key)+"]");
}
Log.d(TAG, "Dumping intent finish")
}