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

    }

 

你可能感兴趣的:(android)