package Ġcom . workbook . li u wb . my library . utils Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . pm . Package Info Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Environment Ċ import Ġandroid . os . Looper Ċ import Ġandroid . os . Process Ċ Ċ import Ġcom . workbook . li u wb . my library . Build Config Ċ Ċ import Ġjava . io . Buffered Writer Ċ import Ġjava . io . File Ċ import Ġjava . io . FileWriter Ċ import Ġjava . io . IOException Ċ import Ġjava . io . PrintWriter Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util . Date Ċ Ċ class ĠCrash Handler Ġprivate Ġconstructor () Ġ: ĠThread . Un caught ExceptionHandler Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġun caught Exception : ĠThread . Un caught ExceptionHandler ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar ĠmContext : ĠContext ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġinit ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġun caught Exception Ġ= ĠThread . getDefault Un caught ExceptionHandler () ĊĠĠĠĠĠĠĠ ĠThread . setDefault Un caught ExceptionHandler ( this ) ĊĠĠĠĠĠĠĠ ĠmContext Ġ= Ġcontext . application Context ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è¿Ļä¸ª æĺ¯ æľĢ åħ³éĶ® çļĦ åĩ½æķ° ï¼Į å½ĵ ç¨ĭåºı ä¸Ń æľī ä¸º æį ķ èİ· çļĦ å¼Ĥå¸¸ ï¼Į ç³»ç»Ł å°Ĩ ä¼ļ èĩªåĬ¨ è°ĥçĶ¨ # unc a ught Exception æĸ¹æ³ķ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġthread ĠĠĠ Ġ åĩºçİ° æľª æį ķ èİ· å¼Ĥå¸¸ çļĦ çº¿ç¨ĭ ĊĠĠĠĠ Ġ* Ġ@ param Ġthrowable Ġ æľª æį ķ èİ· çļĦ å¼Ĥå¸¸ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġun caught Exception ( thread : ĠThread , Ġthrowable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdump Exception To SD Card ( throwable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupload Exception ToServer () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠThread () Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠL ooper . prepare () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠL ooper . loop () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ}. start () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthrowable . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ ç³»ç»Ł æıĲä¾ĽäºĨ é»ĺè®¤ çļĦ å¼Ĥå¸¸ å¤ĦçĲĨ åĻ¨ ï¼Į åĪĻ äº¤ ç»Ļ ç³»ç»Ł åİ» ç»ĵæĿŁ ç¨ĭåºı ï¼Į åĲ¦åĪĻ å°± èĩªå·± ç»ĵæĿŁ èĩªå·± ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ!= Ġun caught Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġun caught Exception !!. unc a ught Exception ( thread , Ġthrowable ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProcess . kill Process ( Process . my Pid ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĨĻåħ¥ sd card ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġthrowable ĊĠĠĠĠ Ġ* Ġ@ throws ĠIOException ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġdump Exception To SD Card ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Environment . get External Storage State () Ġ!= ĠEnvironment . MEDIA _ MOUNT ED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdir Ġ= ĠFile ( PATH ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! dir . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdir . mkdir s () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġval Ġtime Ġ= ĠSimpleDateFormat (" yyyy - MM - dd ĠHH : mm : ss "). format ( Date ( current )) ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( PATH Ġ+ ĠFILE _ NAME Ġ+ Ġtime Ġ+ ĠFILE _ NAME _ SUFFIX ) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpw Ġ= ĠPrintWriter ( Buffered Writer ( FileWriter ( file ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpw . println ( time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdump Phone Info ( pw ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpw . println () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable . printStackTrace ( pw ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpw . close () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ æīĭæľº ä¿¡æģ¯ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġpw ĊĠĠĠĠ Ġ* Ġ@ throws ĠPackage Manager . Name NotFoundException ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( PackageManager . Name NotFoundException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġdump Phone Info ( pw : ĠPrintWriter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpm Ġ= ĠmContext !!. package Manager ĊĠĠĠĠĠĠĠ Ġval Ġpi Ġ= Ġpm . get Package Info ( mContext !!. packageName , ĠPackage Manager . GET _ ACTIV ITIES ) ĊĠĠĠĠĠĠĠ Ġpw . print (" App ĠVersion : Ġ") ĊĠĠĠĠĠĠĠ Ġpw . print ( pi . version Name ) ĊĠĠĠĠĠĠĠ Ġpw . print ("_ ") ĊĠĠĠĠĠĠĠ Ġpw . println ( pi . version Code ) ĊĊĠĠĠĠĠĠĠ Ġpw . print (" OS ĠVersion : Ġ") ĊĠĠĠĠĠĠĠ Ġpw . print ( Build . VERSION . RELEASE ) ĊĠĠĠĠĠĠĠ Ġpw . print ("_ ") ĊĠĠĠĠĠĠĠ Ġpw . println ( Build . VERSION . SDK _ INT ) ĊĊĠĠĠĠĠĠĠ Ġpw . print (" Vendor : Ġ") ĊĠĠĠĠĠĠĠ Ġpw . println ( Build . MAN U FACT UR ER ) ĊĊĠĠĠĠĠĠĠ Ġpw . print (" Model : Ġ") ĊĠĠĠĠĠĠĠ Ġpw . println ( Build . MODEL ) ĊĊĠĠĠĠĠĠĠ Ġpw . print (" CPU ĠABI : Ġ") ĊĠĠĠĠĠĠĠ Ġpw . println ( Build . CPU _ ABI ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ä¸Ĭä¼ł æľįåĬ¡åĻ¨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġupload Exception ToServer () Ġ{} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" Crash Handler " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDEBUG Ġ= ĠBuild Config . DEBUG ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠPATH Ġ= ĠEnvironment . get External Storage Directory (). path Ġ+ Ġ"/ workbook / log /" ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠFILE _ NAME Ġ= Ġ" crash " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠFILE _ NAME _ SUFFIX Ġ= Ġ". txt " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġs Instance Ġ= ĠCrash Handler () ĊĊĠĠĠĠĠĠĠ Ġfun Ġgets Instance (): ĠCrash Handler Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġs Instance ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