Showing
9 changed files
with
409 additions
and
246 deletions
| 1 | 1 | package com.gimi.common.cinema.utils; |
| 2 | 2 | |
| 3 | -import android.os.Environment; | |
| 4 | 3 | import android.support.annotation.IntDef; |
| 5 | 4 | import android.util.Log; |
| 6 | 5 | import org.json.JSONArray; |
| ... | ... | @@ -14,6 +13,7 @@ import javax.xml.transform.TransformerFactory; |
| 14 | 13 | import javax.xml.transform.stream.StreamResult; |
| 15 | 14 | import javax.xml.transform.stream.StreamSource; |
| 16 | 15 | import java.io.BufferedWriter; |
| 16 | +import java.io.ByteArrayOutputStream; | |
| 17 | 17 | import java.io.File; |
| 18 | 18 | import java.io.FileWriter; |
| 19 | 19 | import java.io.IOException; |
| ... | ... | @@ -21,82 +21,109 @@ import java.io.StringReader; |
| 21 | 21 | import java.io.StringWriter; |
| 22 | 22 | import java.lang.annotation.Retention; |
| 23 | 23 | import java.lang.annotation.RetentionPolicy; |
| 24 | +import java.text.Format; | |
| 24 | 25 | import java.text.SimpleDateFormat; |
| 25 | 26 | import java.util.Date; |
| 26 | 27 | import java.util.Formatter; |
| 27 | 28 | import java.util.Locale; |
| 29 | +import java.util.concurrent.ExecutorService; | |
| 30 | +import java.util.concurrent.Executors; | |
| 31 | +import java.util.zip.DataFormatException; | |
| 32 | +import java.util.zip.Deflater; | |
| 33 | +import java.util.zip.Inflater; | |
| 28 | 34 | |
| 29 | 35 | /** |
| 30 | 36 | * <pre> |
| 31 | 37 | * author: Blankj |
| 32 | 38 | * blog : http://blankj.com |
| 33 | - * time : 2016/9/21 | |
| 34 | - * desc : 日志相关工具类 | |
| 39 | + * time : 2016/09/21 | |
| 40 | + * desc : Log相关工具类 | |
| 35 | 41 | * </pre> |
| 36 | 42 | */ |
| 37 | 43 | public final class LogUtils { |
| 38 | 44 | |
| 39 | - private LogUtils() { | |
| 40 | - throw new UnsupportedOperationException("u can't instantiate me..."); | |
| 41 | - } | |
| 42 | - | |
| 43 | - public static final int V = 0x01; | |
| 44 | - public static final int D = 0x02; | |
| 45 | - public static final int I = 0x04; | |
| 46 | - public static final int W = 0x08; | |
| 47 | - public static final int E = 0x10; | |
| 48 | - public static final int A = 0x20; | |
| 45 | + public static final int V = Log.VERBOSE; | |
| 46 | + public static final int D = Log.DEBUG; | |
| 47 | + public static final int I = Log.INFO; | |
| 48 | + public static final int W = Log.WARN; | |
| 49 | + public static final int E = Log.ERROR; | |
| 50 | + public static final int A = Log.ASSERT; | |
| 49 | 51 | |
| 50 | 52 | @IntDef({V, D, I, W, E, A}) |
| 51 | 53 | @Retention(RetentionPolicy.SOURCE) |
| 52 | - public @interface TYPE { | |
| 53 | - } | |
| 54 | - | |
| 55 | - private static final int FILE = 0xF1; | |
| 56 | - private static final int JSON = 0xF2; | |
| 57 | - private static final int XML = 0xF4; | |
| 54 | + private @interface TYPE { | |
| 55 | + } | |
| 56 | + | |
| 57 | + private static final char[] T = new char[]{'V', 'D', 'I', 'W', 'E', 'A'}; | |
| 58 | + | |
| 59 | + private static final int FILE = 0x10; | |
| 60 | + private static final int JSON = 0x20; | |
| 61 | + private static final int XML = 0x30; | |
| 62 | + private static ExecutorService executor; | |
| 63 | + private static String defaultDir;// log默认存储目录 | |
| 64 | + private static String dir; // log存储目录 | |
| 65 | + | |
| 66 | + private static boolean sLogSwitch = true; // log总开关,默认开 | |
| 67 | + private static boolean sLog2ConsoleSwitch = true; // logcat是否打印,默认打印 | |
| 68 | + private static String sGlobalTag = null; // log标签 | |
| 69 | + private static boolean sTagIsSpace = true; // log标签是否为空白 | |
| 70 | + private static boolean sLogHeadSwitch = true; // log头部开关,默认开 | |
| 71 | + private static boolean sLog2FileSwitch = false;// log写入文件开关,默认关 | |
| 72 | + private static boolean sLogBorderSwitch = true; // log边框开关,默认开 | |
| 73 | + private static int sConsoleFilter = V; // log控制台过滤器 | |
| 74 | + private static int sFileFilter = V; // log文件过滤器 | |
| 75 | + | |
| 76 | + private static final String FILE_SEP = System.getProperty("file.separator"); | |
| 77 | + private static final String LINE_SEP = System.getProperty("line.separator"); | |
| 78 | + private static final String TOP_BORDER = "╔═══════════════════════════════════════════════════════════════════════════════════════════════════"; | |
| 79 | + private static final String LEFT_BORDER = "║ "; | |
| 80 | + private static final String BOTTOM_BORDER = "╚═══════════════════════════════════════════════════════════════════════════════════════════════════"; | |
| 81 | + private static final int MAX_LEN = 4000; | |
| 82 | + private static final Format FORMAT = new SimpleDateFormat("MM-dd HH:mm:ss.SSS ", Locale.getDefault()); | |
| 58 | 83 | |
| 59 | - private static String dir; // log存储目录 | |
| 60 | - private static boolean sLogSwitch = true; // log总开关 | |
| 61 | - private static String sGlobalTag = null; // log标签 | |
| 62 | - private static boolean sTagIsSpace = true; // log标签是否为空白 | |
| 63 | - private static boolean sLog2FileSwitch = false;// log写入文件开关 | |
| 64 | - private static boolean sLogBorderSwitch = true; // log边框开关 | |
| 65 | - private static int sLogFilter = V; // log过滤器 | |
| 66 | - | |
| 67 | - private static final String TOP_BORDER = "╔═══════════════════════════════════════════════════════════════════════════════════════════════════"; | |
| 68 | - private static final String LEFT_BORDER = "║ "; | |
| 69 | - private static final String BOTTOM_BORDER = "╚═══════════════════════════════════════════════════════════════════════════════════════════════════"; | |
| 70 | - private static final String LINE_SEPARATOR = System.getProperty("line.separator"); | |
| 71 | - | |
| 72 | - private static final int MAX_LEN = 4000; | |
| 73 | 84 | private static final String NULL_TIPS = "Log with null object."; |
| 74 | - private static final String NULL = "null"; | |
| 75 | - private static final String ARGS = "args"; | |
| 85 | + private static final String NULL = "null"; | |
| 86 | + private static final String ARGS = "args"; | |
| 76 | 87 | |
| 77 | - public static class Builder { | |
| 88 | + private LogUtils() { | |
| 89 | + throw new UnsupportedOperationException("u can't instantiate me..."); | |
| 90 | + } | |
| 78 | 91 | |
| 92 | + public static class Builder { | |
| 79 | 93 | public Builder() { |
| 80 | - if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) { | |
| 81 | -// dir = Utils.getContext().getExternalCacheDir() + File.separator + "log" + File.separator; | |
| 82 | - } else { | |
| 83 | -// dir = Utils.getContext().getCacheDir() + File.separator + "log" + File.separator; | |
| 84 | - } | |
| 94 | + if (defaultDir != null) return; | |
| 95 | + defaultDir = "/sdcard/log/"; | |
| 96 | +// if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) | |
| 97 | +// && Utils.getContext().getExternalCacheDir() != null) | |
| 98 | +// defaultDir = Utils.getContext().getExternalCacheDir() + FILE_SEP + "log" + FILE_SEP; | |
| 99 | +// else { | |
| 100 | +// defaultDir = Utils.getContext().getCacheDir() + FILE_SEP + "log" + FILE_SEP; | |
| 101 | +// } | |
| 85 | 102 | } |
| 86 | 103 | |
| 87 | - public Builder setGlobalTag(String tag) { | |
| 88 | - if (!isSpace(tag)) { | |
| 89 | - LogUtils.sGlobalTag = tag; | |
| 90 | - sTagIsSpace = false; | |
| 91 | - } else { | |
| 104 | + public Builder setLogSwitch(boolean logSwitch) { | |
| 105 | + LogUtils.sLogSwitch = logSwitch; | |
| 106 | + return this; | |
| 107 | + } | |
| 108 | + | |
| 109 | + public Builder setConsoleSwitch(boolean consoleSwitch) { | |
| 110 | + LogUtils.sLog2ConsoleSwitch = consoleSwitch; | |
| 111 | + return this; | |
| 112 | + } | |
| 113 | + | |
| 114 | + public Builder setGlobalTag(final String tag) { | |
| 115 | + if (isSpace(tag)) { | |
| 92 | 116 | LogUtils.sGlobalTag = ""; |
| 93 | 117 | sTagIsSpace = true; |
| 118 | + } else { | |
| 119 | + LogUtils.sGlobalTag = tag; | |
| 120 | + sTagIsSpace = false; | |
| 94 | 121 | } |
| 95 | 122 | return this; |
| 96 | 123 | } |
| 97 | 124 | |
| 98 | - public Builder setLogSwitch(boolean logSwitch) { | |
| 99 | - LogUtils.sLogSwitch = logSwitch; | |
| 125 | + public Builder setLogHeadSwitch(boolean logHeadSwitch) { | |
| 126 | + LogUtils.sLogHeadSwitch = logHeadSwitch; | |
| 100 | 127 | return this; |
| 101 | 128 | } |
| 102 | 129 | |
| ... | ... | @@ -105,15 +132,47 @@ public final class LogUtils { |
| 105 | 132 | return this; |
| 106 | 133 | } |
| 107 | 134 | |
| 135 | + public Builder setDir(final String dir) { | |
| 136 | + if (isSpace(dir)) { | |
| 137 | + LogUtils.dir = null; | |
| 138 | + } else { | |
| 139 | + LogUtils.dir = dir.endsWith(FILE_SEP) ? dir : dir + FILE_SEP; | |
| 140 | + } | |
| 141 | + return this; | |
| 142 | + } | |
| 143 | + | |
| 144 | + public Builder setDir(final File dir) { | |
| 145 | + LogUtils.dir = dir == null ? null : dir.getAbsolutePath() + FILE_SEP; | |
| 146 | + return this; | |
| 147 | + } | |
| 148 | + | |
| 108 | 149 | public Builder setBorderSwitch(boolean borderSwitch) { |
| 109 | 150 | LogUtils.sLogBorderSwitch = borderSwitch; |
| 110 | 151 | return this; |
| 111 | 152 | } |
| 112 | 153 | |
| 113 | - public Builder setLogFilter(@TYPE int logFilter) { | |
| 114 | - LogUtils.sLogFilter = logFilter; | |
| 154 | + public Builder setConsoleFilter(@TYPE int consoleFilter) { | |
| 155 | + LogUtils.sConsoleFilter = consoleFilter; | |
| 115 | 156 | return this; |
| 116 | 157 | } |
| 158 | + | |
| 159 | + public Builder setFileFilter(@TYPE int fileFilter) { | |
| 160 | + LogUtils.sFileFilter = fileFilter; | |
| 161 | + return this; | |
| 162 | + } | |
| 163 | + | |
| 164 | + @Override | |
| 165 | + public String toString() { | |
| 166 | + return "switch: " + sLogSwitch | |
| 167 | + + LINE_SEP + "console: " + sLog2ConsoleSwitch | |
| 168 | + + LINE_SEP + "tag: " + (sTagIsSpace ? "null" : sGlobalTag) | |
| 169 | + + LINE_SEP + "head: " + sLogHeadSwitch | |
| 170 | + + LINE_SEP + "file: " + sLog2FileSwitch | |
| 171 | + + LINE_SEP + "dir: " + (dir == null ? defaultDir : dir) | |
| 172 | + + LINE_SEP + "border: " + sLogBorderSwitch | |
| 173 | + + LINE_SEP + "consoleFilter: " + T[sConsoleFilter - V] | |
| 174 | + + LINE_SEP + "fileFilter: " + T[sFileFilter - V]; | |
| 175 | + } | |
| 117 | 176 | } |
| 118 | 177 | |
| 119 | 178 | public static void v(Object contents) { |
| ... | ... | @@ -165,93 +224,108 @@ public final class LogUtils { |
| 165 | 224 | } |
| 166 | 225 | |
| 167 | 226 | public static void file(Object contents) { |
| 168 | - log(FILE, sGlobalTag, contents); | |
| 227 | + log(FILE | D, sGlobalTag, contents); | |
| 228 | + } | |
| 229 | + | |
| 230 | + public static void file(@TYPE int type, Object contents) { | |
| 231 | + log(FILE | type, sGlobalTag, contents); | |
| 169 | 232 | } |
| 170 | 233 | |
| 171 | 234 | public static void file(String tag, Object contents) { |
| 172 | - log(FILE, tag, contents); | |
| 235 | + log(FILE | D, tag, contents); | |
| 236 | + } | |
| 237 | + | |
| 238 | + public static void file(@TYPE int type, String tag, Object contents) { | |
| 239 | + log(FILE | type, tag, contents); | |
| 173 | 240 | } |
| 174 | 241 | |
| 175 | 242 | public static void json(String contents) { |
| 176 | - log(JSON, sGlobalTag, contents); | |
| 243 | + log(JSON | D, sGlobalTag, contents); | |
| 244 | + } | |
| 245 | + | |
| 246 | + public static void json(@TYPE int type, String contents) { | |
| 247 | + log(JSON | type, sGlobalTag, contents); | |
| 177 | 248 | } |
| 178 | 249 | |
| 179 | 250 | public static void json(String tag, String contents) { |
| 180 | - log(JSON, tag, contents); | |
| 251 | + log(JSON | D, tag, contents); | |
| 252 | + } | |
| 253 | + | |
| 254 | + public static void json(@TYPE int type, String tag, String contents) { | |
| 255 | + log(JSON | type, tag, contents); | |
| 181 | 256 | } |
| 182 | 257 | |
| 183 | 258 | public static void xml(String contents) { |
| 184 | - log(XML, sGlobalTag, contents); | |
| 259 | + log(XML | D, sGlobalTag, contents); | |
| 260 | + } | |
| 261 | + | |
| 262 | + public static void xml(@TYPE int type, String contents) { | |
| 263 | + log(XML | type, sGlobalTag, contents); | |
| 185 | 264 | } |
| 186 | 265 | |
| 187 | 266 | public static void xml(String tag, String contents) { |
| 188 | - log(XML, tag, contents); | |
| 189 | - } | |
| 190 | - | |
| 191 | - private static void log(int type, String tag, Object... contents) { | |
| 192 | - if (!sLogSwitch) return; | |
| 193 | - final String[] processContents = processContents(type, tag, contents); | |
| 194 | - tag = processContents[0]; | |
| 195 | - String msg = processContents[1]; | |
| 196 | - switch (type) { | |
| 197 | - case V: | |
| 198 | - case D: | |
| 199 | - case I: | |
| 200 | - case W: | |
| 201 | - case E: | |
| 202 | - case A: | |
| 203 | - if (V == sLogFilter || type >= sLogFilter) { | |
| 204 | - printLog(type, tag, msg); | |
| 205 | - } | |
| 206 | - if (sLog2FileSwitch) { | |
| 207 | - print2File(tag, msg); | |
| 208 | - } | |
| 209 | - break; | |
| 210 | - case FILE: | |
| 211 | - print2File(tag, msg); | |
| 212 | - break; | |
| 213 | - case JSON: | |
| 214 | - printLog(D, tag, msg); | |
| 215 | - break; | |
| 216 | - case XML: | |
| 217 | - printLog(D, tag, msg); | |
| 218 | - break; | |
| 219 | - } | |
| 267 | + log(XML | D, tag, contents); | |
| 268 | + } | |
| 220 | 269 | |
| 270 | + public static void xml(@TYPE int type, String tag, String contents) { | |
| 271 | + log(XML | type, tag, contents); | |
| 221 | 272 | } |
| 222 | 273 | |
| 223 | - private static String[] processContents(int type, String tag, Object... contents) { | |
| 224 | - StackTraceElement targetElement = Thread.currentThread().getStackTrace()[5]; | |
| 225 | - String className = targetElement.getClassName(); | |
| 226 | - String[] classNameInfo = className.split("\\."); | |
| 227 | - if (classNameInfo.length > 0) { | |
| 228 | - className = classNameInfo[classNameInfo.length - 1]; | |
| 274 | + private static void log(final int type, String tag, final Object... contents) { | |
| 275 | + if (!sLogSwitch || (!sLog2ConsoleSwitch && !sLog2FileSwitch)) return; | |
| 276 | + int type_low = type & 0x0f, type_high = type & 0xf0; | |
| 277 | + if (type_low < sConsoleFilter && type_low < sFileFilter) return; | |
| 278 | + final String[] tagAndHead = processTagAndHead(tag); | |
| 279 | + String body = processBody(type_high, contents); | |
| 280 | + if (sLog2ConsoleSwitch && type_low >= sConsoleFilter) { | |
| 281 | + print2Console(type_low, tagAndHead[0], tagAndHead[1] + body); | |
| 229 | 282 | } |
| 230 | - if (className.contains("$")) { | |
| 231 | - className = className.split("\\$")[0]; | |
| 283 | + if (sLog2FileSwitch || type_high == FILE) { | |
| 284 | + if (type_low >= sFileFilter) | |
| 285 | + print2File(type_low, tagAndHead[0], tagAndHead[2] + body); | |
| 232 | 286 | } |
| 233 | - if (!sTagIsSpace) {// 如果全局tag不为空,那就用全局tag | |
| 287 | + } | |
| 288 | + | |
| 289 | + private static String[] processTagAndHead(String tag) { | |
| 290 | + if (!sTagIsSpace && !sLogHeadSwitch) { | |
| 234 | 291 | tag = sGlobalTag; |
| 235 | - } else {// 全局tag为空时,如果传入的tag为空那就显示类名,否则显示tag | |
| 236 | - tag = isSpace(tag) ? className : tag; | |
| 292 | + } else { | |
| 293 | + StackTraceElement targetElement = Thread.currentThread().getStackTrace()[5]; | |
| 294 | + String className = targetElement.getClassName(); | |
| 295 | + String[] classNameInfo = className.split("\\."); | |
| 296 | + if (classNameInfo.length > 0) { | |
| 297 | + className = classNameInfo[classNameInfo.length - 1]; | |
| 298 | + } | |
| 299 | + if (className.contains("$")) { | |
| 300 | + className = className.split("\\$")[0]; | |
| 301 | + } | |
| 302 | + if (sTagIsSpace) { | |
| 303 | + tag = isSpace(tag) ? className : tag; | |
| 304 | + } | |
| 305 | + if (sLogHeadSwitch) { | |
| 306 | + String head = new Formatter() | |
| 307 | + .format("%s, %s(%s.java:%d)", | |
| 308 | + Thread.currentThread().getName(), | |
| 309 | + targetElement.getMethodName(), | |
| 310 | + className, | |
| 311 | + targetElement.getLineNumber()) | |
| 312 | + .toString(); | |
| 313 | + return new String[]{tag, head + LINE_SEP, " [" + head + "]: "}; | |
| 314 | + } | |
| 237 | 315 | } |
| 316 | + return new String[]{tag, "", ": "}; | |
| 317 | + } | |
| 238 | 318 | |
| 239 | - String head = new Formatter() | |
| 240 | - .format("Thread: %s, %s(%s.java:%d)" + LINE_SEPARATOR, | |
| 241 | - Thread.currentThread().getName(), | |
| 242 | - targetElement.getMethodName(), | |
| 243 | - className, | |
| 244 | - targetElement.getLineNumber()) | |
| 245 | - .toString(); | |
| 246 | - String msg = NULL_TIPS; | |
| 319 | + private static String processBody(int type, Object... contents) { | |
| 320 | + String body = NULL_TIPS; | |
| 247 | 321 | if (contents != null) { |
| 248 | 322 | if (contents.length == 1) { |
| 249 | 323 | Object object = contents[0]; |
| 250 | - msg = object == null ? NULL : object.toString(); | |
| 324 | + body = object == null ? NULL : object.toString(); | |
| 251 | 325 | if (type == JSON) { |
| 252 | - msg = formatJson(msg); | |
| 326 | + body = formatJson(body); | |
| 253 | 327 | } else if (type == XML) { |
| 254 | - msg = formatXml(msg); | |
| 328 | + body = formatXml(body); | |
| 255 | 329 | } |
| 256 | 330 | } else { |
| 257 | 331 | StringBuilder sb = new StringBuilder(); |
| ... | ... | @@ -263,20 +337,12 @@ public final class LogUtils { |
| 263 | 337 | .append("]") |
| 264 | 338 | .append(" = ") |
| 265 | 339 | .append(content == null ? NULL : content.toString()) |
| 266 | - .append(LINE_SEPARATOR); | |
| 340 | + .append(LINE_SEP); | |
| 267 | 341 | } |
| 268 | - msg = sb.toString(); | |
| 269 | - } | |
| 270 | - } | |
| 271 | - if (sLogBorderSwitch) { | |
| 272 | - StringBuilder sb = new StringBuilder(); | |
| 273 | - String[] lines = msg.split(LINE_SEPARATOR); | |
| 274 | - for (String line : lines) { | |
| 275 | - sb.append(LEFT_BORDER).append(line).append(LINE_SEPARATOR); | |
| 342 | + body = sb.toString(); | |
| 276 | 343 | } |
| 277 | - msg = sb.toString(); | |
| 278 | 344 | } |
| 279 | - return new String[]{tag, head + msg}; | |
| 345 | + return body; | |
| 280 | 346 | } |
| 281 | 347 | |
| 282 | 348 | private static String formatJson(String json) { |
| ... | ... | @@ -300,106 +366,80 @@ public final class LogUtils { |
| 300 | 366 | transformer.setOutputProperty(OutputKeys.INDENT, "yes"); |
| 301 | 367 | transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); |
| 302 | 368 | transformer.transform(xmlInput, xmlOutput); |
| 303 | - xml = xmlOutput.getWriter().toString().replaceFirst(">", ">" + LINE_SEPARATOR); | |
| 369 | + xml = xmlOutput.getWriter().toString().replaceFirst(">", ">" + LINE_SEP); | |
| 304 | 370 | } catch (Exception e) { |
| 305 | 371 | e.printStackTrace(); |
| 306 | 372 | } |
| 307 | 373 | return xml; |
| 308 | 374 | } |
| 309 | 375 | |
| 310 | - private static void printLog(int type, String tag, String msg) { | |
| 311 | - if (sLogBorderSwitch) printBorder(type, tag, true); | |
| 376 | + private static void print2Console(final int type, String tag, String msg) { | |
| 377 | + if (sLogBorderSwitch) { | |
| 378 | + print(type, tag, TOP_BORDER); | |
| 379 | + msg = addLeftBorder(msg); | |
| 380 | + } | |
| 312 | 381 | int len = msg.length(); |
| 313 | 382 | int countOfSub = len / MAX_LEN; |
| 314 | 383 | if (countOfSub > 0) { |
| 315 | - int index = 0; | |
| 384 | + print(type, tag, msg.substring(0, MAX_LEN)); | |
| 316 | 385 | String sub; |
| 317 | - for (int i = 0; i < countOfSub; i++) { | |
| 386 | + int index = MAX_LEN; | |
| 387 | + for (int i = 1; i < countOfSub; i++) { | |
| 318 | 388 | sub = msg.substring(index, index + MAX_LEN); |
| 319 | - printSubLog(type, tag, sub); | |
| 389 | + print(type, tag, sLogBorderSwitch ? LEFT_BORDER + sub : sub); | |
| 320 | 390 | index += MAX_LEN; |
| 321 | 391 | } |
| 322 | - printSubLog(type, tag, msg.substring(index, len)); | |
| 392 | + sub = msg.substring(index, len); | |
| 393 | + print(type, tag, sLogBorderSwitch ? LEFT_BORDER + sub : sub); | |
| 323 | 394 | } else { |
| 324 | - printSubLog(type, tag, msg); | |
| 325 | - } | |
| 326 | - if (sLogBorderSwitch) printBorder(type, tag, false); | |
| 327 | - } | |
| 328 | - | |
| 329 | - private static void printSubLog(final int type, final String tag, String msg) { | |
| 330 | - if (sLogBorderSwitch) msg = LEFT_BORDER + msg; | |
| 331 | - switch (type) { | |
| 332 | - case V: | |
| 333 | - Log.v(tag, msg); | |
| 334 | - break; | |
| 335 | - case D: | |
| 336 | - Log.d(tag, msg); | |
| 337 | - break; | |
| 338 | - case I: | |
| 339 | - Log.i(tag, msg); | |
| 340 | - break; | |
| 341 | - case W: | |
| 342 | - Log.w(tag, msg); | |
| 343 | - break; | |
| 344 | - case E: | |
| 345 | - Log.e(tag, msg); | |
| 346 | - break; | |
| 347 | - case A: | |
| 348 | - Log.wtf(tag, msg); | |
| 349 | - break; | |
| 395 | + print(type, tag, msg); | |
| 350 | 396 | } |
| 397 | + if (sLogBorderSwitch) print(type, tag, BOTTOM_BORDER); | |
| 351 | 398 | } |
| 352 | 399 | |
| 353 | - private static void printBorder(int type, String tag, boolean isTop) { | |
| 354 | - String border = isTop ? TOP_BORDER : BOTTOM_BORDER; | |
| 355 | - switch (type) { | |
| 356 | - case V: | |
| 357 | - Log.v(tag, border); | |
| 358 | - break; | |
| 359 | - case D: | |
| 360 | - Log.d(tag, border); | |
| 361 | - break; | |
| 362 | - case I: | |
| 363 | - Log.i(tag, border); | |
| 364 | - break; | |
| 365 | - case W: | |
| 366 | - Log.w(tag, border); | |
| 367 | - break; | |
| 368 | - case E: | |
| 369 | - Log.e(tag, border); | |
| 370 | - break; | |
| 371 | - case A: | |
| 372 | - Log.wtf(tag, border); | |
| 373 | - break; | |
| 400 | + private static void print(final int type, final String tag, String msg) { | |
| 401 | + Log.println(type, tag, msg); | |
| 402 | + } | |
| 403 | + | |
| 404 | + private static String addLeftBorder(String msg) { | |
| 405 | + if (!sLogBorderSwitch) return msg; | |
| 406 | + StringBuilder sb = new StringBuilder(); | |
| 407 | + String[] lines = msg.split(LINE_SEP); | |
| 408 | + for (String line : lines) { | |
| 409 | + sb.append(LEFT_BORDER).append(line).append(LINE_SEP); | |
| 374 | 410 | } |
| 411 | + return sb.toString(); | |
| 375 | 412 | } |
| 376 | 413 | |
| 377 | - private synchronized static void print2File(final String tag, final String msg) { | |
| 378 | - Date now = new Date(); | |
| 379 | - String date = new SimpleDateFormat("MM-dd", Locale.getDefault()).format(now); | |
| 380 | - final String fullPath = dir + date + ".txt"; | |
| 414 | + private static void print2File(final int type, final String tag, final String msg) { | |
| 415 | + Date now = new Date(System.currentTimeMillis()); | |
| 416 | + String format = FORMAT.format(now); | |
| 417 | + String date = format.substring(0, 5); | |
| 418 | + String time = format.substring(6); | |
| 419 | + final String fullPath = (dir == null ? defaultDir : dir) + date + ".txt"; | |
| 381 | 420 | if (!createOrExistsFile(fullPath)) { |
| 382 | 421 | Log.e(tag, "log to " + fullPath + " failed!"); |
| 383 | 422 | return; |
| 384 | 423 | } |
| 385 | - String time = new SimpleDateFormat("MM-dd HH:mm:ss.SSS ", Locale.getDefault()).format(now); | |
| 386 | 424 | StringBuilder sb = new StringBuilder(); |
| 387 | - if (sLogBorderSwitch) sb.append(TOP_BORDER).append(LINE_SEPARATOR); | |
| 388 | 425 | sb.append(time) |
| 426 | + .append(T[type - V]) | |
| 427 | + .append("/") | |
| 389 | 428 | .append(tag) |
| 390 | - .append(": ") | |
| 391 | 429 | .append(msg) |
| 392 | - .append(LINE_SEPARATOR); | |
| 393 | - if (sLogBorderSwitch) sb.append(BOTTOM_BORDER).append(LINE_SEPARATOR); | |
| 394 | - final String dateLogContent = sb.toString(); | |
| 395 | - new Thread(new Runnable() { | |
| 430 | + .append(LINE_SEP); | |
| 431 | + final String content = sb.toString(); | |
| 432 | + if (executor == null) { | |
| 433 | + executor = Executors.newSingleThreadExecutor(); | |
| 434 | + } | |
| 435 | + executor.execute(new Runnable() { | |
| 396 | 436 | @Override |
| 397 | 437 | public void run() { |
| 398 | 438 | BufferedWriter bw = null; |
| 399 | 439 | try { |
| 400 | 440 | bw = new BufferedWriter(new FileWriter(fullPath, true)); |
| 401 | - bw.write(dateLogContent); | |
| 402 | - Log.d(tag, "log to " + fullPath + " success!"); | |
| 441 | + bw.write(content); | |
| 442 | +// Log.d(tag, "log to " + fullPath + " success!"); | |
| 403 | 443 | } catch (IOException e) { |
| 404 | 444 | e.printStackTrace(); |
| 405 | 445 | Log.e(tag, "log to " + fullPath + " failed!"); |
| ... | ... | @@ -413,15 +453,11 @@ public final class LogUtils { |
| 413 | 453 | } |
| 414 | 454 | } |
| 415 | 455 | } |
| 416 | - }).start(); | |
| 456 | + }); | |
| 417 | 457 | } |
| 418 | 458 | |
| 419 | 459 | private static boolean createOrExistsFile(String filePath) { |
| 420 | - return createOrExistsFile(isSpace(filePath) ? null : new File(filePath)); | |
| 421 | - } | |
| 422 | - | |
| 423 | - private static boolean createOrExistsFile(File file) { | |
| 424 | - if (file == null) return false; | |
| 460 | + File file = new File(filePath); | |
| 425 | 461 | if (file.exists()) return file.isFile(); |
| 426 | 462 | if (!createOrExistsDir(file.getParentFile())) return false; |
| 427 | 463 | try { |
| ... | ... | @@ -445,4 +481,43 @@ public final class LogUtils { |
| 445 | 481 | } |
| 446 | 482 | return true; |
| 447 | 483 | } |
| 484 | + | |
| 485 | + public static byte[] compress(byte input[]) { | |
| 486 | + ByteArrayOutputStream bos = new ByteArrayOutputStream(); | |
| 487 | + Deflater compressor = new Deflater(1); | |
| 488 | + try { | |
| 489 | + compressor.setInput(input); | |
| 490 | + compressor.finish(); | |
| 491 | + final byte[] buf = new byte[2048]; | |
| 492 | + while (!compressor.finished()) { | |
| 493 | + int count = compressor.deflate(buf); | |
| 494 | + bos.write(buf, 0, count); | |
| 495 | + } | |
| 496 | + } finally { | |
| 497 | + compressor.end(); | |
| 498 | + } | |
| 499 | + return bos.toByteArray(); | |
| 500 | + } | |
| 501 | + | |
| 502 | + public static byte[] uncompress(byte[] input) { | |
| 503 | + ByteArrayOutputStream bos = new ByteArrayOutputStream(); | |
| 504 | + Inflater decompressor = new Inflater(); | |
| 505 | + try { | |
| 506 | + decompressor.setInput(input); | |
| 507 | + final byte[] buf = new byte[2048]; | |
| 508 | + while (!decompressor.finished()) { | |
| 509 | + int count = 0; | |
| 510 | + try { | |
| 511 | + count = decompressor.inflate(buf); | |
| 512 | + } catch (DataFormatException e) { | |
| 513 | + e.printStackTrace(); | |
| 514 | + } | |
| 515 | + bos.write(buf, 0, count); | |
| 516 | + } | |
| 517 | + } finally { | |
| 518 | + decompressor.end(); | |
| 519 | + } | |
| 520 | + return bos.toByteArray(); | |
| 521 | + } | |
| 522 | + | |
| 448 | 523 | } |
| \ No newline at end of file | ... | ... |
| ... | ... | @@ -27,6 +27,7 @@ import com.gimi.common.cinema.model.RoomStatusInfo; |
| 27 | 27 | import com.gimi.common.cinema.model.SambaMsg; |
| 28 | 28 | import com.gimi.common.cinema.utils.ActivityCollector; |
| 29 | 29 | import com.gimi.common.cinema.utils.CToast; |
| 30 | +import com.gimi.common.cinema.utils.LogUtils; | |
| 30 | 31 | import com.gimi.common.cinema.utils.OpenMMUtils; |
| 31 | 32 | import com.gimi.common.cinema.utils.SambaFileCharge; |
| 32 | 33 | import com.gimi.common.cinema.utils.Utils; |
| ... | ... | @@ -200,7 +201,7 @@ public class SmartControlService extends BaseService implements EventListener<St |
| 200 | 201 | private void openDoor() { |
| 201 | 202 | updateLastCompleteMovieInfo(); |
| 202 | 203 | presenter.getSysTime(this); |
| 203 | - Log.d("room-info", "openDoor called"); | |
| 204 | + LogUtils.d("room-info", "openDoor called"); | |
| 204 | 205 | bleBroadcastReceiver.setResponseObj(new GREENCITYBLEProtocolFactory.GREENCITYBleDataWritten() { |
| 205 | 206 | @Override |
| 206 | 207 | public void writeSuccess() { |
| ... | ... | @@ -208,14 +209,14 @@ public class SmartControlService extends BaseService implements EventListener<St |
| 208 | 209 | Toast.makeText(SmartControlService.this, "开门成功", Toast.LENGTH_SHORT).show(); |
| 209 | 210 | if (needReport) { |
| 210 | 211 | mHandler.postDelayed(reportRunnable, 10 * 1000); |
| 211 | - Log.d("room-info", "user open door ,report the open success status"); | |
| 212 | + LogUtils.d("room-info", "user open door ,report the open success status"); | |
| 212 | 213 | } |
| 213 | - Log.d("room-info", "open success"); | |
| 214 | + LogUtils.d("room-info", "open success"); | |
| 214 | 215 | } |
| 215 | 216 | |
| 216 | 217 | @Override |
| 217 | 218 | public void writeFailure(String error) { |
| 218 | - Log.d("room-info", "open failure"); | |
| 219 | + LogUtils.d("room-info", "open failure," + error.toString()); | |
| 219 | 220 | bleBroadcastReceiver.setResponseObj(null); |
| 220 | 221 | Toast.makeText(SmartControlService.this, "开门失败," + error, Toast.LENGTH_SHORT).show(); |
| 221 | 222 | } |
| ... | ... | @@ -343,7 +344,7 @@ public class SmartControlService extends BaseService implements EventListener<St |
| 343 | 344 | // } |
| 344 | 345 | break; |
| 345 | 346 | case ORDER_PLAY_COMPLETE: |
| 346 | - Log.d("room-info", messageEvent.getMessage()); | |
| 347 | + LogUtils.d("room-info", messageEvent.getMessage()); | |
| 347 | 348 | Utils.saveString(this, "oder-play-completed", new Gson().toJson(roomStatusInfo)); |
| 348 | 349 | playEndAds(); |
| 349 | 350 | break; |
| ... | ... | @@ -575,6 +576,7 @@ public class SmartControlService extends BaseService implements EventListener<St |
| 575 | 576 | |
| 576 | 577 | int durationMinutes = data.getEnd_time() - data.getNow_time(); |
| 577 | 578 | Log.d("CountService", "durationMinutes:" + durationMinutes); |
| 579 | + LogUtils.d("room-info", orderInfo.toString()); | |
| 578 | 580 | if (durationMinutes <= 1) { |
| 579 | 581 | return; |
| 580 | 582 | } |
| ... | ... | @@ -596,6 +598,7 @@ public class SmartControlService extends BaseService implements EventListener<St |
| 596 | 598 | localMovieMessages = new NewDBManager(this).queryPlayMovie(data.getFilm_hash()); |
| 597 | 599 | if (localMovieMessages == null) { |
| 598 | 600 | show("电影信息出错,找不到相关电影"); |
| 601 | + LogUtils.d("room-info", "file not exists:" + orderInfo.getData().getFilm_hash()); | |
| 599 | 602 | if (offset > 3) { |
| 600 | 603 | CToast.makeText(this, "您已迟到" + offset + "分钟,请注意把握时间,没有找到电影信息,请联系客服", 90 * 1000).show(); |
| 601 | 604 | } else { | ... | ... |
| ... | ... | @@ -10,14 +10,20 @@ import android.widget.Toast; |
| 10 | 10 | import com.gimi.common.cinema.model.MessageEvent; |
| 11 | 11 | import com.gimi.common.cinema.model.RoomInfo; |
| 12 | 12 | import com.gimi.common.cinema.utils.ActivityCollector; |
| 13 | +import com.gimi.common.cinema.utils.CToast; | |
| 14 | +import com.gimi.common.cinema.utils.LogUtils; | |
| 13 | 15 | import com.gimi.common.cinema.utils.SystemUtils; |
| 14 | 16 | import com.gimi.common.cinema.utils.Utils; |
| 15 | 17 | import com.google.gson.Gson; |
| 16 | 18 | import com.google.gson.JsonSyntaxException; |
| 17 | 19 | import com.qnbar.smc.utils.LightOperationUtils; |
| 20 | +import com.xgimi.gimicinema.activity.AdsPreVideoPlayerActivity; | |
| 18 | 21 | import com.xgimi.gimicinema.activity.MainActivity; |
| 19 | 22 | import com.xgimi.gimicinema.activity.QrCodeShowActivity; |
| 23 | +import com.xgimi.gimicinema.activity.SimpleAdsPlayer2; | |
| 20 | 24 | import com.xgimi.gimicinema.application.FangTangApplication; |
| 25 | +import com.xgimi.gimicinema.poll.PollingUtils; | |
| 26 | +import com.xgimi.gimicinema.service.CountService; | |
| 21 | 27 | import com.xgimi.smartscreen.encrypt.AuthCode; |
| 22 | 28 | import org.greenrobot.eventbus.EventBus; |
| 23 | 29 | |
| ... | ... | @@ -103,7 +109,7 @@ public class SocketService1 extends BaseService { |
| 103 | 109 | mHandler.postDelayed(this, HEART_BEAT_RATE); |
| 104 | 110 | boolean isSuccess = sendMsg(new Gson().toJson(new SocketSendMsg().contractHeartBeatMsg(testRoomSn)) + END_SYMBOL);//就发送一个HEART_BEAT_STRING过去 如果发送失败,就重新初始化一个socket |
| 105 | 111 | if (!isSuccess) { |
| 106 | - Log.d(TAG, "heart beat error restart"); | |
| 112 | + LogUtils.d(TAG, "heart beat error restart"); | |
| 107 | 113 | mHandler.removeCallbacks(heartBeatRunnable); |
| 108 | 114 | mReadThread.release(); |
| 109 | 115 | sendRegister = false; |
| ... | ... | @@ -118,12 +124,12 @@ public class SocketService1 extends BaseService { |
| 118 | 124 | @Override |
| 119 | 125 | public void run() { |
| 120 | 126 | if (ActivityCollector.getActivity(MainActivity.class) == null) { |
| 121 | - Log.d(TAG, "do start main activity"); | |
| 122 | -// Intent intent = new Intent(context, MainActivity.class); | |
| 123 | -// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); | |
| 124 | -// startActivity(intent); | |
| 127 | + LogUtils.d(TAG, "do start main activity"); | |
| 128 | + Intent intent = new Intent(context, MainActivity.class); | |
| 129 | + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); | |
| 130 | + startActivity(intent); | |
| 125 | 131 | } else { |
| 126 | - Log.d(TAG, "already start main activity"); | |
| 132 | + LogUtils.d(TAG, "already start main activity"); | |
| 127 | 133 | } |
| 128 | 134 | } |
| 129 | 135 | }; |
| ... | ... | @@ -140,13 +146,13 @@ public class SocketService1 extends BaseService { |
| 140 | 146 | super.onCreate(); |
| 141 | 147 | gson = new Gson(); |
| 142 | 148 | context = this; |
| 143 | - Log.d(TAG, "onCreate"); | |
| 149 | + LogUtils.d(TAG, "onCreate"); | |
| 144 | 150 | } |
| 145 | 151 | |
| 146 | 152 | @Override |
| 147 | 153 | public int onStartCommand(Intent intent, int flags, int startId) { |
| 148 | 154 | super.onStartCommand(intent, flags, startId); |
| 149 | - Log.d(TAG, "onStartCommand"); | |
| 155 | + LogUtils.d(TAG, "onStartCommand"); | |
| 150 | 156 | int ftTest = Utils.getInt(this, "ft-test", 0); |
| 151 | 157 | switch (ftTest) { |
| 152 | 158 | case 0: |
| ... | ... | @@ -165,25 +171,25 @@ public class SocketService1 extends BaseService { |
| 165 | 171 | |
| 166 | 172 | String roomInfoStr = Utils.getString(this, "room-info"); |
| 167 | 173 | if (!TextUtils.isEmpty(roomInfoStr)) { |
| 168 | - Log.d("room-info", "room info not null"); | |
| 174 | + LogUtils.d("room-info", "room info not null"); | |
| 169 | 175 | RoomInfo roomInfo = null; |
| 170 | 176 | try { |
| 171 | 177 | roomInfo = gson.fromJson(roomInfoStr, RoomInfo.class); |
| 172 | - Log.d("room-info", "room info room_sn update"); | |
| 178 | + LogUtils.d("room-info", "room info room_sn update"); | |
| 173 | 179 | testRoomSn = roomInfo.getData().getRoom_sn(); |
| 174 | 180 | } catch (JsonSyntaxException e) { |
| 175 | - Log.d("room-info", "room gson parse exception return"); | |
| 181 | + LogUtils.d("room-info", "room gson parse exception return"); | |
| 176 | 182 | Toast.makeText(this, "房间信息配置出错,请重新进入应用获取", Toast.LENGTH_SHORT).show(); |
| 177 | 183 | e.printStackTrace(); |
| 178 | 184 | return super.onStartCommand(intent, flags, startId); |
| 179 | 185 | } |
| 180 | 186 | } else { |
| 181 | - Log.d("room-info", "room info not exist"); | |
| 187 | + LogUtils.d("room-info", "room info not exist"); | |
| 182 | 188 | Toast.makeText(this, "没有获取到房间信息,请查看后台配置", Toast.LENGTH_SHORT).show(); |
| 183 | 189 | return super.onStartCommand(intent, flags, startId); |
| 184 | 190 | } |
| 185 | 191 | new InitSocketThread().start(); |
| 186 | - Log.d(TAG, "socket service onCreate"); | |
| 192 | + LogUtils.d(TAG, "socket service onCreate"); | |
| 187 | 193 | return START_STICKY; |
| 188 | 194 | } |
| 189 | 195 | |
| ... | ... | @@ -191,7 +197,9 @@ public class SocketService1 extends BaseService { |
| 191 | 197 | if (null == mSocket || null == mSocket.get()) { |
| 192 | 198 | return false; |
| 193 | 199 | } |
| 194 | - Log.d(TAG, "send msg:" + msg); | |
| 200 | + if (!msg.contains("20025")) { | |
| 201 | + LogUtils.d(TAG, "send msg:" + msg); | |
| 202 | + } | |
| 195 | 203 | Socket soc = mSocket.get(); |
| 196 | 204 | try { |
| 197 | 205 | if (!soc.isClosed() && !soc.isOutputShutdown()) { |
| ... | ... | @@ -202,6 +210,7 @@ public class SocketService1 extends BaseService { |
| 202 | 210 | return false; |
| 203 | 211 | } |
| 204 | 212 | } catch (IOException e) { |
| 213 | + LogUtils.d(TAG, "error" + e.getMessage()); | |
| 205 | 214 | e.printStackTrace(); |
| 206 | 215 | return false; |
| 207 | 216 | } |
| ... | ... | @@ -209,7 +218,13 @@ public class SocketService1 extends BaseService { |
| 209 | 218 | } |
| 210 | 219 | |
| 211 | 220 | private void initSocket() throws IOException {//初始化Socket |
| 212 | - Log.d(TAG, "serverHost:serverPort:" + serverHost + ":" + serverPort); | |
| 221 | + LogUtils.d(TAG, "serverHost:serverPort:" + serverHost + ":" + serverPort); | |
| 222 | + mHandler.post(new Runnable() { | |
| 223 | + @Override | |
| 224 | + public void run() { | |
| 225 | + CToast.makeText(context, "开始连接服务器", 10 * 1000).show(); | |
| 226 | + } | |
| 227 | + }); | |
| 213 | 228 | Socket so = new Socket(serverHost, serverPort); |
| 214 | 229 | mSocket = new WeakReference<>(so); |
| 215 | 230 | mReadThread = new ReadThread(so); |
| ... | ... | @@ -228,6 +243,7 @@ public class SocketService1 extends BaseService { |
| 228 | 243 | mSocket = null; |
| 229 | 244 | } |
| 230 | 245 | } catch (IOException e) { |
| 246 | + LogUtils.d(TAG, "error" + e.getMessage()); | |
| 231 | 247 | e.printStackTrace(); |
| 232 | 248 | } |
| 233 | 249 | } |
| ... | ... | @@ -240,10 +256,11 @@ public class SocketService1 extends BaseService { |
| 240 | 256 | initSocket(); |
| 241 | 257 | } catch (IOException e) { |
| 242 | 258 | e.printStackTrace(); |
| 243 | - Log.d(TAG, "init socket thread error,restart again after " + HEART_BEAT_RATE / 1000 + " seconds"); | |
| 259 | + LogUtils.d(TAG, "init socket thread error,restart again after " + HEART_BEAT_RATE / 1000 + " seconds"); | |
| 244 | 260 | try { |
| 245 | 261 | Thread.sleep(HEART_BEAT_RATE); |
| 246 | 262 | } catch (InterruptedException e1) { |
| 263 | + LogUtils.d(TAG, "error" + e1.getMessage()); | |
| 247 | 264 | e1.printStackTrace(); |
| 248 | 265 | } |
| 249 | 266 | this.run(); |
| ... | ... | @@ -272,14 +289,14 @@ public class SocketService1 extends BaseService { |
| 272 | 289 | if (null != socket) { |
| 273 | 290 | try { |
| 274 | 291 | if (!sendRegister) { |
| 275 | - Log.d(TAG, "send register mes"); | |
| 292 | + LogUtils.d(TAG, "send register mes"); | |
| 276 | 293 | SocketSendMsg ssm = new SocketSendMsg().contractRegisterMsg(testRoomSn); |
| 277 | 294 | String msg = gson.toJson(ssm) + END_SYMBOL; |
| 278 | 295 | sendMsg(msg); |
| 279 | - Log.d(TAG, "" + msg); | |
| 296 | + LogUtils.d(TAG, "" + msg); | |
| 280 | 297 | sendRegister = true; |
| 281 | 298 | } |
| 282 | - Log.d(TAG, "send register mes end"); | |
| 299 | + LogUtils.d(TAG, "send register mes end"); | |
| 283 | 300 | InputStream is = socket.getInputStream(); |
| 284 | 301 | byte[] buffer = new byte[1024 * 4]; |
| 285 | 302 | int length = 0; |
| ... | ... | @@ -288,7 +305,11 @@ public class SocketService1 extends BaseService { |
| 288 | 305 | if (length > 0) { |
| 289 | 306 | String message = new String(Arrays.copyOf(buffer, |
| 290 | 307 | length)).trim(); |
| 291 | - Log.d(TAG, "recv msg:" + message); | |
| 308 | +// if (!message.contains("9997")) { | |
| 309 | + LogUtils.d(TAG, "recv msg:" + message); | |
| 310 | +// } else { | |
| 311 | +// LogUtils.d(TAG, "heat beat success"); | |
| 312 | +// } | |
| 292 | 313 | try { |
| 293 | 314 | if (message.endsWith(END_SYMBOL)) { |
| 294 | 315 | message = message.replace(END_SYMBOL, ""); |
| ... | ... | @@ -299,16 +320,16 @@ public class SocketService1 extends BaseService { |
| 299 | 320 | Log.d(TAG, "SUCCESS_MESSAGE"); |
| 300 | 321 | break; |
| 301 | 322 | case VERIFY_SUCCESS: |
| 302 | - Log.d(TAG, "VERIFY_SUCCESS"); | |
| 323 | + LogUtils.d(TAG, "VERIFY_SUCCESS"); | |
| 303 | 324 | mHandler.post(heartBeatRunnable); |
| 304 | - Log.d(TAG, "verify success start heart beat"); | |
| 325 | + LogUtils.d(TAG, "verify success start heart beat"); | |
| 305 | 326 | break; |
| 306 | 327 | case HEART_BEAT_SUCCESS: |
| 307 | 328 | //每成功5次心跳判定是否启动main activity |
| 308 | 329 | if (++mainChargeCount == 5) { |
| 309 | 330 | mainChargeCount = 0; |
| 310 | 331 | if (ActivityCollector.getActivity(MainActivity.class) == null) { |
| 311 | - Log.d(TAG, "charge start main activity"); | |
| 332 | + LogUtils.d(TAG, "charge start main activity"); | |
| 312 | 333 | mHandler.postDelayed(startMainRunnable, 3 * 1000); |
| 313 | 334 | } |
| 314 | 335 | } |
| ... | ... | @@ -318,22 +339,22 @@ public class SocketService1 extends BaseService { |
| 318 | 339 | case HEART_BEAT_ERROR_SYMBOL: |
| 319 | 340 | case ROOM_SN_CONNECTED: |
| 320 | 341 | String msg1 = socketResponse.getCode() == HEART_BEAT_ERROR_SYMBOL ? "HEART_BEAT_ERROR_SYMBOL" : "ROOM_SN_CONNECTED"; |
| 321 | - Log.d(TAG, msg1); | |
| 342 | + LogUtils.d(TAG, msg1); | |
| 322 | 343 | mHandler.removeCallbacks(heartBeatRunnable); |
| 323 | 344 | mReadThread.release(); |
| 324 | 345 | sendRegister = false; |
| 325 | 346 | releaseLastSocket(mSocket); |
| 326 | - Log.d(TAG, msg1 + " before:" + +System.currentTimeMillis()); | |
| 347 | + LogUtils.d(TAG, msg1 + " before:" + +System.currentTimeMillis()); | |
| 327 | 348 | try { |
| 328 | 349 | Thread.sleep(10 * 1000); |
| 329 | 350 | } catch (InterruptedException e) { |
| 330 | 351 | e.printStackTrace(); |
| 331 | 352 | } |
| 332 | - Log.d(TAG, msg1 + " after:" + System.currentTimeMillis()); | |
| 353 | + LogUtils.d(TAG, msg1 + " after:" + System.currentTimeMillis()); | |
| 333 | 354 | new InitSocketThread().start(); |
| 334 | 355 | break; |
| 335 | 356 | case RETURN_VERIFY_CODE: |
| 336 | - Log.d(TAG, "RETURN_VERIFY_CODE"); | |
| 357 | + LogUtils.d(TAG, "RETURN_VERIFY_CODE"); | |
| 337 | 358 | if (!TextUtils.isEmpty(socketResponse.getData().getVerify())) { |
| 338 | 359 | String verifyMsg = AuthCode.getDecodeStr(socketResponse.getData().getVerify()); |
| 339 | 360 | SocketSendMsg ssm = new SocketSendMsg().contractVerifyMsg(testRoomSn, verifyMsg); |
| ... | ... | @@ -342,7 +363,7 @@ public class SocketService1 extends BaseService { |
| 342 | 363 | } |
| 343 | 364 | break; |
| 344 | 365 | case CONTAIN_MESSAGE: |
| 345 | - Log.d(TAG, "CONTAIN_MESSAGE"); | |
| 366 | + LogUtils.d(TAG, "CONTAIN_MESSAGE"); | |
| 346 | 367 | if (socketResponse.getData() != null) { |
| 347 | 368 | if (socketResponse.getCmd() == OPEN_DOOR) { |
| 348 | 369 | switch (socketResponse.getData().getUser()) { |
| ... | ... | @@ -362,7 +383,7 @@ public class SocketService1 extends BaseService { |
| 362 | 383 | break; |
| 363 | 384 | case 20: |
| 364 | 385 | if (TextUtils.isEmpty(((FangTangApplication) getApplication()).getCurrentPlayUrl())) { |
| 365 | - Log.d("LightOperationUtils", "admin open light"); | |
| 386 | + LogUtils.d("LightOperationUtils", "admin open light"); | |
| 366 | 387 | LightOperationUtils.open(); |
| 367 | 388 | LightOperationUtils.setLightValue(Utils.getInt(context, "brightness", 50)); |
| 368 | 389 | } |
| ... | ... | @@ -376,24 +397,39 @@ public class SocketService1 extends BaseService { |
| 376 | 397 | break; |
| 377 | 398 | } |
| 378 | 399 | } else if (socketResponse.getCmd() == CLEAN_OVER) { |
| 379 | - Log.d("LightOperationUtils", "admin clean over close light"); | |
| 400 | + LogUtils.d("LightOperationUtils", "admin clean over close light"); | |
| 380 | 401 | LightOperationUtils.setLightValue(5); |
| 381 | 402 | LightOperationUtils.close(); |
| 382 | 403 | new SystemUtils().closeFtLed(context.getApplicationContext()); |
| 383 | 404 | sendMessage(QrCodeShowActivity.KILL_SELF, "finish the QR CODE activity when clean over"); |
| 405 | + if (ActivityCollector.isActivityExist(SimpleAdsPlayer2.class)) { | |
| 406 | + ActivityCollector.getActivity(SimpleAdsPlayer2.class).finish(); | |
| 407 | + } | |
| 408 | + if (ActivityCollector.isActivityExist(AdsPreVideoPlayerActivity.class)) { | |
| 409 | + ActivityCollector.getActivity(AdsPreVideoPlayerActivity.class).finish(); | |
| 410 | + } | |
| 411 | + if (ActivityCollector.isActivityExist(QrCodeShowActivity.class)) { | |
| 412 | + ActivityCollector.getActivity(QrCodeShowActivity.class).finish(); | |
| 413 | + } | |
| 414 | + try { | |
| 415 | + PollingUtils.stopPollingService(context, CountService.class, CountService.STATUS_ACTION); | |
| 416 | + } catch (Exception e) { | |
| 417 | + e.printStackTrace(); | |
| 418 | + } | |
| 384 | 419 | } |
| 385 | 420 | } |
| 386 | 421 | break; |
| 387 | 422 | default: |
| 388 | - Log.d(TAG, "default msg:" + socketResponse.toString()); | |
| 423 | + LogUtils.d(TAG, "default msg:" + socketResponse.toString()); | |
| 389 | 424 | } |
| 390 | 425 | } catch (JsonSyntaxException e) { |
| 391 | - Log.d(TAG, message); | |
| 426 | + LogUtils.d(TAG, "error" + message + e.getMessage()); | |
| 392 | 427 | e.printStackTrace(); |
| 393 | 428 | } |
| 394 | 429 | } |
| 395 | 430 | } |
| 396 | 431 | } catch (IOException e) { |
| 432 | + LogUtils.d(TAG, "error" + e.getCause()); | |
| 397 | 433 | e.printStackTrace(); |
| 398 | 434 | } |
| 399 | 435 | } |
| ... | ... | @@ -411,9 +447,9 @@ public class SocketService1 extends BaseService { |
| 411 | 447 | |
| 412 | 448 | @Override |
| 413 | 449 | public void onDestroy() { |
| 414 | -// Log.d("BaseService1", this.getClass().toString() + ""); | |
| 450 | +// LogUtils.d("BaseService1", this.getClass().toString() + ""); | |
| 415 | 451 | // ServiceCommandCollector.removeService(this); |
| 416 | - Log.d(TAG, "socket service destroy"); | |
| 452 | + LogUtils.d(TAG, "socket service destroy"); | |
| 417 | 453 | super.onDestroy(); |
| 418 | 454 | } |
| 419 | 455 | } |
| \ No newline at end of file | ... | ... |
| ... | ... | @@ -18,16 +18,21 @@ package com.xgimi.gimicinema.activity; |
| 18 | 18 | |
| 19 | 19 | import android.app.ListActivity; |
| 20 | 20 | import android.os.Bundle; |
| 21 | +import android.text.TextUtils; | |
| 21 | 22 | import android.view.View; |
| 22 | 23 | import android.widget.ArrayAdapter; |
| 23 | 24 | import android.widget.ListView; |
| 24 | 25 | import android.widget.Toast; |
| 26 | +import com.gimi.common.cinema.model.RoomInfo; | |
| 25 | 27 | import com.gimi.common.cinema.model.SambaMsg; |
| 28 | +import com.gimi.common.cinema.utils.LogUtils; | |
| 26 | 29 | import com.gimi.common.cinema.utils.NetStatusUtils; |
| 27 | 30 | import com.gimi.common.cinema.utils.ShellUtils; |
| 28 | 31 | import com.gimi.common.cinema.utils.SystemUtils; |
| 29 | 32 | import com.gimi.common.cinema.utils.TimeoutCharge; |
| 30 | 33 | import com.gimi.common.cinema.utils.Utils; |
| 34 | +import com.google.gson.Gson; | |
| 35 | +import com.google.gson.JsonSyntaxException; | |
| 31 | 36 | import com.xgimi.gimicinema.R; |
| 32 | 37 | |
| 33 | 38 | import java.io.File; |
| ... | ... | @@ -61,6 +66,7 @@ public class CheckActivity extends ListActivity { |
| 61 | 66 | data.add("log"); |
| 62 | 67 | data.add("结束log"); |
| 63 | 68 | data.add("考出log到服务器"); |
| 69 | + data.add("考出日志文件到服务器"); | |
| 64 | 70 | return data; |
| 65 | 71 | } |
| 66 | 72 | |
| ... | ... | @@ -129,6 +135,28 @@ public class CheckActivity extends ListActivity { |
| 129 | 135 | msg = "debug.log文件不存在"; |
| 130 | 136 | } |
| 131 | 137 | break; |
| 138 | + case 6: | |
| 139 | + String roomInfoStr = Utils.getString(this, "room-info"); | |
| 140 | + if (!TextUtils.isEmpty(roomInfoStr)) { | |
| 141 | + LogUtils.d("room-info", "room info not null"); | |
| 142 | + RoomInfo roomInfo = null; | |
| 143 | + try { | |
| 144 | + roomInfo = new Gson().fromJson(roomInfoStr, RoomInfo.class); | |
| 145 | + SambaMsg sambaMsg = Utils.getSambaMsg(this); | |
| 146 | + LogUtils.d("room-info", "room info room_sn update"); | |
| 147 | + String meshName = TextUtils.isEmpty(roomInfo.getData().getMesh_name()) ? roomInfo.getData().getImei() : roomInfo.getData().getMesh_name(); | |
| 148 | + final String copy = "cp -r /sdcard/ft_log/ " + sambaMsg.getLocalPath() + "apks/" + meshName; | |
| 149 | + ShellUtils.execCommand("mkdirs " + sambaMsg.getLocalPath() + "apks/" + meshName, false); | |
| 150 | + ShellUtils.execCommand(copy, false); | |
| 151 | + msg = "正在考出"; | |
| 152 | + } catch (JsonSyntaxException e) { | |
| 153 | + LogUtils.d("room-info", "room gson parse exception return"); | |
| 154 | + msg = "房间信息配置出错"; | |
| 155 | +// Toast.makeText(this, "房间信息配置出错,请重新进入应用获取", Toast.LENGTH_SHORT).show(); | |
| 156 | + e.printStackTrace(); | |
| 157 | + } | |
| 158 | + } | |
| 159 | + break; | |
| 132 | 160 | } |
| 133 | 161 | Toast.makeText(this, msg, Toast.LENGTH_LONG).show(); |
| 134 | 162 | } | ... | ... |
| ... | ... | @@ -11,6 +11,7 @@ import android.widget.Toast; |
| 11 | 11 | import com.gimi.common.cinema.model.MessageEvent; |
| 12 | 12 | import com.gimi.common.cinema.model.RoomQrCodeInfo; |
| 13 | 13 | import com.gimi.common.cinema.model.WrongMsg; |
| 14 | +import com.gimi.common.cinema.utils.LogUtils; | |
| 14 | 15 | import com.gimi.common.cinema.utils.QRCodeUtils; |
| 15 | 16 | import com.gimi.common.cinema.utils.SystemUtils; |
| 16 | 17 | import com.google.zxing.WriterException; |
| ... | ... | @@ -44,7 +45,7 @@ public class QrCodeShowActivity extends Activity implements IUpdateQrCodeView { |
| 44 | 45 | private Runnable updateQrCodeRunnable = new Runnable() { |
| 45 | 46 | @Override |
| 46 | 47 | public void run() { |
| 47 | - Log.d("room-info", "QrCodeShowActivity update qr code runnable run"); | |
| 48 | + LogUtils.d("room-info", "QrCodeShowActivity update qr code runnable run"); | |
| 48 | 49 | handler.postDelayed(this, 10 * 60 * 1000); |
| 49 | 50 | present.getQrCode(roomSn, orderSn); |
| 50 | 51 | } |
| ... | ... | @@ -110,7 +111,7 @@ public class QrCodeShowActivity extends Activity implements IUpdateQrCodeView { |
| 110 | 111 | switch (messageEvent.getEventId()) { |
| 111 | 112 | case KILL_SELF: |
| 112 | 113 | QrCodeShowActivity.this.finish(); |
| 113 | - Log.d("room-info", messageEvent.getMessage()); | |
| 114 | + LogUtils.d("room-info", messageEvent.getMessage()); | |
| 114 | 115 | break; |
| 115 | 116 | } |
| 116 | 117 | } |
| ... | ... | @@ -118,7 +119,7 @@ public class QrCodeShowActivity extends Activity implements IUpdateQrCodeView { |
| 118 | 119 | @Override |
| 119 | 120 | public void getQrCodeSuccess(RoomQrCodeInfo info) { |
| 120 | 121 | try { |
| 121 | - Log.d("QrCodeShowActivity", info.getData().getCode()); | |
| 122 | + LogUtils.d("QrCodeShowActivity", info.getData().getCode()); | |
| 122 | 123 | iv.setImageBitmap(QRCodeUtils.createQRCode(info.getData().getCode(), 400)); |
| 123 | 124 | } catch (WriterException e) { |
| 124 | 125 | e.printStackTrace(); | ... | ... |
| ... | ... | @@ -17,6 +17,7 @@ import android.widget.VideoView; |
| 17 | 17 | import com.gimi.common.cinema.model.Constant; |
| 18 | 18 | import com.gimi.common.cinema.model.RoomQrCodeInfo; |
| 19 | 19 | import com.gimi.common.cinema.model.WrongMsg; |
| 20 | +import com.gimi.common.cinema.utils.LogUtils; | |
| 20 | 21 | import com.gimi.common.cinema.utils.QRCodeUtils; |
| 21 | 22 | import com.google.zxing.WriterException; |
| 22 | 23 | import com.xgimi.gimicinema.R; |
| ... | ... | @@ -40,7 +41,7 @@ public class SimpleAdsPlayer2 extends BaseActivity implements IUpdateQrCodeView |
| 40 | 41 | private Runnable updateQrCodeRunnable = new Runnable() { |
| 41 | 42 | @Override |
| 42 | 43 | public void run() { |
| 43 | - Log.d("room-info", "update qr code runnable run"); | |
| 44 | + LogUtils.d("room-info", "update qr code runnable run"); | |
| 44 | 45 | handler.postDelayed(this, 10 * 60 * 1000); |
| 45 | 46 | presenter.getQrCode(roomSn, orderSn); |
| 46 | 47 | } |
| ... | ... | @@ -96,13 +97,10 @@ public class SimpleAdsPlayer2 extends BaseActivity implements IUpdateQrCodeView |
| 96 | 97 | |
| 97 | 98 | @Override |
| 98 | 99 | public boolean onKeyDown(int keyCode, KeyEvent event) { |
| 99 | - if (System.currentTimeMillis() - startAdsTime < 5000) { | |
| 100 | + if (keyCode == KeyEvent.KEYCODE_BACK) { | |
| 101 | + Toast.makeText(this, "请用管理端扫描或者等待清理时间结束", Toast.LENGTH_SHORT).show(); | |
| 100 | 102 | return true; |
| 101 | 103 | } |
| 102 | - if (fromService) { | |
| 103 | - return true; | |
| 104 | - } | |
| 105 | - finish(); | |
| 106 | 104 | return super.onKeyDown(keyCode, event); |
| 107 | 105 | } |
| 108 | 106 | |
| ... | ... | @@ -132,7 +130,7 @@ public class SimpleAdsPlayer2 extends BaseActivity implements IUpdateQrCodeView |
| 132 | 130 | @Override |
| 133 | 131 | public void getQrCodeSuccess(RoomQrCodeInfo info) { |
| 134 | 132 | try { |
| 135 | - Log.d("SimpleAdsPlayer2", info.getData().getCode()); | |
| 133 | + LogUtils.d("SimpleAdsPlayer2", info.getData().getCode()); | |
| 136 | 134 | cleanQrCodeIv.setImageBitmap(QRCodeUtils.createQRCode(info.getData().getCode(), 400)); |
| 137 | 135 | qrCodeIv.setVisibility(View.VISIBLE); |
| 138 | 136 | } catch (WriterException e) { |
| ... | ... | @@ -144,4 +142,5 @@ public class SimpleAdsPlayer2 extends BaseActivity implements IUpdateQrCodeView |
| 144 | 142 | public void getQrCodeFailure(WrongMsg wrongMsg) { |
| 145 | 143 | Toast.makeText(this, wrongMsg.getMsg(), Toast.LENGTH_SHORT).show(); |
| 146 | 144 | } |
| 145 | + | |
| 147 | 146 | } |
| \ No newline at end of file | ... | ... |
| ... | ... | @@ -2,6 +2,7 @@ package com.xgimi.gimicinema.application; |
| 2 | 2 | |
| 3 | 3 | import android.util.Log; |
| 4 | 4 | import android.widget.Toast; |
| 5 | +import com.gimi.common.cinema.utils.LogUtils; | |
| 5 | 6 | import com.gimi.common.cinema.utils.Utils; |
| 6 | 7 | import com.google.gson.Gson; |
| 7 | 8 | import com.google.gson.JsonSyntaxException; |
| ... | ... | @@ -20,7 +21,8 @@ public class FangTangApplication extends TelinkApplication { |
| 20 | 21 | super.onCreate(); |
| 21 | 22 | AdvanceStrategy.setDefault(new MySampleAdvanceStrategy()); |
| 22 | 23 | // CrashHandler crashHandler = CrashHandler.getInstance(); |
| 23 | -// crashHandler.init(getApplicationContext()); | |
| 24 | +// crashHandler.init(getApplicationContext());initLog\\ | |
| 25 | + initLog(); | |
| 24 | 26 | } |
| 25 | 27 | |
| 26 | 28 | @Override |
| ... | ... | @@ -73,4 +75,21 @@ public class FangTangApplication extends TelinkApplication { |
| 73 | 75 | public void setCurrentPlayUrl(String currentPlayUrl) { |
| 74 | 76 | this.currentPlayUrl = currentPlayUrl; |
| 75 | 77 | } |
| 78 | + | |
| 79 | + public static void initLog() { | |
| 80 | + LogUtils.Builder builder = new LogUtils.Builder() | |
| 81 | + .setLogSwitch(true)// 设置log总开关,包括输出到控制台和文件,默认开 | |
| 82 | + .setConsoleSwitch(true)// 设置是否输出到控制台开关,默认开 | |
| 83 | + .setGlobalTag(null)// 设置log全局标签,默认为空 | |
| 84 | + // 当全局标签不为空时,我们输出的log全部为该tag, | |
| 85 | + // 为空时,如果传入的tag为空那就显示类名,否则显示tag | |
| 86 | + .setLogHeadSwitch(true)// 设置log头信息开关,默认为开 | |
| 87 | + .setLog2FileSwitch(true)// 打印log时是否存到文件的开关,默认关 | |
| 88 | + .setDir("/sdcard/ft_log/")// 当自定义路径为空时,写入应用的/cache/log/目录中 | |
| 89 | + .setBorderSwitch(true)// 输出日志是否带边框开关,默认开 | |
| 90 | + .setConsoleFilter(LogUtils.V)// log的控制台过滤器,和logcat过滤器同理,默认Verbose | |
| 91 | + .setFileFilter(LogUtils.V);// log文件过滤器,和logcat过滤器同理,默认Verbose | |
| 92 | + LogUtils.d(builder.toString()); | |
| 93 | + } | |
| 94 | + | |
| 76 | 95 | } | ... | ... |
| ... | ... | @@ -25,6 +25,7 @@ import android.os.RemoteException; |
| 25 | 25 | import android.util.Log; |
| 26 | 26 | import android.widget.Toast; |
| 27 | 27 | import com.gimi.common.cinema.model.MessageEvent; |
| 28 | +import com.gimi.common.cinema.utils.LogUtils; | |
| 28 | 29 | import com.gimi.common.cinema.utils.Utils; |
| 29 | 30 | import com.qnbar.smc.model.Light; |
| 30 | 31 | import com.qnbar.smc.model.Lights; |
| ... | ... | @@ -347,8 +348,9 @@ public class CinemaControlService extends Service { |
| 347 | 348 | messageEvent.setEventId(SmartControlService.ORDER_PLAY_COMPLETE); |
| 348 | 349 | messageEvent.setMessage("电影播放完成,记录完成订单信息"); |
| 349 | 350 | EventBus.getDefault().post(messageEvent); |
| 351 | + LogUtils.d("room-info", "stop media completed"); | |
| 350 | 352 | } else { |
| 351 | - Log.d("room-info", "stop media but not completed"); | |
| 353 | + LogUtils.d("room-info", "stop media but not completed"); | |
| 352 | 354 | } |
| 353 | 355 | } |
| 354 | 356 | } | ... | ... |
Please
register
or
login
to post a comment