Android 如何打印意图的内容以用于日志记录?

Android 如何打印意图的内容以用于日志记录?,android,Android,您是否编写了一个实用程序来打印意图的所有参数?像 Intent i = ... Log.d(tag, "INTENT = " + Util.printIntent(i) ); 包括目标、附加、数据等?谢谢你的帮助 更新: 到目前为止我所拥有的 if (G.DEBUG) Log.d(U.getTag(), "INTENT = " + intentToString(intent) ); public static String intentToString(Intent intent)

您是否编写了一个实用程序来打印意图的所有参数?像

Intent i = ...    
Log.d(tag, "INTENT = " + Util.printIntent(i) );
包括目标、附加、数据等?谢谢你的帮助

更新: 到目前为止我所拥有的

if (G.DEBUG) Log.d(U.getTag(), "INTENT = " + intentToString(intent)  );

public static String intentToString(Intent intent) {
   if (intent == null) {return null;}
   String out = intent.toString();
   Bundle extras = intent.getExtras();
   if (extras != null) {
       extras.size();
       out += "\n" + printBundle(extras);
   }
   if (intent.getAction() != null)     out+="\nAction = " + intent.getAction();
   if (intent.getType() != null)       out+="\nType = " + intent.getType();
   if (intent.getData() != null)       out+="\nData = " + intent.getData();
   if (intent.getPackage() != null)    out+="\nPackage = " + intent.getPackage();
   if (intent.getDataString() != null) out+="\nDataString = " + intent.getDataString();
return out; 
}
Intent#toString()
方法工作得很好,它可以打印大多数内容,但不幸的是它不能打印额外内容。额外内容位于
捆绑包中
,也可以使用
捆绑包#toString()
打印,但如果意图刚从另一个进程中到达,则在触发将其拆分之前,不会打印额外内容
捆绑包
,而且它也不会正确打印列表或数组。下面的代码有助于打印出所有内容:

public static String intentToString(Intent intent) {
    if (intent == null) {
        return null;
    }

    return intent.toString() + " " + bundleToString(intent.getExtras());
}

public static String bundleToString(Bundle bundle) {
    StringBuilder out = new StringBuilder("Bundle[");

    if (bundle == null) {
        out.append("null");
    } else {
        boolean first = true;
        for (String key : bundle.keySet()) {
            if (!first) {
                out.append(", ");
            }

            out.append(key).append('=');

            Object value = bundle.get(key);

            if (value instanceof int[]) {
                out.append(Arrays.toString((int[]) value));
            } else if (value instanceof byte[]) {
                out.append(Arrays.toString((byte[]) value));
            } else if (value instanceof boolean[]) {
                out.append(Arrays.toString((boolean[]) value));
            } else if (value instanceof short[]) {
                out.append(Arrays.toString((short[]) value));
            } else if (value instanceof long[]) {
                out.append(Arrays.toString((long[]) value));
            } else if (value instanceof float[]) {
                out.append(Arrays.toString((float[]) value));
            } else if (value instanceof double[]) {
                out.append(Arrays.toString((double[]) value));
            } else if (value instanceof String[]) {
                out.append(Arrays.toString((String[]) value));
            } else if (value instanceof CharSequence[]) {
                out.append(Arrays.toString((CharSequence[]) value));
            } else if (value instanceof Parcelable[]) {
                out.append(Arrays.toString((Parcelable[]) value));
            } else if (value instanceof Bundle) {
                out.append(bundleToString((Bundle) value));
            } else {
                out.append(value);
            }

            first = false;
        }
    }

    out.append("]");
    return out.toString();
}
最简单的一个:

 public static String intentToString(Intent intent) {
    if (intent == null)
        return "";

    StringBuilder stringBuilder = new StringBuilder("action: ")
            .append(intent.getAction())
            .append(" data: ")
            .append(intent.getDataString())
            .append(" extras: ")
            ;
    for (String key : intent.getExtras().keySet())
        stringBuilder.append(key).append("=").append(intent.getExtras().get(key)).append(" ");

    return stringBuilder.toString();

}

你为什么不使用调试器呢?这是一种更简单、更通用的方式,请参见
toUri(int-flags)
method@pskink:URI包含作为基本URI的意图数据,还有一个描述操作、类别、类型、标志、包、组件和附加内容的附加片段。看起来很完美,但是。。。我怎么得到“附加碎片”呢?我只是得到。。。“intent:#intent;component=com”@Robin Kanters:只是个人喜好,我喜欢看日志。:)它们让我想起了我的程序的执行流程,并且通常是我完成测试时编写测试的好地方。也就是说,我可能会更经常地接受你的建议。。。也许我会用得更快。我试了所有的旗子。我得到的只是目标类。医生说有一个“额外的片段”和所有的好东西。但是这不包括类别和标志,记录这些内容最简单的方法就是使用intent.toString,所以我认为这只是需要特殊处理的extras包。