/* * Copyright (C) 2013 HalZhang. * * http://www.gnu.org/licenses/gpl-3.0.txt */ package com.halzhang.android.apps.startupnews.analytics; import com.google.analytics.tracking.android.ExceptionParser; import com.halzhang.android.apps.startupnews.utils.AppUtils; import android.content.Context; import android.os.Build; import java.io.PrintWriter; import java.io.StringWriter; import java.lang.reflect.Field; import java.net.UnknownHostException; import java.util.HashMap; import java.util.Map; /** * StartupNews * <p> * 异常解析 * </p> * * @author <a href="http://weibo.com/halzhang">Hal</a> * @version Mar 26, 2013 */ public class MyExceptionParser implements ExceptionParser { private Context mContext; private Map<String, String> infos = new HashMap<String, String>(); public MyExceptionParser(Context context) { mContext = context; } @Override public String getDescription(String message, Throwable throwable) { collectDeviceInfo(mContext); StringBuilder sb = new StringBuilder(); for (Map.Entry<String, String> entry : infos.entrySet()) { String key = entry.getKey(); String value = entry.getValue(); sb.append(key).append("=").append(value).append("\n"); } sb.append(getStackTraceString(throwable)); return sb.toString(); } public static String getStackTraceString(Throwable tr) { if (tr == null) { return ""; } Throwable t = tr; while (t != null) { if (t instanceof UnknownHostException) { return ""; } t = t.getCause(); } StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); tr.printStackTrace(pw); return sw.toString(); } public void collectDeviceInfo(Context ctx) { infos.clear(); infos.put("versionName", AppUtils.getVersionName(mContext)); infos.put("versionCode", String.valueOf(AppUtils.getVersionCode(mContext))); Field[] fields = Build.class.getDeclaredFields(); for (Field field : fields) { try { field.setAccessible(true); infos.put(field.getName(), field.get(null).toString()); } catch (Exception e) { } } } }