安卓开发常用的工具类

来源:互联网 发布:匿名举报网络诈骗 编辑:程序博客网 时间:2024/06/05 14:10
 最近一直在忙项目,今天终于抽出时间来总结一下。下面吧自己觉得挺常用的一些工具类贴出来总结一下、分享一下。其中有在网上找的也有自己写的也有自己改的。

1.登录注册时验证手机号是否合法
/**
* Created by liuzongxin on 2015/11/14.
*/
public class CommonUtils {
private static Gson mGson;
private static final String GSON_FORMAT = “yyyy-MM-dd HH:mm:ss”;
public static SimpleDateFormat formatDate = new SimpleDateFormat(“yyyy-MM-dd”, Locale.getDefault());
public static SimpleDateFormat formatDay = new SimpleDateFormat(“d”, Locale.getDefault());
public static SimpleDateFormat formatMonthDay = new SimpleDateFormat(“M-d”, Locale.getDefault());
public static SimpleDateFormat formatDateTime = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”, Locale.getDefault());

/** * 中国移动拥有号码段为:134 135 136 137 138 139 147 150 151 152 157 158 159 178 182 183 184 187 188 * 19个号段 中国联通拥有号码段为:130 131 132 145 155 156 175 176 185 186;10个号段 * 中国电信拥有号码段为:133 153 177 180 181 189;6个号码段 * 虚拟运营商:170 */private static String regMobileStr = "^1(([3][456789])|([4][7])|([5][012789])|([7][8])|([8][23478]))[0-9]{8}$";private static String regUnicomStr = "^1(([3][012])|([4][5])|([5][56])|([7][5])|([8][56]))[0-9]{8}$";private static String regTelecomStr = "^1(([3][3])|([5][3])|([7][07])|([8][019]))[0-9]{8}$";private CommonUtils() {}/** * return if str is empty * * @param str * @return */public static boolean isEmpty(String str) {    if (str == null || str.length() == 0 || str.equalsIgnoreCase("null") || str.isEmpty() || str.equals("")) {        return true;    } else {        return false;    }}/** * 验证手机号是否合法 * * @param mobile * @return */public static boolean isMobileLawful(String mobile) {    if (!isEmpty(mobile)) {        /** */        /** 第一步判断中国移动 */        if (mobile.matches(CommonUtils.regMobileStr)) {            return true;        }        /** */        /** 第二步判断中国联通 */        if (mobile.matches(CommonUtils.regUnicomStr)) {            return true;        }        /** */        /** 第三步判断中国电信 */        if (mobile.matches(CommonUtils.regTelecomStr)) {            return true;        }    }    return false;}/** * 验证json合法性 * * @param jsonContent * @return */public static boolean isJsonFormat(String jsonContent) {    try {        new JsonParser().parse(jsonContent);        return true;    } catch (JsonParseException e) {        return false;    }}/** * 格式化日期 * * @param date * @return 年月日 */public static String formatDate(Date date) {    return formatDate.format(date);}/** * 格式化日期 * * @param date * @return 年月日 时分秒 */public static String formatDateTime(Date date) {    return formatDateTime.format(date);}/** * 将时间戳解析成日期 * * @param timeInMillis * @return 年月日 */public static String parseDate(long timeInMillis) {    Calendar calendar = Calendar.getInstance();    calendar.setTimeInMillis(timeInMillis);    Date date = calendar.getTime();    return formatDate(date);}/** * 将时间戳解析成日期 * * @param timeInMillis * @return 年月日 时分秒 */public static String parseDateTime(long timeInMillis) {    Calendar calendar = Calendar.getInstance();    calendar.setTimeInMillis(timeInMillis);    Date date = calendar.getTime();    return formatDateTime(date);}/** * 解析日期 * * @param date * @return */public static Date parseDate(String date) {    Date mDate = null;    try {        mDate = formatDate.parse(date);    } catch (ParseException e) {        e.printStackTrace();    }    return mDate;}/** * 解析日期 * * @param datetime * @return */public static Date parseDateTime(String datetime) {    Date mDate = null;    try {        mDate = formatDateTime.parse(datetime);    } catch (ParseException e) {        e.printStackTrace();    }    return mDate;}/** * 对指定字符串进行md5加密 * * @param s * @return 加密后的数据 */public static String EncryptMD5(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) {        e.printStackTrace();        return null;    }}/** * 判断email格式是否正确 * * @param email * @return */public static boolean isEmail(String email) {    String str = "^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$";    Pattern p = Pattern.compile(str);    Matcher m = p.matcher(email);    return m.matches();}/** * 根据系统语言判断是否为中国 * * @return */public static boolean isZh() {    Locale locale = BaseApp.getInstance().getResources().getConfiguration().locale;    String language = locale.getLanguage();    if (language.startsWith("zh")) {        return true;    } else {        return false;    }}/** * Try to return the absolute file path from the given Uri * * @param context * @param uri * @return the file path or null */public static String getRealFilePath(final Context context, final Uri uri) {    if (null == uri) return null;    final String scheme = uri.getScheme();    String data = null;    if (scheme == null)        data = uri.getPath();    else if (ContentResolver.SCHEME_FILE.equals(scheme)) {        data = uri.getPath();    } else if (ContentResolver.SCHEME_CONTENT.equals(scheme)) {        Cursor cursor = context.getContentResolver().query(uri, new String[]{MediaStore.Images.ImageColumns.DATA}, null, null, null);        if (null != cursor) {            if (cursor.moveToFirst()) {                int index = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);                if (index > -1) {                    data = cursor.getString(index);                }            }            cursor.close();        }    }    return data;}/** * 获取gson对象 * * @return */public static Gson getGson() {    if (mGson == null) {        mGson = new GsonBuilder().setDateFormat(GSON_FORMAT).create(); // 创建gson对象,并设置日期格式    }    return mGson;}/** * 调用震动器 * * @param context      调用该方法的Context * @param milliseconds 震动的时长,单位是毫秒 */public static void vibrate(final Context context, long milliseconds) {    Vibrator vib = (Vibrator) context.getSystemService(Service.VIBRATOR_SERVICE);    vib.vibrate(milliseconds);}/** * 调用震动器 * * @param context  调用该方法的Context * @param pattern  自定义震动模式 。数组中数字的含义依次是[静止时长,震动时长,静止时长,震动时长。。。]时长的单位是毫秒 * @param isRepeat 是否反复震动,如果是true,反复震动,如果是false,只震动一次 */public static void vibrate(final Context context, long[] pattern, boolean isRepeat) {    Vibrator vib = (Vibrator) context.getSystemService(Service.VIBRATOR_SERVICE);    vib.vibrate(pattern, isRepeat ? 1 : -1);}/** * 播放音乐 * * @param context */public static void playMusic(Context context) {    MediaPlayer mp = MediaPlayer.create(context, R.raw.beep);    mp.setAudioStreamType(AudioManager.STREAM_MUSIC);    mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {        @Override        public void onPrepared(MediaPlayer mediaPlayer) {            mediaPlayer.start();        }    });    mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {        @Override        public void onCompletion(MediaPlayer mediaPlayer) {            mediaPlayer.release();        }    });}/** * 获取联系人电话 * * @param cursor * @return */private String getContactPhone(Context context, Cursor cursor) {    int phoneColumn = cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);    int phoneNum = cursor.getInt(phoneColumn);    String phoneResult = "";    //System.out.print(phoneNum);    if (phoneNum > 0) {        // 获得联系人的ID号        int idColumn = cursor.getColumnIndex(ContactsContract.Contacts._ID);        String contactId = cursor.getString(idColumn);        // 获得联系人的电话号码的cursor;        Cursor phones = context.getContentResolver().query(                ContactsContract.CommonDataKinds.Phone.CONTENT_URI,                null,                ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId,                null, null);        //int phoneCount = phones.getCount();        //allPhoneNum = new ArrayList<String>(phoneCount);        if (phones.moveToFirst()) {            // 遍历所有的电话号码            for (; !phones.isAfterLast(); phones.moveToNext()) {                int index = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);                int typeindex = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE);                int phone_type = phones.getInt(typeindex);                String phoneNumber = phones.getString(index);                switch (phone_type) {                    case 2:                        phoneResult = phoneNumber;                        break;                }                //allPhoneNum.add(phoneNumber);            }            if (!phones.isClosed()) {                phones.close();            }        }    }    return phoneResult;}/** * 判断email格式是否正确 * * @param s * @return */public static boolean digital(CharSequence s) {    String str = "^[0-9]*$";    Pattern p = Pattern.compile(str);    Matcher m = p.matcher(s);    return m.matches();}

}
2.对于安卓用户,单位换算经常遇到。挺鸡肋的,还是总结一下吧。
public class DensityUtils {

private static final float DOT_FIVE = 0.5f;/** * dip to px * * @param context * @param dip * @return */public static int dip2px(Context context, float dip) {    float density = getDensity(context);    return (int) (dip * density + DensityUtils.DOT_FIVE);}/** * px to dip * * @param context * @param px * @return */public static int px2dip(Context context, float px) {    float density = getDensity(context);    return (int) (px / density + DOT_FIVE);}private static DisplayMetrics sDisplayMetrics;/** * get screen width * * @param context * @return */public static int getDisplayWidth(Context context) {    initDisplayMetrics(context);    return sDisplayMetrics.widthPixels;}/** * get screen height * * @param context * @return */public static int getDisplayHeight(Context context) {    initDisplayMetrics(context);    return sDisplayMetrics.heightPixels;}/** * get screen density * * @param context * @return */public static float getDensity(Context context) {    initDisplayMetrics(context);    return sDisplayMetrics.density;}/** * get screen density dpi * * @param context * @return */public static int getDensityDpi(Context context) {    initDisplayMetrics(context);    return sDisplayMetrics.densityDpi;}/** * init display metrics * * @param context */private static synchronized void initDisplayMetrics(Context context) {    sDisplayMetrics = context.getResources().getDisplayMetrics();}/** * is landscape * * @param context * @return */public static boolean isLandscape(Context context) {    return context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;}/** * is portrait * * @param context * @return */public static boolean isPortrait(Context context) {    return context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT;}

}
3.圆头像这个遇见的太多了,必须分享下,直接使用(最好用android:src属性)就行什么都不用配置。
public class CircleImageView extends ImageView {

private static final ScaleType SCALE_TYPE = ScaleType.CENTER_CROP;private static final Bitmap.Config BITMAP_CONFIG = Bitmap.Config.ARGB_8888;private static final int COLORDRAWABLE_DIMENSION = 2;private static final int DEFAULT_BORDER_WIDTH = 0;private static final int DEFAULT_BORDER_COLOR = Color.BLACK;private final RectF mDrawableRect = new RectF();private final RectF mBorderRect = new RectF();private final Matrix mShaderMatrix = new Matrix();private final Paint mBitmapPaint = new Paint();private final Paint mBorderPaint = new Paint();private int mBorderColor = DEFAULT_BORDER_COLOR;private int mBorderWidth = DEFAULT_BORDER_WIDTH;private Bitmap mBitmap;private BitmapShader mBitmapShader;private int mBitmapWidth;private int mBitmapHeight;private float mDrawableRadius;private float mBorderRadius;private ColorFilter mColorFilter;private boolean mReady;private boolean mSetupPending;public CircleImageView(Context context) {    super(context);    init();}public CircleImageView(Context context, AttributeSet attrs) {    this(context, attrs, 0);}public CircleImageView(Context context, AttributeSet attrs, int defStyle) {    super(context, attrs, defStyle);    TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CircleImageView, defStyle, 0);    mBorderWidth = a.getDimensionPixelSize(R.styleable.CircleImageView_border_width, DEFAULT_BORDER_WIDTH);    mBorderColor = a.getColor(R.styleable.CircleImageView_border_color, DEFAULT_BORDER_COLOR);    a.recycle();    init();}private void init() {    super.setScaleType(SCALE_TYPE);    mReady = true;    if (mSetupPending) {        setup();        mSetupPending = false;    }}@Overridepublic ScaleType getScaleType() {    return SCALE_TYPE;}@Overridepublic void setScaleType(ScaleType scaleType) {    if (scaleType != SCALE_TYPE) {        throw new IllegalArgumentException(String.format("ScaleType %s not supported.", scaleType));    }}@Overridepublic void setAdjustViewBounds(boolean adjustViewBounds) {    if (adjustViewBounds) {        throw new IllegalArgumentException("adjustViewBounds not supported.");    }}@Overrideprotected void onDraw(Canvas canvas) {    if (getDrawable() == null) {        return;    }    canvas.drawCircle(getWidth() / 2, getHeight() / 2, mDrawableRadius, mBitmapPaint);    if (mBorderWidth != 0) {        canvas.drawCircle(getWidth() / 2, getHeight() / 2, mBorderRadius, mBorderPaint);    }}@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {    super.onSizeChanged(w, h, oldw, oldh);    setup();}public int getBorderColor() {    return mBorderColor;}public void setBorderColor(int borderColor) {    if (borderColor == mBorderColor) {        return;    }    mBorderColor = borderColor;    mBorderPaint.setColor(mBorderColor);    invalidate();}public int getBorderWidth() {    return mBorderWidth;}public void setBorderWidth(int borderWidth) {    if (borderWidth == mBorderWidth) {        return;    }    mBorderWidth = borderWidth;    setup();}@Overridepublic void setImageBitmap(Bitmap bm) {    super.setImageBitmap(bm);    mBitmap = bm;    setup();}@Overridepublic void setImageDrawable(Drawable drawable) {    super.setImageDrawable(drawable);    mBitmap = getBitmapFromDrawable(drawable);    setup();}@Overridepublic void setImageResource(int resId) {    super.setImageResource(resId);    mBitmap = getBitmapFromDrawable(getDrawable());    setup();}@Overridepublic void setImageURI(Uri uri) {    super.setImageURI(uri);    mBitmap = getBitmapFromDrawable(getDrawable());    setup();}@Overridepublic void setColorFilter(ColorFilter cf) {    if (cf == mColorFilter) {        return;    }    mColorFilter = cf;    mBitmapPaint.setColorFilter(mColorFilter);    invalidate();}private Bitmap getBitmapFromDrawable(Drawable drawable) {    if (drawable == null) {        return null;    }    if (drawable instanceof BitmapDrawable) {        return ((BitmapDrawable) drawable).getBitmap();    }    try {        Bitmap bitmap;        if (drawable instanceof ColorDrawable) {            bitmap = Bitmap.createBitmap(COLORDRAWABLE_DIMENSION, COLORDRAWABLE_DIMENSION, BITMAP_CONFIG);        } else {            bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), BITMAP_CONFIG);        }        Canvas canvas = new Canvas(bitmap);        drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());        drawable.draw(canvas);        return bitmap;    } catch (OutOfMemoryError e) {        return null;    }}private void setup() {    if (!mReady) {        mSetupPending = true;        return;    }    if (mBitmap == null) {        return;    }    mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);    mBitmapPaint.setAntiAlias(true);    mBitmapPaint.setShader(mBitmapShader);    mBorderPaint.setStyle(Paint.Style.STROKE);    mBorderPaint.setAntiAlias(true);    mBorderPaint.setColor(mBorderColor);    mBorderPaint.setStrokeWidth(mBorderWidth);    mBitmapHeight = mBitmap.getHeight();    mBitmapWidth = mBitmap.getWidth();    mBorderRect.set(0, 0, getWidth(), getHeight());    mBorderRadius = Math.min((mBorderRect.height() - mBorderWidth) / 2, (mBorderRect.width() - mBorderWidth) / 2);    mDrawableRect.set(mBorderWidth, mBorderWidth, mBorderRect.width() - mBorderWidth, mBorderRect.height() - mBorderWidth);    mDrawableRadius = Math.min(mDrawableRect.height() / 2, mDrawableRect.width() / 2);    updateShaderMatrix();    invalidate();}private void updateShaderMatrix() {    float scale;    float dx = 0;    float dy = 0;    mShaderMatrix.set(null);    if (mBitmapWidth * mDrawableRect.height() > mDrawableRect.width() * mBitmapHeight) {        scale = mDrawableRect.height() / (float) mBitmapHeight;        dx = (mDrawableRect.width() - mBitmapWidth * scale) * 0.5f;    } else {        scale = mDrawableRect.width() / (float) mBitmapWidth;        dy = (mDrawableRect.height() - mBitmapHeight * scale) * 0.5f;    }    mShaderMatrix.setScale(scale, scale);    mShaderMatrix.postTranslate((int) (dx + 0.5f) + mBorderWidth, (int) (dy + 0.5f) + mBorderWidth);    mBitmapShader.setLocalMatrix(mShaderMatrix);}

}
别忘了在attrs中添加自定义属性:


    <attr name="border_width" format="dimension" />    <attr name="border_color" format="color" /></declare-styleable>

