101 lines
3.1 KiB
Java
101 lines
3.1 KiB
Java
package com.uiuios.aios.disklrucache;
|
|
|
|
import android.content.Context;
|
|
import android.content.pm.PackageInfo;
|
|
import android.content.pm.PackageManager;
|
|
import android.graphics.Bitmap;
|
|
import android.graphics.BitmapFactory;
|
|
import android.graphics.Canvas;
|
|
import android.graphics.PixelFormat;
|
|
import android.graphics.drawable.BitmapDrawable;
|
|
import android.graphics.drawable.Drawable;
|
|
|
|
import java.io.ByteArrayOutputStream;
|
|
import java.security.MessageDigest;
|
|
import java.security.NoSuchAlgorithmException;
|
|
|
|
public class Utils {
|
|
public static int getAppVersion(Context context) {
|
|
try {
|
|
PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
|
|
return info.versionCode;
|
|
} catch (PackageManager.NameNotFoundException e) {
|
|
e.printStackTrace();
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
|
|
public static String hashKeyForDisk(String key) {
|
|
String cacheKey;
|
|
try {
|
|
final MessageDigest mDigest = MessageDigest.getInstance("MD5");
|
|
mDigest.update(key.getBytes());
|
|
cacheKey = bytesToHexString(mDigest.digest());
|
|
} catch (NoSuchAlgorithmException e) {
|
|
cacheKey = String.valueOf(key.hashCode());
|
|
}
|
|
return cacheKey;
|
|
}
|
|
|
|
public static String bytesToHexString(byte[] bytes) {
|
|
StringBuilder sb = new StringBuilder();
|
|
for (int i = 0; i < bytes.length; i++) {
|
|
String hex = Integer.toHexString(0xFF & bytes[i]);
|
|
if (hex.length() == 1) {
|
|
sb.append('0');
|
|
}
|
|
sb.append(hex);
|
|
}
|
|
return sb.toString();
|
|
}
|
|
|
|
public static byte[] bitmap2Bytes(Bitmap bm) {
|
|
if (bm == null) {
|
|
return null;
|
|
}
|
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
|
bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
|
|
return baos.toByteArray();
|
|
}
|
|
|
|
public static Bitmap bytes2Bitmap(byte[] bytes) {
|
|
return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
|
|
}
|
|
|
|
|
|
/**
|
|
* Drawable → Bitmap
|
|
*/
|
|
public static Bitmap drawable2Bitmap(Drawable drawable) {
|
|
if (drawable == null) {
|
|
return null;
|
|
}
|
|
// 取 drawable 的长宽
|
|
int w = drawable.getIntrinsicWidth();
|
|
int h = drawable.getIntrinsicHeight();
|
|
// 取 drawable 的颜色格式
|
|
Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565;
|
|
// 建立对应 bitmap
|
|
Bitmap bitmap = Bitmap.createBitmap(w, h, config);
|
|
// 建立对应 bitmap 的画布
|
|
Canvas canvas = new Canvas(bitmap);
|
|
drawable.setBounds(0, 0, w, h);
|
|
// 把 drawable 内容画到画布中
|
|
drawable.draw(canvas);
|
|
return bitmap;
|
|
}
|
|
|
|
/*
|
|
* Bitmap → Drawable
|
|
*/
|
|
@SuppressWarnings("deprecation")
|
|
public static Drawable bitmap2Drawable(Bitmap bm) {
|
|
if (bm == null) {
|
|
return null;
|
|
}
|
|
BitmapDrawable bd = new BitmapDrawable(bm);
|
|
bd.setTargetDensity(bm.getDensity());
|
|
return new BitmapDrawable(bm);
|
|
}
|
|
} |