android开发各种工具类
程序员文章站
2024-01-14 09:06:34
...
1.Bitmap有关处理
package ren.solid.library.utils;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.media.ExifInterface;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileDescriptor;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* 与Bitmap有关的工具类
*/
public class BitmapUtils {
/**
* 获取图片的旋转角度
*
* @param path 图片绝对路径
* @return 图片的旋转角度
*/
private int getBitmapDegree(String path) {
int degree = 0;
try {
// 从指定路径下读取图片,并获取其EXIF信息
ExifInterface exifInterface = new ExifInterface(path);
// 获取图片的旋转信息
int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
degree = 90;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
degree = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_270:
degree = 270;
break;
}
} catch (IOException e) {
e.printStackTrace();
}
return degree;
}
/**
* 将图片按照指定的角度进行旋转
*
* @param bitmap 需要旋转的图片
* @param degree 指定的旋转角度
* @return 旋转后的图片
*/
public static Bitmap rotateBitmapByDegree(Bitmap bitmap, int degree) {
// 根据旋转角度,生成旋转矩阵
Matrix matrix = new Matrix();
matrix.postRotate(degree);
// 将原始图片按照旋转矩阵进行旋转,并得到新的图片
Bitmap newBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
bitmap.recycle();
return newBitmap;
}
/**
* Decode and sample down a bitmap from resources to the requested width and height.
*
* @param res The resources object containing the image data
* @param resId The resource id of the image data
* @param reqWidth The requested width of the resulting bitmap
* @param reqHeight The requested height of the resulting bitmap
* @return A bitmap sampled down from the original with the same aspect ratio and dimensions
* that are equal to or greater than the requested width and height
*/
public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId, int reqWidth, int reqHeight) {
// BEGIN_INCLUDE (read_bitmap_dimensions)
// First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(res, resId, options);
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
// END_INCLUDE (read_bitmap_dimensions)
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
return BitmapFactory.decodeResource(res, resId, options);
}
/**
* Decode and sample down a bitmap from a file to the requested width and height.
*
* @param filename The full path of the file to decode
* @param reqWidth The requested width of the resulting bitmap
* @param reqHeight The requested height of the resulting bitmap
* @return A bitmap sampled down from the original with the same aspect ratio and dimensions
* that are equal to or greater than the requested width and height
*/
public static Bitmap decodeSampledBitmapFromFile(String filename, int reqWidth, int reqHeight) {
// First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(filename, options);
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
return BitmapFactory.decodeFile(filename, options);
}
/**
* Decode and sample down a bitmap from a file input stream to the requested width and height.
*
* @param fileDescriptor The file descriptor to read from
* @param reqWidth The requested width of the resulting bitmap
* @param reqHeight The requested height of the resulting bitmap
* @return A bitmap sampled down from the original with the same aspect ratio and dimensions
* that are equal to or greater than the requested width and height
*/
public static Bitmap decodeSampledBitmapFromDescriptor(FileDescriptor fileDescriptor, int reqWidth, int reqHeight) {
// First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFileDescriptor(fileDescriptor, null, options);
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
return BitmapFactory.decodeFileDescriptor(fileDescriptor, null, options);
}
/**
* Calculate an inSampleSize for use in a {@link BitmapFactory.Options} object when decoding
* bitmaps using the decode* methods from {@link BitmapFactory}. This implementation calculates
* the closest inSampleSize that is a power of 2 and will result in the final decoded bitmap
* having a width and height equal to or larger than the requested width and height.
*
* @param options An options object with out* params already populated (run through a decode*
* method with inJustDecodeBounds==true
* @param reqWidth The requested width of the resulting bitmap
* @param reqHeight The requested height of the resulting bitmap
* @return The value to be used for inSampleSize
*/
public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) {
// BEGIN_INCLUDE (calculate_sample_size)
// Raw height and width of image
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
if (height > reqHeight || width > reqWidth) {
final int halfHeight = height / 2;
final int halfWidth = width / 2;
// Calculate the largest inSampleSize value that is a power of 2 and keeps both
// height and width larger than the requested height and width.
while ((halfHeight / inSampleSize) > reqHeight && (halfWidth / inSampleSize) > reqWidth) {
inSampleSize *= 2;
}
// This offers some additional logic in case the image has a strange
// aspect ratio. For example, a panorama may have a much larger
// width than height. In these cases the total pixels might still
// end up being too large to fit comfortably in memory, so we should
// be more aggressive with sample down the image (=larger inSampleSize).
long totalPixels = width * height / inSampleSize;
// Anything more than 2x the requested pixels we'll sample down further
final long totalReqPixelsCap = reqWidth * reqHeight * 2;
while (totalPixels > totalReqPixelsCap) {
inSampleSize *= 2;
totalPixels /= 2;
}
}
return inSampleSize;
// END_INCLUDE (calculate_sample_size)
}
/**
* convert Bitmap to byte array
*/
public static byte[] bitmapToByte(Bitmap b) {
ByteArrayOutputStream o = new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.PNG, 100, o);
return o.toByteArray();
}
/**
* convert byte array to Bitmap
*/
public static Bitmap byteToBitmap(byte[] b) {
return (b == null || b.length == 0) ? null : BitmapFactory.decodeByteArray(b, 0, b.length);
}
/**
* convert Drawable to Bitmap
*/
public static Bitmap drawableToBitmap(Drawable drawable) {
return drawable == null ? null : ((BitmapDrawable) drawable).getBitmap();
}
/**
* convert Bitmap to Drawable
*/
public static Drawable bitmapToDrawable(Bitmap bitmap) {
return bitmap == null ? null : new BitmapDrawable(bitmap);
}
/**
* convert Bitmap to round corner
*
* @param bitmap
* @return
*/
public static Bitmap toRoundCorner(Bitmap bitmap) {
int height = bitmap.getHeight();
int width = bitmap.getHeight();
Bitmap output = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, width, height);
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(0xff424242);
//paint.setColor(Color.TRANSPARENT);
canvas.drawCircle(width / 2, height / 2, width / 2, paint);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
return output;
}
public static Bitmap createBitmapThumbnail(Bitmap bitMap, boolean needRecycle) {
int width = bitMap.getWidth();
int height = bitMap.getHeight();
// 设置想要的大小
int newWidth = 120;
int newHeight = 120;
// 计算缩放比例
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
// 取得想要缩放的matrix参数
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
// 得到新的图片
Bitmap newBitMap = Bitmap.createBitmap(bitMap, 0, 0, width, height,
matrix, true);
if (needRecycle) bitMap.recycle();
return newBitMap;
}
public static boolean saveBitmap(Bitmap bitmap, File file) {
if (bitmap == null) return false;
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file, false);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
return true;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return false;
}
public static boolean saveBitmap(Bitmap bitmap, String absPath) {
return saveBitmap(bitmap, new File(absPath));
}
}
2.剪贴版服务
package ren.solid.library.utils;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.os.Build;
/**
* 剪贴板服务
*/
public class ClipboardUtils {
private static ClipboardManager mClipboardManager;
private static android.content.ClipboardManager mNewCliboardManager;
private static boolean isNew() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB;
}
private static void instance(Context context) {
if (isNew()) {
if (mNewCliboardManager == null)
mNewCliboardManager = (android.content.ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
} else {
if (mClipboardManager == null)
mClipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
}
}
/**
* 为剪切板设置内容
*
* @param context
* @param text
*/
public static void setText(Context context, CharSequence text) {
if (isNew()) {
instance(context);
// Creates a new text clip to put on the clipboard
ClipData clip = ClipData.newPlainText("simple text", text);
// Set the clipboard's primary clip.
mNewCliboardManager.setPrimaryClip(clip);
} else {
instance(context);
mClipboardManager.setText(text);
}
}
/**
* 获取剪切板的内容
*
* @param context
* @return
*/
public static CharSequence getText(Context context) {
StringBuilder sb = new StringBuilder();
if (isNew()) {
instance(context);
if (!mNewCliboardManager.hasPrimaryClip()) {
return sb.toString();
} else {
ClipData clipData = (mNewCliboardManager).getPrimaryClip();
int count = clipData.getItemCount();
for (int i = 0; i < count; ++i) {
ClipData.Item item = clipData.getItemAt(i);
CharSequence str = item.coerceToText(context);
sb.append(str);
}
}
} else {
instance(context);
sb.append(mClipboardManager.getText());
}
return sb.toString();
}
}
3.公共工具类
package ren.solid.library.utils;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Service;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Environment;
import android.os.Vibrator;
import android.view.inputmethod.InputMethodManager;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import ren.solid.library.R;
/**
* Created by _SOLID
* Date:2016/5/10
* Time:10:03
*/
public class CommonUtils {
/**
* 是否存在外部存储
*
* @return
*/
public static boolean isExternalStorageExists() {
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
return true;
}
return false;
}
public static void hideKeyboard(Activity activity) {
try {
((InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE))
.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
} catch (Exception ex) {
ex.printStackTrace();
}
}
/*
* 打开设置网络界面
*/
public static void setNetwork(final Context context) {
// 提示对话框
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setCancelable(false);
try {
builder.setTitle("网络设置提示")
.setMessage("网络连接不可用,是否进行设置?")
.setPositiveButton("设置",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
Intent intent = null;
// 判断手机系统的版本 即API大于10 就是3.0或以上版本
if (android.os.Build.VERSION.SDK_INT > 10) {
intent = new Intent(
android.provider.Settings.ACTION_WIRELESS_SETTINGS);
} else {
intent = new Intent();
ComponentName component = new ComponentName(
"com.android.settings",
"com.android.settings.WirelessSettings");
intent.setComponent(component);
intent.setAction("android.intent.action.VIEW");
}
context.startActivity(intent);
}
})
.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
dialog.dismiss();
}
}).show();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 调用震动器
*
* @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();
}
});
}
}
4.日期时间工具类
package ren.solid.library.utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
/**
* Created by _SOLID
* Date:2016/5/10
* Time:9:58
*/
public class DateUtils {
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());
/**
* 格式化日期
*
* @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;
}
/**
* 以友好的方式显示时间
*
* @param sdate
* @return
*/
public static String friendlyTime(String sdate) {
Date time = parseDateTime(sdate);
if (time == null) {
return "Unknown";
}
String ftime = "";
Calendar cal = Calendar.getInstance();
// 判断是否是同一天
String curDate = formatDate.format(cal.getTime());
String paramDate = formatDate.format(time);
if (curDate.equals(paramDate)) {
int hour = (int) ((cal.getTimeInMillis() - time.getTime()) / 3600000);
if (hour == 0)
ftime = Math.max(
(cal.getTimeInMillis() - time.getTime()) / 60000, 1)
+ "分钟前";
else
ftime = hour + "小时前";
return ftime;
}
long lt = time.getTime() / 86400000;
long ct = cal.getTimeInMillis() / 86400000;
int days = (int) (ct - lt);
if (days == 0) {
int hour = (int) ((cal.getTimeInMillis() - time.getTime()) / 3600000);
if (hour == 0)
ftime = Math.max(
(cal.getTimeInMillis() - time.getTime()) / 60000, 1)
+ "分钟前";
else
ftime = hour + "小时前";
} else if (days == 1) {
ftime = "昨天";
} else if (days == 2) {
ftime = "前天";
} else if (days > 2 && days <= 10) {
ftime = days + "天前";
} else if (days > 10) {
ftime = formatDate.format(time);
}
return ftime;
}
}
5.文件处理类
package ren.solid.library.utils;
import android.content.Context;
import android.os.Environment;
import android.text.TextUtils;
import android.util.Log;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
/**
* Created by _SOLID
* Date:2016/4/20
* Time:15:01
*/
public class FileUtils {
private static String TAG = "FileUtils";
private static String FILE_WRITING_ENCODING = "UTF-8";
private static String FILE_READING_ENCODING = "UTF-8";
public static String readFile(String _sFileName, String _sEncoding) throws Exception {
StringBuffer buffContent = null;
String sLine;
FileInputStream fis = null;
BufferedReader buffReader = null;
if (_sEncoding == null || "".equals(_sEncoding)) {
_sEncoding = FILE_READING_ENCODING;
}
try {
fis = new FileInputStream(_sFileName);
buffReader = new BufferedReader(new InputStreamReader(fis,
_sEncoding));
boolean zFirstLine = "UTF-8".equalsIgnoreCase(_sEncoding);
while ((sLine = buffReader.readLine()) != null) {
if (buffContent == null) {
buffContent = new StringBuffer();
} else {
buffContent.append("\n");
}
if (zFirstLine) {
sLine = removeBomHeaderIfExists(sLine);
zFirstLine = false;
}
buffContent.append(sLine);
}// end while
return (buffContent == null ? "" : buffContent.toString());
} catch (FileNotFoundException ex) {
throw new Exception("要读取的文件没有找到!", ex);
} catch (IOException ex) {
throw new Exception("读取文件时错误!", ex);
} finally {
// 增加异常时资源的释放
try {
if (buffReader != null)
buffReader.close();
if (fis != null)
fis.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
public static File writeFile(String path, String content, String encoding, boolean isOverride) throws Exception {
if (TextUtils.isEmpty(encoding)) {
encoding = FILE_WRITING_ENCODING;
}
InputStream is = new ByteArrayInputStream(content.getBytes(encoding));
return writeFile(is, path, isOverride);
}
public static File writeFile(InputStream is, String path, boolean isOverride) throws Exception {
String sPath = extractFilePath(path);
if (!pathExists(sPath)) {
makeDir(sPath, true);
}
if (!isOverride && fileExists(path)) {
if (path.contains(".")) {
String suffix = path.substring(path.lastIndexOf("."));
String pre = path.substring(0, path.lastIndexOf("."));
path = pre + "_" + System.currentTimeMillis() + suffix;
} else {
path = path + "_" + System.currentTimeMillis();
}
}
FileOutputStream os = null;
File file = null;
try {
file = new File(path);
os = new FileOutputStream(file);
int byteCount = 0;
byte[] bytes = new byte[1024];
while ((byteCount = is.read(bytes)) != -1) {
os.write(bytes, 0, byteCount);
}
os.flush();
return file;
} catch (Exception e) {
e.printStackTrace();
throw new Exception("写文件错误", e);
} finally {
try {
if (os != null)
os.close();
if (is != null)
is.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 移除字符串中的BOM前缀
*
* @param _sLine 需要处理的字符串
* @return 移除BOM后的字符串.
*/
private static String removeBomHeaderIfExists(String _sLine) {
if (_sLine == null) {
return null;
}
String line = _sLine;
if (line.length() > 0) {
char ch = line.charAt(0);
// 使用while是因为用一些工具看到过某些文件前几个字节都是0xfffe.
// 0xfeff,0xfffe是字节序的不同处理.JVM中,一般是0xfeff
while ((ch == 0xfeff || ch == 0xfffe)) {
line = line.substring(1);
if (line.length() == 0) {
break;
}
ch = line.charAt(0);
}
}
return line;
}
/**
* 从文件的完整路径名(路径+文件名)中提取 路径(包括:Drive+Directroy )
*
* @param _sFilePathName
* @return
*/
public static String extractFilePath(String _sFilePathName) {
int nPos = _sFilePathName.lastIndexOf('/');
if (nPos < 0) {
nPos = _sFilePathName.lastIndexOf('\\');
}
return (nPos >= 0 ? _sFilePathName.substring(0, nPos + 1) : "");
}
/**
* 检查指定文件的路径是否存在
*
* @param _sPathFileName 文件名称(含路径)
* @return 若存在,则返回true;否则,返回false
*/
public static boolean pathExists(String _sPathFileName) {
String sPath = extractFilePath(_sPathFileName);
return fileExists(sPath);
}
public static boolean fileExists(String _sPathFileName) {
File file = new File(_sPathFileName);
return file.exists();
}
/**
* 创建目录
*
* @param _sDir 目录名称
* @param _bCreateParentDir 如果父目录不存在,是否创建父目录
* @return
*/
public static boolean makeDir(String _sDir, boolean _bCreateParentDir) {
boolean zResult = false;
File file = new File(_sDir);
if (_bCreateParentDir)
zResult = file.mkdirs(); // 如果父目录不存在,则创建所有必需的父目录
else
zResult = file.mkdir(); // 如果父目录不存在,不做处理
if (!zResult)
zResult = file.exists();
return zResult;
}
public static void moveRawToDir(Context context, String rawName, String dir) {
try {
writeFile(context.getAssets().open(rawName), dir, true);
} catch (Exception e) {
e.printStackTrace();
Log.e(TAG, e.getMessage());
}
}
/**
* 得到手机的缓存目录
*
* @param context
* @return
*/
public static File getCacheDir(Context context) {
Log.i("getCacheDir", "cache sdcard state: " + Environment.getExternalStorageState());
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
File cacheDir = context.getExternalCacheDir();
if (cacheDir != null && (cacheDir.exists() || cacheDir.mkdirs())) {
Log.i("getCacheDir", "cache dir: " + cacheDir.getAbsolutePath());
return cacheDir;
}
}
File cacheDir = context.getCacheDir();
Log.i("getCacheDir", "cache dir: " + cacheDir.getAbsolutePath());
return cacheDir;
}
/**
* 得到皮肤目录
*
* @param context
* @return
*/
public static File getSkinDir(Context context) {
File skinDir = new File(getCacheDir(context), "skin");
if (skinDir.exists()) {
skinDir.mkdirs();
}
return skinDir;
}
public static String getSkinDirPath(Context context) {
return getSkinDir(context).getAbsolutePath();
}
public static String getSaveImagePath(Context context) {
String path = getCacheDir(context).getAbsolutePath();
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
path = Environment.getExternalStorageDirectory().getAbsolutePath();
}
path = path + File.separator + "Pictures";
File file = new File(path);
if (!file.exists()) {
file.mkdir();
}
return path;
}
public static String generateFileNameByTime() {
return System.currentTimeMillis() + "";
}
public static String getFileName(String path) {
int index = path.lastIndexOf('/');
return path.substring(index+1);
}
}
6.网络工具
package ren.solid.library.utils;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
/**
* Created by _SOLID
* Date:2016/4/20
* Time:16:23
*/
public class NetworkUtils {
/**
* 判断网络是否正常连接
*
* @param context
* @return boolean true:网络连接正常 false:网络连接不正常
*/
public static boolean isNetworkConnected(Context context) {
if (null == context) {
return false;
}
// 获取手机所有连接管理对象(包括wifi,net等连接的管理)
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager != null) {
// 获取网络连接管理的对象
NetworkInfo info = connectivityManager.getActiveNetworkInfo();
if (info != null && info.isConnected()) {
// 判断当前网络是否已经连接
if (info.getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
return false;
}
/**
* 获取当前网络连接的类型信息 1 wifi 2 移动网络 -1 无网络
*
* @return
*/
public int getConnectedType(Context context) {
if (context != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mNetworkInfo = mConnectivityManager
.getActiveNetworkInfo();
if (mNetworkInfo != null && mNetworkInfo.isAvailable()) {
return mNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI ? 1
: 2;
}
}
return -1;
}
/**
* 判断当前wifi是否可用
*
* @return
*/
public static boolean isWifiConnected(Context context) {
if (context != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mWiFiNetworkInfo = mConnectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (mWiFiNetworkInfo != null) {
return mWiFiNetworkInfo.isAvailable();
}
}
return false;
}
/**
* 判断MOBILE网络是否可用
*
* @return
*/
public boolean isMobileConnected(Context context) {
if (context != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mMobileNetworkInfo = mConnectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (mMobileNetworkInfo != null) {
return mMobileNetworkInfo.isAvailable();
}
}
return false;
}
}
7.手机号工具类
package ren.solid.library.utils;
/**
* Created by _SOLID
* Date:2016/5/10
* Time:10:12
*/
public class NumberUtils {
/**
* 中国移动拥有号码段为:139,138,137,136,135,134,159,158,157(3G),151,150,188(3G),187(3G
* );13个号段 中国联通拥有号码段为:130,131,132,156(3G),186(3G),185(3G);6个号段
* 中国电信拥有号码段为:133,153,189(3G),180(3G);4个号码段
*/
private static String mRegMobileStr = "^1(([3][456789])|([5][01789])|([8][78]))[0-9]{8}$";
private static String mRegMobile3GStr = "^((157)|(18[78]))[0-9]{8}$";
private static String mRegUnicomStr = "^1(([3][012])|([5][6])|([8][56]))[0-9]{8}$";
private static String mRegUnicom3GStr = "^((156)|(18[56]))[0-9]{8}$";
private static String mRegTelecomStr = "^1(([3][3])|([5][3])|([8][09]))[0-9]{8}$";
private static String mRegTelocom3GStr = "^(18[09])[0-9]{8}$";
private static String mRegPhoneString = "^(?:13\\d|15\\d)\\d{5}(\\d{3}|\\*{3})$";
private String mobile = "";
private int facilitatorType = 0;
private boolean isLawful = false;
private boolean is3G = false;
public NumberUtils(String mobile)
{
this.setMobile(mobile);
}
public void setMobile(String mobile)
{
if (mobile == null)
{
return;
}
/** */
/** 第一步判断中国移动 */
if (mobile.matches(NumberUtils.mRegMobileStr))
{
this.mobile = mobile;
this.setFacilitatorType(0);
this.setLawful(true);
if (mobile.matches(NumberUtils.mRegMobile3GStr))
{
this.setIs3G(true);
}
}
/** */
/** 第二步判断中国联通 */
else if (mobile.matches(NumberUtils.mRegUnicomStr))
{
this.mobile = mobile;
this.setFacilitatorType(1);
this.setLawful(true);
if (mobile.matches(NumberUtils.mRegUnicom3GStr))
{
this.setIs3G(true);
}
}
/** */
/** 第三步判断中国电信 */
else if (mobile.matches(NumberUtils.mRegTelecomStr))
{
this.mobile = mobile;
this.setFacilitatorType(2);
this.setLawful(true);
if (mobile.matches(NumberUtils.mRegTelocom3GStr))
{
this.setIs3G(true);
}
}
/** */
/** 第四步判断座机 */
if (mobile.matches(NumberUtils.mRegPhoneString))
{
this.mobile = mobile;
this.setFacilitatorType(0);
this.setLawful(true);
if (mobile.matches(NumberUtils.mRegMobile3GStr))
{
this.setIs3G(true);
}
}
}
public String getMobile()
{
return mobile;
}
public int getFacilitatorType()
{
return facilitatorType;
}
public boolean isLawful()
{
return isLawful;
}
public boolean isIs3G()
{
return is3G;
}
private void setFacilitatorType(int facilitatorType)
{
this.facilitatorType = facilitatorType;
}
private void setLawful(boolean isLawful)
{
this.isLawful = isLawful;
}
private void setIs3G(boolean is3G)
{
this.is3G = is3G;
}
}
8.SnackBar封装类
package ren.solid.library.utils;
import android.support.design.widget.Snackbar;
import android.view.View;
/**
* Created by _SOLID
* Date:2016/5/9
* Time:11:30
*/
public class SnackBarUtils {
private static final int color_danger = 0XFFA94442;
private static final int color_success = 0XFF3C763D;
private static final int color_info = 0XFF31708F;
private static final int color_warning = 0XFF8A6D3B;
private static final int color_action = 0XFFCDC5BF;
private Snackbar mSnackbar;
private SnackBarUtils(Snackbar snackbar) {
mSnackbar = snackbar;
}
public static SnackBarUtils makeShort(View view, String text) {
Snackbar snackbar = Snackbar.make(view, text, Snackbar.LENGTH_SHORT);
return new SnackBarUtils(snackbar);
}
public static SnackBarUtils makeLong(View view, String text) {
Snackbar snackbar = Snackbar.make(view, text, Snackbar.LENGTH_LONG);
return new SnackBarUtils(snackbar);
}
private View getSnackBarLayout(Snackbar snackbar) {
if (snackbar != null) {
return snackbar.getView();
}
return null;
}
private Snackbar setSnackBarBackColor(int colorId) {
View snackBarView = getSnackBarLayout(mSnackbar);
if (snackBarView != null) {
snackBarView.setBackgroundColor(colorId);
}
return mSnackbar;
}
public void info() {
setSnackBarBackColor(color_info);
show();
}
public void info(String actionText, View.OnClickListener listener) {
setSnackBarBackColor(color_info);
show(actionText, listener);
}
public void warning() {
setSnackBarBackColor(color_warning);
show();
}
public void warning(String actionText, View.OnClickListener listener) {
setSnackBarBackColor(color_warning);
show(actionText, listener);
}
public void danger() {
setSnackBarBackColor(color_danger);
show();
}
public void danger(String actionText, View.OnClickListener listener) {
setSnackBarBackColor(color_danger);
show(actionText, listener);
}
public void success() {
setSnackBarBackColor(color_success);
show();
}
public void success(String actionText, View.OnClickListener listener) {
setSnackBarBackColor(color_success);
show(actionText, listener);
}
public void show() {
mSnackbar.show();
}
public void show(String actionText, View.OnClickListener listener) {
mSnackbar.setActionTextColor(color_action);
mSnackbar.setAction(actionText, listener).show();
}
}
9.系统分享工具类
package com.example.skinlibrary.utils;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import java.util.ArrayList;
/**
* Created by _SOLID
* Date:2016/4/22
* Time:12:45
*/
public class SystemShareUtils {
public static void shareText(Context ctx, String text) {
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, text);
sendIntent.setType("text/plain");
ctx.startActivity(Intent.createChooser(sendIntent, "分享至"));
}
public static void shareImage(Context ctx, Uri uri) {
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_STREAM, uri);
sendIntent.setType("image/jpeg");
ctx.startActivity(Intent.createChooser(sendIntent, "分享至"));
}
public static void shareImageList(Context ctx, ArrayList<Uri> uris) {
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND_MULTIPLE);
sendIntent.putExtra(Intent.EXTRA_STREAM, uris);
sendIntent.setType("image/*");
ctx.startActivity(Intent.createChooser(sendIntent, "分享至"));
}
}
10.系统工具类
package ren.solid.library.utils;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Environment;
import android.provider.Settings;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.view.inputmethod.InputMethodManager;
/**
* 与系统有关的工具类
* Created by _SOLID
* Date:2016/4/5
* Time:19:37
*/
public class SystemUtils {
/**
* 获取设备的制造商
*
* @return 设备制造商
*/
public static String getDeviceManufacture() {
return android.os.Build.MANUFACTURER;
}
/**
* 获取设备名称
*
* @return 设备名称
*/
public static String getDeviceName() {
return android.os.Build.MODEL;
}
/**
* 获取系统版本号
*
* @return 系统版本号
*/
public static String getSystemVersion() {
return android.os.Build.VERSION.RELEASE;
}
/**
* 获取设备号
*
* @param context
* @return
*/
public static String getDeviceIMEI(Context context) {
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
if (telephonyManager == null || TextUtils.isEmpty(telephonyManager.getDeviceId())) {
return Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
} else {
return telephonyManager.getDeviceId();
}
}
/**
* 获取应用的版本号
*
* @param context
* @return
*/
public static String getAppVersion(Context context) {
PackageManager packageManager = context.getPackageManager();
PackageInfo packageInfo;
try {
packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
return packageInfo.versionName;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return null;
}
}
11.view相关的工具类
package ren.solid.library.utils;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import java.util.HashMap;
import java.util.Map;
import ren.solid.library.fragment.base.BaseFragment;
/**
* Created by _SOLID
* Date:2016/3/30
* Time:19:37
*/
public class ViewUtils {
private static Map<String, BaseFragment> fragmentList = new HashMap<>();
/**
* 根据Class创建Fragment
*
* @param clazz the Fragment of create
* @return
*/
public static BaseFragment createFragment(Class<?> clazz, boolean isObtain) {
BaseFragment resultFragment = null;
String className = clazz.getName();
if (fragmentList.containsKey(className)) {
resultFragment = fragmentList.get(className);
} else {
try {
try {
resultFragment = (BaseFragment) Class.forName(className).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
if (isObtain)
fragmentList.put(className, resultFragment);
}
return resultFragment;
}
public static BaseFragment createFragment(Class<?> clazz) {
return createFragment(clazz, true);
}
/**
* 获取屏幕的宽度
*
* @param context context
* @return
*/
public static int getScreenWidth(Context context) {
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
return displayMetrics.widthPixels;
}
/**
* 获取屏幕的高度
*
* @param context context
* @return
*/
public static int getScreenHeight(Context context) {
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
return displayMetrics.heightPixels;
}
//转换dp为px
public static int dp2px(Context context, int dip) {
float scale = context.getResources().getDisplayMetrics().density;
return (int) (dip * scale + 0.5f * (dip >= 0 ? 1 : -1));
}
//转换px为dp
public static int px2dp(Context context, int px) {
float scale = context.getResources().getDisplayMetrics().density;
return (int) (px / scale + 0.5f * (px >= 0 ? 1 : -1));
}
//转换sp为px
public static int sp2px(Context context, float spValue) {
float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (spValue * fontScale + 0.5f);
}
//转换px为sp
public static int px2sp(Context context, float pxValue) {
float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (pxValue / fontScale + 0.5f);
}
public static int getThemeColorPrimary(Context ctx) {
TypedValue typedValue = new TypedValue();
ctx.getTheme().resolveAttribute(android.R.attr.theme, typedValue, true);
int[] attribute = new int[]{android.R.attr.colorPrimary};
TypedArray array = ctx.obtainStyledAttributes(typedValue.resourceId, attribute);
int color = array.getColor(0, -1);
array.recycle();
return color;
}
public static int getThemeColorPrimaryDark(Context ctx) {
TypedValue typedValue = new TypedValue();
ctx.getTheme().resolveAttribute(android.R.attr.theme, typedValue, true);
int[] attribute = new int[]{android.R.attr.colorPrimaryDark};
TypedArray array = ctx.obtainStyledAttributes(typedValue.resourceId, attribute);
int color = array.getColor(0, -1);
array.recycle();
return color;
}
public static int getThemeColorAccent(Context ctx) {
TypedValue typedValue = new TypedValue();
ctx.getTheme().resolveAttribute(android.R.attr.theme, typedValue, true);
int[] attribute = new int[]{android.R.attr.colorAccent};
TypedArray array = ctx.obtainStyledAttributes(typedValue.resourceId, attribute);
int color = array.getColor(0, -1);
array.recycle();
return color;
}
}
12.Toast工具类
package ren.solid.library.utils;
import android.content.Context;
import android.widget.Toast;
/**
* Created by _SOLID
* Date:2016/4/20
* Time:16:44
*/
public class ToastUtils {
private static Context mContext;
private static ToastUtils mInstance;
private Toast mToast;
public static ToastUtils getInstance() {
return mInstance;
}
public static void init(Context ctx) {
mInstance = new ToastUtils(ctx);
}
private ToastUtils(Context ctx) {
mContext = ctx;
}
public void showToast(String text) {
if (mToast == null) {
mToast = Toast.makeText(mContext, text, Toast.LENGTH_SHORT);
} else {
mToast.setText(text);
mToast.setDuration(Toast.LENGTH_LONG);
}
mToast.show();
}
public void cancelToast() {
if (mToast != null) {
mToast.cancel();
}
}
}
下一篇: 为什么你的公司应该有一个网站?