Android common tool encapsulation and android tool Encapsulation
1. MD5 tool class:
Public class MD5Util {public final static String MD5 (String s) {char hexDigits [] = {'0', '1', '2', '3', '4 ', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E ', 'F'}; try {byte [] btInput = s. getBytes (); // The MessageDigest object that obtains the MD5 Digest algorithm. MessageDigest mdInst = MessageDigest. getInstance ("MD5"); // use the specified byte to update the abstract mdInst. update (btInput); // obtain the ciphertext byte [] md = mdInst. digest (); // converts the ciphertext to a hexadecimal string in the form of int j = md. length; char str [] = new char [j * 2]; int k = 0; for (int I = 0; I <j; I ++) {byte byte0 = md [I]; str [k ++] = hexDigits [byte0 >>> 4 & 0xf]; str [k ++] = hexDigits [byte0 & 0xf];} return new String (str) ;}catch (Exception e) {return null ;}} public static void main (String [] args) {System. out. print (MD5Util. MD5 ("password "));}}
2. Thread sleep
public class CSleep { public static final long DEFAULT_SLEEP_TIME = 500; private boolean isRuning = false; public boolean isRuning() { return isRuning; } public void runWithTime(final long defaultSleepTime) { isRuning = true; new Thread() { @Override public void run() { try { sleep(defaultSleepTime, 0); } catch (InterruptedException e) { e.printStackTrace(); } isRuning = false; super.run(); } }.start(); }}
3. Check whether the network is connected.
/*** Check whether the network is connected ** @ return boolean * @ since V1.0 */public boolean isNetworkAvailable (Context context) {// create and initialize the connection object ConnectivityManager connMan = (ConnectivityManager) context. getSystemService (Context. CONNECTIVITY_SERVICE); // determines whether the initialization is successful and processes it accordingly. if (connMan! = Null) {// call the getActiveNetworkInfo method to create an object. if it is not null, the network is connected. Otherwise, the NetworkInfo info = connMan. getActiveNetworkInfo (); if (info! = Null) {return info. isAvailable () ;}} return false ;}
4. Exception capture
/*** UncaughtException processing class. When an Uncaught exception occurs in a program, this class takes over the program and records the error report. you need to register in the Application, in order to monitor the entire program in the program initiator. */Public class CrashHandler implements UncaughtExceptionHandler {/** TAG */public static final String TAG = "CrashHandler";/** system default UncaughtException processing class */private Thread. uncaughtExceptionHandler mDefaultHandler;/** CrashHandler instance */private static CrashHandler mCrashHandler;/** Context object of the Program */private Context mContext; /** stores device information and exception information */private Map <String, String> infos = new HashMap <Stri Ng, String> ();/** used to format a date, as part of the log file name */private DateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd-HH-mm-ss "); /*** private constructor */private CrashHandler () {}/ *** get the CrashHandler instance, singleton mode ** @ return * @ since V1.0 */public static CrashHandler getInstance () {if (mCrashHandler = null) mCrashHandler = new CrashHandler (); return mCrashHandler ;} /*** initialize ** @ param context * @ since V1.0 */publi C void init (Context context) {mContext = context; // obtain the default UncaughtException processor mDefaultHandler = Thread. getDefaultUncaughtExceptionHandler (); // sets the CrashHandler as the default processor Thread of the program. setDefaultUncaughtExceptionHandler (this);}/*** when UncaughtException occurs, it will be transferred to this function for processing */@ Override public void uncaughtException (Thread thread, Throwable ex) {if (! HandleException (ex) & mDefaultHandler! = Null) {// if the user does not process the mDefaultHandler, the system's default exception processor is used to process the mDefaultHandler. uncaughtException (thread, ex);} else {try {Thread. sleep (3000);} catch (InterruptedException e) {CLog. e (TAG, "uncaughtException () InterruptedException:" + e);} // exit the android program. OS. process. killProcess (android. OS. process. myPid (); System. exit (1) ;}/ *** custom error handling, collecting error information, and sending error reports are all completed here. ** @ param ex * @ return true: If the exception information is processed, false is returned. * @ sinc E V1.0 */private boolean handleException (Throwable ex) {if (ex = null) {return false;} // collect device parameter information collectDeviceInfo (mContext ); // use Toast to display the exception information new Thread () {@ Override public void run () {Looper. prepare (); Toast. makeText (mContext, "Sorry, the program encountered an exception and is about to exit. ", Toast. LENGTH_SHORT ). show (); logoff. loop ();}}. start (); // Save the log file saveCatchInfo2File (ex); return true;}/*** collect device parameter information ** @ param ctx * @ sin Ce V1.0 */public void collectDeviceInfo (Context ctx) {try {PackageManager pm = ctx. getPackageManager (); PackageInfo pi = pm. getPackageInfo (ctx. getPackageName (), PackageManager. GET_ACTIVITIES); if (pi! = Null) {String versionName = pi. versionName = null? "Null": pi. versionName; String versionCode = pi. versionCode + ""; infos. put ("versionName", versionName); infos. put ("versionCode", versionCode) ;}} catch (NameNotFoundException e) {CLog. e (TAG, "collectDeviceInfo () an error occured when collect package info NameNotFoundException:", e);} Field [] fields = Build. class. getDeclaredFields (); for (Field field: fields) {try {field. setAccessible (true); Infos. put (field. getName (), field. get (null ). toString (); CLog. d (TAG, field. getName () + ":" + field. get (null);} catch (Exception e) {CLog. e (TAG, "collectDeviceInfo () an error occured when collect crash info Exception:", e );}}} /*** Save the error message to the file ** @ param ex * @ return returns the file name, which is convenient for transferring the file to the server */private String saveCatchInfo2File (Throwable ex) {StringBuffer sb = new StringBuffer (); for (Map. entry <String, String> entry: infos. entrySet () {String key = entry. getKey (); String value = entry. getValue (); sb. append (key + "=" + value + "\ n");} Writer writer = new StringWriter (); PrintWriter printWriter = new PrintWriter (writer); ex. printStackTrace (printWriter); Throwable cause = ex. getCause (); while (cause! = Null) {cause. printStackTrace (printWriter); cause = cause. getCause ();} printWriter. close (); String result = writer. toString (); sb. append (result); try {long timestamp = System. currentTimeMillis (); String time = formatter. format (new Date (); String fileName = "crash-" + time + "-" + timestamp + ". log "; if (Environment. getExternalStorageState (). equals (Environment. MEDIA_MOUNTED) {String path = Fi LePathUtil. getiVMSDirPath () + "/crash/"; File dir = new File (path); if (! Dir. exists () {dir. mkdirs ();} FileOutputStream fos = new FileOutputStream (path + fileName); fos. write (sb. toString (). getBytes (); // send it to the developer sendCrashLog2PM (path + fileName); fos. close () ;}return fileName;} catch (Exception e) {CLog. e (TAG, "saveCatchInfo2File () an error occured while writing file... exception: ", e);} return null ;} /*** send the captured crash-caused error messages to developers. Currently, only log logs are saved in sdcard and output to LogCat, but not sent. To the background. ** @ Param fileName * @ since V1.0 */private void sendCrashLog2PM (String fileName) {if (! New File (fileName ). exists () {CLog. e (TAG, "sendCrashLog2PM () log file does not exist"); return;} FileInputStream FCM = null; BufferedReader reader = null; String s = null; try {FCM = new FileInputStream (fileName); reader = new BufferedReader (new InputStreamReader (FCM, "GBK"); while (true) {s = reader. readLine (); if (s = null) break; // log is output first because the method for sending is not determined yet. CLog. e (TAG, s) ;}} catch (FileNotFoundException e) {e. printStackTrace ();} catch (IOException e) {e. printStackTrace ();} finally {// close the stream try {reader. close (); FCM. close ();} catch (IOException e) {e. printStackTrace ();}}}}
5. Pop-up box reminder
public static Dialog showDialog(Context ctx, int layViewID, int ThemeType) { Dialog res = new Dialog(ctx, ThemeType); res.setContentView(layViewID); return res; }
6. Image API
public class ImageAPI { public static Bitmap getImageByFilePath(String filePath, int scale) { Bitmap res = null; BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFile(filePath, options); options.inJustDecodeBounds = false; options.inSampleSize = scale; options.inPreferredConfig = Bitmap.Config.ARGB_4444; return res; } public static Bitmap getImageByFilePath(String filePath, int Towidth, int ToHeight) { Bitmap res = null; BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; if (!new File(filePath).exists()) return res; BitmapFactory.decodeFile(filePath, options); int origionalWidth = options.outHeight; int origionalHeight = options.outWidth; options.inJustDecodeBounds = false; int scale = Math.max(origionalWidth / Towidth, origionalHeight / ToHeight); options.inSampleSize = scale; options.inPreferredConfig = Bitmap.Config.ARGB_4444; try { res = BitmapFactory.decodeFile(filePath, options); } catch (Exception e) { e.printStackTrace(); return null; } catch (OutOfMemoryError e) { e.printStackTrace(); return null; } return res; }}
10. Reminder encapsulation class
public static void showToast(Context ctx, int id, String str) { if (str == null) { return; } Toast toast = Toast.makeText(ctx, ctx.getString(id) + str, Toast.LENGTH_SHORT); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); } public static void showToast(Context ctx, String errInfo) { if (errInfo == null) { return; } Toast toast = Toast.makeText(ctx, errInfo, Toast.LENGTH_SHORT); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); }