你的位置:首页 > 操作系统

[操作系统]Android 常见工具类封装


1,MD5工具类:

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();      // 获得MD5摘要算法的 MessageDigest 对象      MessageDigest mdInst = MessageDigest.getInstance("MD5");      // 使用指定的字节更新摘要      mdInst.update(btInput);      // 获得密文      byte[] md = mdInst.digest();      // 把密文转换成十六进制的字符串形式      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,线程睡眠

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,检查网络是否连通

 /**   * 检查网络是否连通   *   * @return boolean   * @since V1.0   */  public boolean isNetworkAvailable(Context context) {    // 创建并初始化连接对象    ConnectivityManager connMan = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);    // 判断初始化是否成功并作出相应处理    if (connMan != null) {      // 调用getActiveNetworkInfo方法创建对象,如果不为空则表明网络连通,否则没连通      NetworkInfo info = connMan.getActiveNetworkInfo();      if (info != null) {        return info.isAvailable();      }    }    return false;  }

 

4,异常类捕捉

/** * UncaughtException处理类,当程序发生Uncaught异常的时候,由该类来接管程序,并记录发送错误报告. 需要在Application中注册,为了要在程序启动器就监控整个程序。 */public class CrashHandler implements UncaughtExceptionHandler {  /** TAG */  public static final String       TAG    = "CrashHandler";  /** 系统默认的UncaughtException处理类 */  private Thread.UncaughtExceptionHandler mDefaultHandler;  /** CrashHandler实例 */  private static CrashHandler       mCrashHandler;  /** 程序的Context对象 */  private Context             mContext;  /** 用来存储设备信息和异常信息 */  private Map<String, String>       infos   = new HashMap<String, String>();  /** 用于格式化日期,作为日志文件名的一部分 */  private DateFormat           formatter = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");  /**   * 私有构造函数   */  private CrashHandler() {  }  /**   * 获取CrashHandler实例 ,单例模式   *   * @return   * @since V1.0   */  public static CrashHandler getInstance() {    if (mCrashHandler == null)      mCrashHandler = new CrashHandler();    return mCrashHandler;  }  /**   * 初始化   *   * @param context   * @since V1.0   */  public void init(Context context) {    mContext = context;    // 获取系统默认的UncaughtException处理器    mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();    // 设置该CrashHandler为程序的默认处理器    Thread.setDefaultUncaughtExceptionHandler(this);  }  /**   * 当UncaughtException发生时会转入该函数来处理   */  @Override  public void uncaughtException(Thread thread, Throwable ex) {    if (!handleException(ex) && mDefaultHandler != null) {      // 如果用户没有处理则让系统默认的异常处理器来处理      mDefaultHandler.uncaughtException(thread, ex);    } else {      try {        Thread.sleep(3000);      } catch (InterruptedException e) {        CLog.e(TAG, "uncaughtException() InterruptedException:" + e);      }      // 退出程序      android.os.Process.killProcess(android.os.Process.myPid());      System.exit(1);    }  }  /**   * 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成.   *   * @param ex   * @return true:如果处理了该异常信息;否则返回false.   * @since V1.0   */  private boolean handleException(Throwable ex) {    if (ex == null) {      return false;    }    // 收集设备参数信息    collectDeviceInfo(mContext);    // 使用Toast来显示异常信息    new Thread() {      @Override      public void run() {        Looper.prepare();        Toast.makeText(mContext, "很抱歉,程序出现异常,即将退出.", Toast.LENGTH_SHORT).show();        Looper.loop();      }    }.start();    // 保存日志文件    saveCatchInfo2File(ex);    return true;  }  /**   * 收集设备参数信息   *   * @param ctx   * @since 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);      }    }  }  /**   * 保存错误信息到文件中   *   * @param ex   * @return 返回文件名称,便于将文件传送到服务器   */  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 = FilePathUtil.getiVMSDirPath() + "/crash/";        File dir = new File(path);        if (!dir.exists()) {          dir.mkdirs();        }        FileOutputStream fos = new FileOutputStream(path + fileName);        fos.write(sb.toString().getBytes());        // 发送给开发人员        sendCrashLog2PM(path + fileName);        fos.close();      }      return fileName;    } catch (Exception e) {      CLog.e(TAG, "saveCatchInfo2File() an error occured while writing file... Exception:", e);    }    return null;  }  /**   * 将捕获的导致崩溃的错误信息发送给开发人员 目前只将log日志保存在sdcard 和输出到LogCat中,并未发送给后台。   *   * @param fileName   * @since V1.0   */  private void sendCrashLog2PM(String fileName) {    if (!new File(fileName).exists()) {      CLog.e(TAG, "sendCrashLog2PM() 日志文件不存在");      return;    }    FileInputStream fis = null;    BufferedReader reader = null;    String s = null;    try {      fis = new FileInputStream(fileName);      reader = new BufferedReader(new InputStreamReader(fis, "GBK"));      while (true) {        s = reader.readLine();        if (s == null)          break;        // 由于目前尚未确定以何种方式发送,所以先打出log日志。        CLog.e(TAG, s);      }    } catch (FileNotFoundException e) {      e.printStackTrace();    } catch (IOException e) {      e.printStackTrace();    } finally { // 关闭流      try {        reader.close();        fis.close();      } catch (IOException e) {        e.printStackTrace();      }    }  }}

 

5,弹出框提醒

 public static Dialog showDialog(Context ctx, int layViewID, int ThemeType) {    Dialog res = new Dialog(ctx, ThemeType);    res.setContentView(layViewID);    return res;  }

 

 

6,图片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,提醒封装类

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