android文件和图片的处理工具类
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android文件和图片的处理工具类相关的知识,希望对你有一定的参考价值。
1 package com.gzcivil.utils; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileOutputStream; 6 import java.io.InputStream; 7 import java.math.BigDecimal; 8 import java.text.DecimalFormat; 9 import java.util.List; 10 import java.util.UUID; 11 12 import android.app.ActivityManager; 13 import android.content.ActivityNotFoundException; 14 import android.content.Context; 15 import android.content.Intent; 16 import android.content.pm.PackageInfo; 17 import android.content.pm.PackageManager.NameNotFoundException; 18 import android.graphics.Bitmap; 19 import android.graphics.BitmapFactory; 20 import android.graphics.drawable.BitmapDrawable; 21 import android.graphics.drawable.Drawable; 22 import android.media.ThumbnailUtils; 23 import android.net.Uri; 24 import android.os.Environment; 25 import android.telephony.TelephonyManager; 26 import android.view.View; 27 import android.view.ViewGroup; 28 import android.widget.ImageView; 29 import android.widget.ListAdapter; 30 import android.widget.ListView; 31 32 import com.gzcivil.R; 33 import com.igexin.sdk.PushManager; 34 35 public class CommonUtil { 36 37 /** 38 * 回收ImageView图片 39 * 40 * @param imageView 41 */ 42 public static synchronized void recycleImage(ImageView imageView) { 43 if (imageView == null) 44 return; 45 Drawable drawable = imageView.getDrawable(); 46 recycleDrawable(drawable); 47 imageView.setImageBitmap(null); 48 } 49 50 /** 51 * 回收View背景图片 52 * 53 * @param view 54 */ 55 @SuppressWarnings("deprecation") 56 public static synchronized void recycleBackground(View view) { 57 if (view == null) 58 return; 59 Drawable drawable = view.getBackground(); 60 recycleDrawable(drawable); 61 view.setBackgroundDrawable(null); 62 } 63 64 /** 65 * 回收方法 66 */ 67 private static void recycleDrawable(Drawable drawable) { 68 if (drawable != null && drawable instanceof BitmapDrawable) { 69 Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap(); 70 if (bitmap != null && !bitmap.isRecycled()) { 71 LogUtils.e(SysUtils.LOG_TAG, "图片回收了"); 72 bitmap.recycle(); 73 } 74 } 75 } 76 77 public static double getDirSize(File file) { 78 // 判断文件是否存在 79 if (file.exists()) { 80 // 如果是目录则递归计算其内容的总大小 81 if (file.isDirectory()) { 82 File[] children = file.listFiles(); 83 double size = 0; 84 for (File f : children) 85 size += getDirSize(f); 86 return size; 87 } else {// 如果是文件则直接返回其大小,以“兆”为单位 88 return file.length(); 89 } 90 } else { 91 return 0.0; 92 } 93 } 94 95 public static String FormetFileSize(double fileS) {// 转换文件大小 96 DecimalFormat df = new DecimalFormat("#.00"); 97 String fileSizeString = ""; 98 if (fileS < 1024) { 99 fileSizeString = "0.0" + "B"; 100 } else if (fileS < 1048576) { 101 fileSizeString = df.format((double) fileS / 1024) + "K"; 102 } else if (fileS < 1073741824) { 103 fileSizeString = df.format((double) fileS / 1048576) + "M"; 104 } else { 105 fileSizeString = df.format((double) fileS / 1073741824) + "G"; 106 } 107 return fileSizeString; 108 } 109 110 /* 111 * Java文件操作 获取文件扩展名 112 */ 113 public static String getExtensionName(String filename) { 114 if ((filename != null) && (filename.length() > 0)) { 115 int dot = filename.lastIndexOf(‘.‘); 116 if ((dot > -1) && (dot < (filename.length() - 1))) { 117 return filename.substring(dot + 1); 118 } 119 } 120 return filename; 121 } 122 123 /* 124 * Java文件操作 获取不带扩展名的文件名 125 */ 126 public static String getFileNameNoEx(String filename) { 127 if ((filename != null) && (filename.length() > 0)) { 128 int dot = filename.lastIndexOf(‘.‘); 129 if ((dot > -1) && (dot < (filename.length()))) { 130 return filename.substring(0, dot); 131 } 132 } 133 return filename; 134 } 135 136 public static void setListViewHeightBasedOnChildren(ListView listView) { 137 ListAdapter listAdapter = listView.getAdapter(); 138 if (listAdapter == null) { 139 return; 140 } 141 142 int totalHeight = 0; 143 for (int i = 0; i < listAdapter.getCount(); i++) { 144 View listItem = listAdapter.getView(i, null, listView); 145 listItem.measure(0, 0); 146 totalHeight += listItem.getMeasuredHeight(); 147 } 148 149 ViewGroup.LayoutParams params = listView.getLayoutParams(); 150 params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); 151 listView.setLayoutParams(params); 152 } 153 154 /** 155 * 检查是否存在SDCard 156 * 157 * @return 158 */ 159 public static boolean hasSdcard() { 160 String state = Environment.getExternalStorageState(); 161 if (state.equals(Environment.MEDIA_MOUNTED)) { 162 return true; 163 } else { 164 return false; 165 } 166 } 167 168 /** 169 * 四舍五入 170 * 171 * @param v 172 * @param scale 173 * 多少位 174 * @return 175 */ 176 public static double decimalFormat(Float v, int scale) { 177 if (scale < 0) { 178 throw new IllegalArgumentException("The scale must be a positive integer or zero"); 179 } 180 BigDecimal b = new BigDecimal(Double.toString(v)); 181 BigDecimal one = new BigDecimal("1"); 182 return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).floatValue(); 183 } 184 185 // 获取个推CID 186 public static String GetCid(Context context) { 187 return PushManager.getInstance().getClientid(context); 188 } 189 190 // 获取机器码 191 public static String GetMachineCode(Context context) { 192 String code = ""; 193 final TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 194 final String tmDevice, tmSerial, androidId; 195 tmDevice = "" + tm.getDeviceId(); 196 tmSerial = "" + tm.getSimSerialNumber(); 197 androidId = "" + android.provider.Settings.Secure.getString(context.getContentResolver(), android.provider.Settings.Secure.ANDROID_ID); 198 UUID deviceUuid = new UUID(androidId.hashCode(), ((long) tmDevice.hashCode() << 32) | tmSerial.hashCode()); 199 code = deviceUuid.toString(); 200 return code; 201 } 202 203 /** 204 * 派单状态 205 * 206 * @param param 207 * @return 208 */ 209 public static String getCheetStatus(String param) { 210 if (param == null || param.equals("")) { 211 return ""; 212 } 213 String Status = ""; 214 if (param == "00" || param.equals("00")) { 215 Status = "<font color=‘#e53c41‘>未接</font>"; 216 } else if (param == "01" || param.equals("01")) { 217 Status = "<font color=‘#e53c41‘>执行中</font>"; 218 } else if (param == "02" || param.equals("02")) { 219 Status = "<font color=‘#2ab823‘>完成</font>"; 220 } else if (param == "08" || param.equals("08")) { 221 Status = "<font color=‘#f13f1b‘>终止</font>"; 222 } else if (param == "09" || param.equals("09")) { 223 Status = "<font color=‘#f13f1b‘>拒收</font>"; 224 } else { 225 Status = ""; 226 } 227 return Status; 228 } 229 230 /** 231 * 会议通知状态 232 * 233 * @param param 234 * @return 235 */ 236 public static String getMeetStatus(String param) { 237 String Status = ""; 238 if (param == null || param.equals("")) { 239 return Status; 240 } 241 if (param.equals("1")) { 242 Status = "<font color=‘#e53c41‘>未接</font>"; 243 } else if (param.equals("2")) { 244 Status = "<font color=‘#2ab823‘>已同意</font>"; 245 } else if (param.equals("3")) { 246 Status = "<font color=‘#f13f1b‘>请假</font>"; 247 } 248 return Status; 249 } 250 251 /** 252 * 检测应用程序 是否前台运行 253 * 254 * @param context 255 * @return 256 */ 257 public static boolean isServiceStarted(Context context) { 258 boolean isStarted = false; 259 try { 260 ActivityManager mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 261 int intGetTastCounter = 1000; 262 List<ActivityManager.RunningServiceInfo> mRunningService = mActivityManager.getRunningServices(intGetTastCounter); 263 for (ActivityManager.RunningServiceInfo amService : mRunningService) { 264 if (0 == amService.service.getPackageName().compareTo("com.msd.terminal")) { 265 isStarted = true; 266 break; 267 } 268 } 269 } catch (SecurityException e) { 270 e.printStackTrace(); 271 } 272 return isStarted; 273 } 274 275 public static boolean isServiceRunning(Context mContext, String className) { 276 boolean isRunning = false; 277 ActivityManager activityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE); 278 List<ActivityManager.RunningServiceInfo> serviceList = activityManager.getRunningServices(30); 279 if (!(serviceList.size() > 0)) { 280 return false; 281 } 282 for (int i = 0; i < serviceList.size(); i++) { 283 if (serviceList.get(i).service.getClassName().equals(className) == true) { 284 isRunning = true; 285 break; 286 } 287 } 288 return isRunning; 289 } 290 291 // 获取版本号 292 public static String getVersion(Context context) { 293 try { 294 PackageInfo pi = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); 295 return pi.versionName; 296 } catch (NameNotFoundException e) { 297 e.printStackTrace(); 298 return context.getString(R.string.version_unknown); 299 } 300 } 301 302 /** 保存方法 */ 303 public static boolean saveBigImgToSmall(String bigImgPath, String smallImgPath, String smallImgName, int min) { 304 305 boolean flag = false; 306 try { 307 File lFile = new File(bigImgPath); 308 if (lFile.exists() && lFile.isFile()) { 309 InputStream is = new FileInputStream(bigImgPath); 310 Bitmap bitmap = BitmapFactory.decodeStream(is, null, getBitmapOption()); 311 int w = bitmap.getWidth(); 312 int h = bitmap.getHeight(); 313 LogUtils.e(SysUtils.LOG_TAG, "压缩前:w = " + w + ", h = " + h); 314 if (min < 200) { 315 min = 200; 316 } 317 if (w > h) { 318 w = w * min / h; 319 h = min; 320 } else { 321 h = h * min / w; 322 w = min; 323 } 324 LogUtils.e(SysUtils.LOG_TAG, "压缩后:w = " + w + ", h = " + h); 325 // 压缩原图为小图显示 326 bitmap = ThumbnailUtils.extractThumbnail(bitmap, w, h, ThumbnailUtils.OPTIONS_RECYCLE_INPUT); 327 File f = new File(smallImgPath); 328 if (f.exists()) 329 f.delete(); 330 FileOutputStream out = new FileOutputStream(f); 331 flag = bitmap.compress(Bitmap.CompressFormat.PNG, 90, out); 332 out.flush(); 333 out.close(); 334 } 335 } catch (Exception e) { 336 e.printStackTrace(); 337 } 338 return flag; 339 } 340 341 /** 342 * 获取Bitmap的读取参数 343 */ 344 public static final BitmapFactory.Options getBitmapOption() { 345 BitmapFactory.Options opt = new BitmapFactory.Options(); 346 opt.inPreferredConfig = Bitmap.Config.RGB_565; 347 opt.inPurgeable = true; 348 opt.inInputShareable = true; 349 return opt; 350 } 351 352 public static void openFile(Context context, File file) { 353 try { 354 Intent intent = new Intent(); 355 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 356 // 设置intent的Action属性 357 intent.setAction(Intent.ACTION_VIEW); 358 // 获取文件file的MIME类型 359 String type = getMIMEType(file); 360 // 设置intent的data和Type属性。 361 intent.setDataAndType(Uri.fromFile(file), type); 362 // 跳转 363 context.startActivity(intent); 364 // Intent.createChooser(intent, "请选择对应的软件打开该附件!"); 365 } catch (ActivityNotFoundException e) { 366 // TODO: handle exception 367 MyToast.showToast(context, "sorry附件不能打开,请下载相关软件!", 0); 368 } 369 } 370 371 private static String getMIMEType(File file) { 372 373 String type = "*/*"; 374 String fName = file.getName(); 375 // 获取后缀名前的分隔符"."在fName中的位置。 376 int dotIndex = fName.lastIndexOf("."); 377 if (dotIndex < 0) { 378 return type; 379 } 380 /* 获取文件的后缀名 */ 381 String end = fName.substring(dotIndex, fName.length()).toLowerCase(); 382 if (end == "") 383 return type; 384 // 在MIME和文件类型的匹配表中找到对应的MIME类型。 385 for (int i = 0; i < MIME_MapTable.length; i++) { 386 387 if (end.equals(MIME_MapTable[i][0])) 388 type = MIME_MapTable[i][1]; 389 } 390 return type; 391 } 392 393 // 可以自己随意添加 394 private static String[][] MIME_MapTable = { 395 // {后缀名,MIME类型} 396 { ".3gp", "video/3gpp" }, { ".apk", "application/vnd.android.package-archive" }, { ".asf", "video/x-ms-asf" }, { ".avi", "video/x-msvideo" }, { ".bin", "application/octet-stream" }, { ".bmp", "image/bmp" }, { ".c", "text/plain" }, { ".class", "application/octet-stream" }, { ".conf", "text/plain" }, { ".cpp", "text/plain" }, { ".doc", "application/msword" }, { ".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document" }, { ".xls", "application/vnd.ms-excel" }, { ".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" }, { ".exe", "application/octet-stream" }, { ".gif", "image/gif" }, { ".gtar", "application/x-gtar" }, { ".gz", "application/x-gzip" }, { ".h", "text/plain" }, { ".htm", "text/html" }, { ".html", "text/html" }, 397 { ".jar", "application/java-archive" }, { ".java", "text/plain" }, { ".jpeg", "image/jpeg" }, { ".jpg", "image/jpeg" }, { ".js", "application/x-javascript" }, { ".log", "text/plain" }, { ".m3u", "audio/x-mpegurl" }, { ".m4a", "audio/mp4a-latm" }, { ".m4b", "audio/mp4a-latm" }, { ".m4p", "audio/mp4a-latm" }, { ".m4u", "video/vnd.mpegurl" }, { ".m4v", "video/x-m4v" }, { ".mov", "video/quicktime" }, { ".mp2", "audio/x-mpeg" }, { ".mp3", "audio/x-mpeg" }, { ".mp4", "video/mp4" }, { ".mpc", "application/vnd.mpohun.certificate" }, { ".mpe", "video/mpeg" }, { ".mpeg", "video/mpeg" }, { ".mpg", "video/mpeg" }, { ".mpg4", "video/mp4" }, { ".mpga", "audio/mpeg" }, { ".msg", "application/vnd.ms-outlook" }, { ".ogg", "audio/ogg" }, { ".pdf", "application/pdf" }, { ".png", "image/png" }, 398 { ".pps", "application/vnd.ms-powerpoint" }, { ".ppt", "application/vnd.ms-powerpoint" }, { ".pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation" }, { ".prop", "text/plain" }, { ".rc", "text/plain" }, { ".rmvb", "audio/x-pn-realaudio" }, { ".rtf", "application/rtf" }, { ".sh", "text/plain" }, { ".tar", "application/x-tar" }, { ".tgz", "application/x-compressed" }, { ".txt", "text/plain" }, { ".wav", "audio/x-wav" }, { ".wma", "audio/x-ms-wma" }, { ".wmv", "audio/x-ms-wmv" }, { ".wps", "application/vnd.ms-works" }, { ".xml", "text/plain" }, { ".z", "application/x-compress" }, { ".zip", "application/x-zip-compressed" }, { "", "*/*" } }; 399 400 }
以上是关于android文件和图片的处理工具类的主要内容,如果未能解决你的问题,请参考以下文章
android 图片处理工具类,Bitmap转换String ,Drawable, byte[],保存,优化等。