您是否编写了实用程序来打印 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()方法效果很好,它将打印大多数内容,但是不幸的是,它不会打印多余内容。附加内容包含在Bundle中,也可以使用Bundle#toString()打印,但是如果Intent刚从另一个进程到达,则附加内容Bundle的内容将不会被打印,除非您触发将其取消解析,否则它也不会正确打印列表或数组。下面的代码应有助于打印几乎所有内容:

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

10-07 19:47
查看更多