4.这个大家都知道,日期转换。但是“23十月2015”这种格式的是不是很少见。
/*****************************************************************************************
* function: 日期工具类:将util.Date日期转换成大写日期格式
* @project web
* @package base.datetime
* @fileName DateUtils.java
*/

import java.util.Calendar;
import java.util.Date;

public class DateUtils {
// 日期转化为大小写
public static String dataToUpper(Date date) {
Calendar ca = Calendar.getInstance();
ca.setTime(date);
int year = ca.get(Calendar.YEAR);
int month = ca.get(Calendar.MONTH) + 1;
int day = ca.get(Calendar.DAY_OF_MONTH);
return day+” “+monthToUppder(month) + “月” +” “+year;
}

/*** * <b>function:</b> 将数字转化为大写 * @param num 数字 * @return 转换后的大写数字 */public static String numToUpper(int num) {    // String u[] = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};    String u[] = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};    //String u[] = {"○", "一", "二", "三", "四", "五", "六", "七", "八", "九"};    char[] str = String.valueOf(num).toCharArray();    String rstr = "";    for (int i = 0; i < str.length; i++) {        rstr = rstr + u[Integer.parseInt(str[i] + "")];    }    return rstr;}/*** * <b>function:</b> 月转化为大写 * @param month 月份 * @return 返回转换后大写月份 */public static String monthToUppder(int month) {    if (month < 10) {        return numToUpper(month);    } else if (month == 10) {        return "十";    } else {        return "十" + numToUpper(month - 10);    }}/*** * <b>function:</b> 日转化为大写 * @param day 日期 * @return 转换大写的日期格式 */public static String dayToUppder(int day) {    if (day < 20) {        return monthToUppder(day);    } else {        char[] str = String.valueOf(day).toCharArray();        if (str[1] == '0') {            return numToUpper(Integer.parseInt(str[0] + "")) + "十";        } else {            return numToUpper(Integer.parseInt(str[0] + "")) + "十" + numToUpper(Integer.parseInt(str[1] + ""));        }    }}public static void main(String[] args) {    System.out.println(DateUtils.dataToUpper(new Date()));}

}
5.保存图片到本地(之前的博客也写过。不过据说这种方法不能适配所有安卓机型,但是目前为止我还没有遇见不适配的所以一直在用)
public class SaveImage {
/**
* 保存文件
* @param bm
* @param fileName
* @throws IOException
*/
public static void saveFile(Bitmap bm, String fileName) throws IOException {
String path = getSDPath() +”/fashion/”;
File dirFile = new File(path);
if(!dirFile.exists()){
dirFile.mkdir();
}
File myCaptureFile = new File(path + fileName);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile));
bm.compress(Bitmap.CompressFormat.JPEG, 60, bos);
bos.flush();
bos.close();
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri uri = Uri.fromFile(dirFile);
intent.setData(uri);
APP.getInstance().sendBroadcast(intent);
}
public static String getSDPath(){
File sdDir = null;
boolean sdCardExist = Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED); //判断sd卡是否存在
if (sdCardExist)
{
sdDir = Environment.getExternalStorageDirectory();//获取跟目录
}
return sdDir.toString();
}
/**
* return a bitmap from service
* @param url
* @return bitmap type
*/
public final static Bitmap returnBitMap(String url) {
URL myFileUrl = null;
Bitmap bitmap = null;

    try {        myFileUrl = new URL(url);        HttpURLConnection conn;        conn = (HttpURLConnection) myFileUrl.openConnection();        conn.setDoInput(true);        conn.connect();        InputStream is = conn.getInputStream();        bitmap = BitmapFactory.decodeStream(is);    } catch (MalformedURLException e) {        // TODO Auto-generated catch block        e.printStackTrace();    }  catch (IOException e) {        // TODO Auto-generated catch block        e.printStackTrace();    }    return bitmap;}

}

0 0
原创粉丝点击