public class Toolkit {

/**
*
* Role:Telecom service providers获取手机服务商信息 <BR>
*
* 需要加入权限<uses-permission
* android:name="android.permission.READ_PHONE_STATE"/> <BR>
* Date:2012-3-12 <BR>
*
* @author CODYY)allen
*/
public static String getProvidersName(Context context) {
String ProvidersName = "nosim";
try {
// 返回唯一的用户ID;就是这张卡的编号神马的
TelephonyManager telephonyManager = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
String IMSI = telephonyManager.getSubscriberId();
// IMSI号前面3位460是国家,紧接着后面2位00 02是中国移动,01是中国联通,03是中国电信。
if (IMSI.startsWith("46000") || IMSI.startsWith("46002"))
ProvidersName = "中国移动";
else if (IMSI.startsWith("46001"))
ProvidersName = "中国联通";
else if (IMSI.startsWith("46003"))
ProvidersName = "中国电信";
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return ProvidersName;
}
return ProvidersName;
}

/**
* 获取手机号
*
* @param context
* @return
*/
public static String getPhone(Context context) {
TelephonyManager phoneMgr = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
return phoneMgr.getLine1Number();
}

/**
* 获取手机型号
*
* @return
*/
public static String getPhoneType() {
return Build.MODEL;
}

/**
* 获取sdk版本
*
* @return
*/
public static String getSDKVersion() {
return Build.VERSION.SDK;
}

/**
* 获取版本号
*
* @return
*/
public static String getVersion() {
return Build.VERSION.RELEASE;
}

public static class TelephonyManagerInfo {
/**
* 电话状态: 1.tm.CALL_STATE_IDLE=0 无活动
*
* 2.tm.CALL_STATE_RINGING=1 响铃
*
* 3.tm.CALL_STATE_OFFHOOK=2 摘机
*/
public static int CallState;
/**
*
* 电话方位:(需要权限:android.permission.ACCESS_COARSE_LOCATION)
*/
public static String CellLocation;

/**
*
* 唯一的设备ID:
*
* GSM手机的 IMEI 和 CDMA手机的 MEID.
*
* Return null if device ID is not available.
*/
public static String DeviceId;

/**
*
* 设备的软件版本号:
*
* 例如:the IMEI/SV(software version) for GSM phones.
*
* Return null if the software version is not available.
*/
public static String DeviceSoftwareVersion;

/**
*
* 手机号:
*
* GSM手机的 MSISDN.
*
* Return null if it is unavailable.
*/
public static String Line1Number;

/**
*
* 附近的电话的信息:
*
* 类型:List<NeighboringCellInfo>
*
* 需要权限:android.Manifest.permission#ACCESS_COARSE_UPDATES
*/
public static List<NeighboringCellInfo> NeighboringCellInfo;// List<NeighboringCellInfo>

/**
*
* 获取ISO标准的国家码,即国际长途区号。
*
* 注意:仅当用户已在网络注册后有效。
*
* 在CDMA网络中结果也许不可靠。
*/
public static String NetworkCountryIso;

/**
*
* MCC+MNC(mobile country code + mobile network code)
*
* 注意:仅当用户已在网络注册时有效。
*
* 在CDMA网络中结果也许不可靠。
*/
public static String NetworkOperator;

/**
*
* 按照字母次序的current registered operator(当前已注册的用户)的名字
*
* 注意:仅当用户已在网络注册时有效。
*
* 在CDMA网络中结果也许不可靠。
*/

public static String NetworkOperatorName;// String

/**
* 当前使用的网络类型:
*
* 例如: NETWORK_TYPE_UNKNOWN 网络类型未知 0 NETWORK_TYPE_GPRS GPRS网络 1
*
* NETWORK_TYPE_EDGE EDGE网络 2
*
* NETWORK_TYPE_UMTS UMTS网络 3
*
* NETWORK_TYPE_HSDPA HSDPA网络 8
*
* NETWORK_TYPE_HSUPA HSUPA网络 9
*
* NETWORK_TYPE_HSPA HSPA网络 10
*
* NETWORK_TYPE_CDMA CDMA网络,IS95A 或 IS95B. 4
*
* NETWORK_TYPE_EVDO_0 EVDO网络, revision 0. 5
*
* NETWORK_TYPE_EVDO_A EVDO网络, revision A. 6
*
* NETWORK_TYPE_1xRTT 1xRTT网络 7
*/
public static int NetworkType;// int

/**
*
* 手机类型:
*
* 例如: PHONE_TYPE_NONE 无信号
*
* PHONE_TYPE_GSM GSM信号
*
* PHONE_TYPE_CDMA CDMA信号
*/

public static int PhoneType;// int

/**
*
* Returns the ISO country code equivalent for the SIM provider's
* country code.
*
* 获取ISO国家码,相当于提供SIM卡的国家码。
*/
public static String SimCountryIso;// String

/**
*
* Returns the MCC+MNC (mobile country code + mobile network code) of
* the provider of the SIM. 5 or 6 decimal digits.
*
* 获取SIM卡提供的移动国家码和移动网络码.5或6位的十进制数字.
*
* SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断).
*/
public static String SimOperator;// String

/**
*
* 服务商名称:
*
* 例如:中国移动、联通
*
* SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断).
*/
public static String SimOperatorName;// String

/**
*
* SIM卡的序列号:
*
* 需要权限:READ_PHONE_STATE
*/
public static String SimSerialNumber;// String

/**
*
* SIM的状态信息:
*
* SIM_STATE_UNKNOWN 未知状态 0
*
* SIM_STATE_ABSENT 没插卡 1
*
* SIM_STATE_PIN_REQUIRED 锁定状态,需要用户的PIN码解锁 2
*
* SIM_STATE_PUK_REQUIRED 锁定状态,需要用户的PUK码解锁 3
*
* SIM_STATE_NETWORK_LOCKED 锁定状态,需要网络的PIN码解锁 4
*
* SIM_STATE_READY 就绪状态 5
*/
public static int SimState;// int

/**
*
* 唯一的用户ID:
*
* 例如:IMSI(国际移动用户识别码) for a GSM phone.
*
* 需要权限:READ_PHONE_STATE
*/
public static String SubscriberId;// String

/**
*
* 取得和语音邮件相关的标签,即为识别符
*
* 需要权限:READ_PHONE_STATE
*/
public static String VoiceMailAlphaTag;// String

/**
*
* 获取语音邮件号码:
*
* 需要权限:READ_PHONE_STATE
*/
public static String VoiceMailNumber;// String

/**
*
* ICC卡是否存在
*/
public static boolean hasIccCard;// boolean

/**
*
* 是否漫游:
*
* (在GSM用途下)
*/
public static boolean isNetworkRoaming;
}

/**
* 获取手机唯一ID
*
* @param context
* @return
*/
public static String getPhoneUniqueId(Context context) {
TelephonyManager tm = (TelephonyManager) context
.getSystemService(context.TELEPHONY_SERVICE);
return tm.getDeviceId();
}

/**
* 获取手机信息实体
*
* @param context
* @return
*/
public static TelephonyManagerInfo getTelephonyInfo(Context context) {
TelephonyManagerInfo info = new TelephonyManagerInfo();
TelephonyManager tm = (TelephonyManager) context
.getSystemService(context.TELEPHONY_SERVICE);
info.CallState = tm.getCallState();
info.CellLocation = tm.getCellLocation().toString();
info.DeviceId = tm.getDeviceId();
info.DeviceSoftwareVersion = tm.getDeviceSoftwareVersion();
info.hasIccCard = tm.hasIccCard();
info.isNetworkRoaming = tm.isNetworkRoaming();
info.Line1Number = tm.getLine1Number();
info.NeighboringCellInfo = tm.getNeighboringCellInfo();
info.NetworkCountryIso = tm.getNetworkCountryIso();
info.NetworkOperator = tm.getNetworkOperator();
info.NetworkOperatorName = tm.getNetworkOperatorName();
info.NetworkType = tm.getNetworkType();
info.PhoneType = tm.getPhoneType();
info.SimCountryIso = tm.getSimCountryIso();
info.SimOperator = tm.getSimOperator();
info.SimOperatorName = tm.getSimOperatorName();
info.SimSerialNumber = tm.getSimSerialNumber();
info.SimState = tm.getSimState();
info.SubscriberId = tm.getSubscriberId();
info.VoiceMailAlphaTag = tm.getVoiceMailAlphaTag();
info.VoiceMailNumber = tm.getVoiceMailNumber();
return info;
}

/**
* 取得屏幕分辨率大小
*
* @param context
* Activity上下文
* @return第一个值为宽度
*/
public static int[] getDisplayPixes(Activity context) {
DisplayMetrics dm = new DisplayMetrics();
context.getWindowManager().getDefaultDisplay().getMetrics(dm);
return new int[] { dm.widthPixels, dm.heightPixels };
}

/**
* 取得屏幕分辨宽度和高度
*
* @param context
* Activity上下文
* @return第一个值为宽度
*/
public static int[] getDisplayWidthHeight(Activity context) {
Display dis = context.getWindowManager().getDefaultDisplay();
return new int[] { dis.getWidth(), dis.getHeight() };
}

/**
* 检查是否有可用的网络
*
* @param context
* 上下文
* @return true:有网络
*/
public static boolean isAvaliable(Context context) {
if (isWiFiActive(context) || isNetworkAvailable(context))
// Toast.makeText(context, "有网络!", 300).show();
return true;
else
// Toast.makeText(context, "网络不正常!", 300).show();
return false;
}

/** 返回当前网速 */
public static long getNetworkSpeed() {
// TODO Auto-generated method stub
ProcessBuilder cmd;
long readBytes = 0;
BufferedReader rd = null;
try {
String[] args = { "/system/bin/cat", "/proc/net/dev" };
cmd = new ProcessBuilder(args);
Process process = cmd.start();
rd = new BufferedReader(new InputStreamReader(
process.getInputStream()));
String line;
int linecount = 0;
while ((line = rd.readLine()) != null) {
linecount++;
if (line.contains("wlan0") || line.contains("eth0")) {
// L.E("获取流量整条字符串",line);
String[] delim = line.split(":");
if (delim.length >= 2) {
String[] numbers = delim[1].trim().split(" ");// 提取数据
readBytes = Long.parseLong(numbers[0].trim());//
break;
}
}
}
rd.close();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (rd != null) {
try {
rd.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return readBytes;
}

/**
* 检查wifi是否可用
*
* @param inContext
* @return
*/
public static boolean isWiFiActive(Context inContext) {
WifiManager mWifiManager = (WifiManager) inContext
.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
int ipAddress = wifiInfo == null ? 0 : wifiInfo.getIpAddress();
if (mWifiManager.isWifiEnabled() && ipAddress != 0) {
System.out.println("**** WIFI is on");
return true;
} else {
System.out.println("**** WIFI is off");
return false;
}
}

/**
* 检查手机网络(非wifi)是否有用
*
* @param context
* @return
*/
public static boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivity = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity == null) {
return false;
} else {
NetworkInfo info = connectivity.getActiveNetworkInfo();
if (info == null) {
return false;
} else {
if (info.isAvailable()) {
return true;
}
}
}
return false;
}

/**
* 判断是否为wifi的连接ip
*
* @return
*/
public static boolean isWifiConnected(Context context) {
int ipAddress = getWifiIpInfo(context);
if (ipAddress > 0)
return true;
else
return false;
}

private static int getWifiIpInfo(Context context) {
// 获取wifi服务
WifiManager wifiManager = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
// 判断wifi是否开启
if (!wifiManager.isWifiEnabled()) {
wifiManager.setWifiEnabled(true);
}
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
// return String.valueOf(wifiInfo.getIpAddress());
int ipAddress = wifiInfo.getIpAddress();
return ipAddress;
}

/**
* 获取wifi ip
*
* @return
*/
public static String getWifiAddress(Context context) {
int ipAddress = getWifiIpInfo(context);
return intToIp(ipAddress);
}

private static String intToIp(int i) {
return (i & 0xFF) + "." + ((i >> 8) & 0xFF) + "." + ((i >> 16) & 0xFF)
+ "." + (i >> 24 & 0xFF);
}

/**
* 获取手机mac地址<br/>
* 错误返回12个0
*/
public static String getMacAddress(Context context) {
// 获取mac地址:
String macAddress = "000000000000";
try {
WifiManager wifiMgr = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
WifiInfo info = (null == wifiMgr ? null : wifiMgr
.getConnectionInfo());
if (null != info) {
if (!TextUtils.isEmpty(info.getMacAddress()))
macAddress = info.getMacAddress().replace(":", "");
else
return macAddress;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return macAddress;
}
return macAddress;
}

/**
* 获取手机ip(此方法在android中使用获取3G网络ip地址)
*
* @return
* @throws SocketException
* @throws UnknownHostException
*/
public static String getLocalIpAddress() throws SocketException {
for (Enumeration<NetworkInterface> en = NetworkInterface
.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr
.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
return inetAddress.getHostAddress().toString();
}
}
}
return null;
}

/**
* 获取本机ip(此方法仅在java程序中)
*
* @return
* @throws UnknownHostException
*/
public static String getHostAddress() throws UnknownHostException {
InetAddress address = null;
address = InetAddress.getLocalHost();
return address.getHostAddress();
}

/**
* 读取文本,一次读取多个字节,默认为1024
*
* @param file
* 文件名称(在sd卡下面的data/data/应用程序包下面)
* @param context
* 上下文
* @param encode
* 编码方式
* @return
* @throws IOException
*/
public static String readFromFileByChar(String file, Context context,
String encode) throws IOException {
FileInputStream fis = context.openFileInput(file);
BufferedReader br = new BufferedReader(new InputStreamReader(fis,
encode));
// Log.i(TAG, br.readLine());
int index = 0;
char[] buffer = new char[1024];// 一次性读取1024个字符
StringBuffer sb = new StringBuffer();
while ((index = br.read(buffer)) != -1) {// 一次读多个字符
// 同样屏蔽掉r不显示
if ((index == buffer.length) && (buffer[buffer.length - 1] != 'r')) {
sb.append(buffer);
} else {
for (int i = 0; i < index; i++) {
if (buffer[i] == 'r') {
continue;// 停止执行当前的迭代,然后退回循环开始处
} else {
sb.append(buffer[i]);
}
}
}
}
br.close();
fis.close();
return sb.toString();
// return br.readLine();
}

/**
* 按行读取文本
*
* @param file
* 文件名
* @param context
* 上下文
* @param encode
* 编码方式
* @return
* @throws IOException
*/
public static String readFromFileByLine(String file, Context context,
String encode) throws IOException {
FileInputStream fis = context.openFileInput(file);
BufferedReader br = new BufferedReader(new InputStreamReader(fis,
encode));
// Log.i(TAG, br.readLine());
StringBuffer sb = new StringBuffer();
String temp;
while ((temp = br.readLine()) != null) {// 一次读一行
sb.append(temp);
}
br.close();
fis.close();
return sb.toString();
// return br.readLine();
}

/**
* 一次将string内容写入到文件
*
* @param context
* 上下文
* @param file
* 文件名
* @param content
* 写入的内容
* @throws IOException
*/
public static void writeToFile(Context context, String file, String content)
throws IOException {
FileOutputStream fos = context.openFileOutput(file,
context.MODE_PRIVATE);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
bw.write(content);
bw.flush();
bw.close();
fos.close();
}

/**
* 将object序列化到filename文件中
*
* @param fileName
* 文件名,包括路径
* @param object
* 序列化的对象
*/
public static boolean writeFileByObject(String fileName, Object object) {
try {
FileOutputStream fos = new FileOutputStream(fileName);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(object);
oos.flush();
oos.close();
fos.close();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}

/**
* 反序列化
*
* @param fileName
* 文件名,包括详细路径
* @return Object类型的对象
*/
public static Object readFileByObject(String fileName) {
try {
FileInputStream fis = new FileInputStream(fileName);
ObjectInputStream ois = new ObjectInputStream(fis);
Object o = ois.readObject();
ois.close();
fis.close();
return o;
} catch (Exception e) {
return null;
}
}

/**
* 按照指定的宽度和高度压缩图片(这是android 2.2以上才有的方法)
*
* @param bm
* @param w
* @param h
* @return
*/
public static Bitmap compressBitmap(Bitmap bm, int w, int h) {
return ThumbnailUtils.extractThumbnail(bm, w, h);
}

/**
* 等比例压缩图片
*
* @param is
* 图片输入流
* @param scalePix
* 压缩的尺寸
* @return
*/
public static Bitmap compressBitmapByscale(InputStream is, int scalePix) {
BitmapFactory.Options opt = new Options();
opt.inSampleSize = scalePix;
return BitmapFactory.decodeStream(is, null, opt);
}

/**
* 等比例压缩图片
*
* @param data
* byte[]数组
*
* @param ratio
* 压缩的尺寸
* @return
*/
public static Bitmap compressBitmap(byte[] data, int ratio) {
BitmapFactory.Options opts = new Options();
opts.inJustDecodeBounds = false;
opts.inSampleSize = ratio;
// 得到新的图片
return BitmapFactory.decodeByteArray(data, 0, data.length, opts);

}

/**
* 自动压缩图片(根据能够压缩的比例)
*
* @param map
* @return
*/
public static Bitmap compressBitmapAuto(Bitmap map, int scalePix) {
BitmapFactory.Options opts = new BitmapFactory.Options();
ByteArrayOutputStream os = new ByteArrayOutputStream();
byte[] data = os.toByteArray();
opts.inJustDecodeBounds = true;
map.compress(CompressFormat.PNG, 100, os);
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
opts.inJustDecodeBounds = false;
int be = (int) (opts.outHeight / (float) scalePix);
if (be <= 0)
be = 1;
opts.inSampleSize = be;
bitmap = BitmapFactory.decodeByteArray(data, 0, data.length, opts);
return bitmap;
}

/** 根据屏幕大小适屏压缩 --2012/11/13-- */
public static Bitmap compressBitmapFixDisplay(Activity context, byte[] data) {
BitmapFactory.Options opts = new Options();
opts.inJustDecodeBounds = true;// 设置查看图片的大小,不分配内存
BitmapFactory.decodeByteArray(data, 0, data.length, opts);
int height = context.getWindowManager().getDefaultDisplay().getHeight();// 获取屏幕大小
int width = context.getWindowManager().getDefaultDisplay().getWidth();
int hratio = (int) Math.ceil(opts.outHeight / (float) height);// 图片的高度比上屏幕的高度
int wratio = (int) Math.ceil(opts.outWidth / (float) width);
if (hratio > 1 || wratio > 1) {// 如果图片超出屏幕范围
if (hratio > wratio)// 如果高度大于宽度
opts.inSampleSize = hratio;
else
opts.inSampleSize = wratio;
}
opts.inJustDecodeBounds = false;// 设置分配图片的大小
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length,
opts);
return bitmap;
}

/**
* 压缩图片
*
* @param bm
* 所要转换的bitmap
* @param newWidth新的宽
* @param newHeight新的高
* @return 指定宽高的bitmap
*/
public static Bitmap zoomImg(Bitmap bm, int newWidth, int newHeight) {
// 获得图片的宽高
int width = bm.getWidth();
int height = bm.getHeight();
// 计算缩放比例
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
// 取得想要缩放的matrix参数
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
// 得到新的图片
Bitmap newbm = Bitmap.createBitmap(bm, 0, 0, width, height, matrix,
true);
if (!bm.isRecycled())// 回收bitmap
bm.recycle();
return newbm;
}

/**
* 动态设置ImageView的布局宽度和高度
*
* @param iv
* ImageView对象
* @param width
* 要设置的宽度(0:充满父容器)
* @param height
* 要设置的高度(0:充满父容器)
*/
public static void setImagePixes(ImageView iv, int width, int height) {
ViewGroup.LayoutParams params = iv.getLayoutParams();
if (width == 0 && height != 0)// 如果宽度为0
{
params.height = height;
params.width = ViewGroup.LayoutParams.FILL_PARENT;
} else if (height == 0 && width != 0) {// 高度为 0
params.height = ViewGroup.LayoutParams.FILL_PARENT;
params.width = width;
} else if (width == 0 && height == 0) {
params.height = ViewGroup.LayoutParams.FILL_PARENT;
params.width = ViewGroup.LayoutParams.FILL_PARENT;
} else {
params.height = height;
params.width = width;
}
iv.setLayoutParams(params);
}

/** activity转换为view */
@SuppressWarnings("deprecation")
public static View activityToView(Context parent, Intent intent) {
LocalActivityManager mLocalActivityManager = new LocalActivityManager(
(Activity) parent, true);
final Window w = mLocalActivityManager.startActivity("TagName", intent);
final View wd = w != null ? w.getDecorView() : null;
if (wd != null) {
wd.setVisibility(View.VISIBLE);
wd.setFocusableInTouchMode(true);
((ViewGroup) wd)
.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
}
return wd;
}

/***
* 动态设置listview的高度
*
* @param listView
*/
public static void setListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight
+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
// params.height += 5;// if without this statement,the listview will be
// a
// little short
// listView.getDividerHeight()获取子项间分隔符占用的高度
// params.height最后得到整个ListView完整显示需要的高度
listView.setLayoutParams(params);
}

/**
* 将Drawable转化为Bitmap
*
* @param drawable
* @return
*/
public static Bitmap drawableToBitmap(Drawable drawable) {
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
Bitmap bitmap = Bitmap.createBitmap(width, height, drawable
.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, width, height);
drawable.draw(canvas);
return bitmap;
}

/**
* 将图片的四角圆化
*
* @param bitmap
* @param radius
* 圆角弧度,数值越大弧度越大
* @return
*/
public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, int radius) {

Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
bitmap.getHeight(), Config.ARGB_8888);
// 得到画布
Canvas canvas = new Canvas(output);

// 将画布的四角圆化
final int color = Color.RED;
final Paint paint = new Paint();
// 得到与图像相同大小的区域 由构造的四个值决定区域的位置以及大小
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
final RectF rectF = new RectF(rect);
// 值越大角度越明显
final float roundPx = radius;

paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
// drawRoundRect的第2,3个参数一样则画的是正圆的一角,如果数值不同则是椭圆的一角
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); // 设置形式为背景
canvas.drawBitmap(bitmap, rect, rect, paint);

return output;
}

/**
* 获得带倒影的图片方法
*
* @param bitmap
* @return
*/
public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap) {
final int reflectionGap = 4;
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Matrix matrix = new Matrix();
matrix.preScale(1, -1);
Bitmap reflectionImage = Bitmap.createBitmap(bitmap, 0, height / 2,
width, height / 2, matrix, false);
Bitmap bitmapWithReflection = Bitmap.createBitmap(width,
(height + height / 2), Config.ARGB_8888);
Canvas canvas = new Canvas(bitmapWithReflection);
canvas.drawBitmap(bitmap, 0, 0, null);
Paint deafalutPaint = new Paint();
canvas.drawRect(0, height, width, height + reflectionGap, deafalutPaint);
canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);
Paint paint = new Paint();
LinearGradient shader = new LinearGradient(0, bitmap.getHeight(), 0,
bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff,
0x00ffffff, TileMode.CLAMP);
paint.setShader(shader);// 设置阴影
// Set the Transfer mode to be porter duff and destination in
paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
// Draw a rectangle using the paint with our linear gradient
canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()
+ reflectionGap, paint);
return bitmapWithReflection;
}

/**
* 向preferences写入数据
*
* @param context
* 上下文
* @param key
* 键
* @param value
* 写入的内容
*/
public static void writeToPreferences(Context context, String filename,
String key, String value) {
// 得到preferences对象
SharedPreferences.Editor editor = context.getSharedPreferences(
filename, android.content.Context.MODE_PRIVATE).edit();
// editor = preferences.edit();
editor.putString(key, value);
editor.commit();
}

/**
* 向preference中读取数据 data/data/package/shared_prefs
*
* @param context
* 上下文
* @param filename
* 文件名
* @param key
* 键
* @param defaultValue
* 默认值
* @return
*/
public static String readFromPreferences(Context context, String filename,
String key, String defaultValue) {
// 得到preferences对象
SharedPreferences preferences = context.getSharedPreferences(filename,
android.content.Context.MODE_PRIVATE
| android.content.Context.MODE_APPEND);
return preferences.getString(key, defaultValue);
}

/**
* 加载properties文件
*
* @param context
* @param file
* @return
* @throws Exception
*/
public static Properties loadProperties(Context context, String file,
String encode) throws Exception {
Properties properties = new Properties();
FileInputStream s = new FileInputStream(file);
properties.load(s);
return properties;
}

/**
* 保存到properties文件中
*
* @param context
* @param file
* @param properties
* @throws Exception
*/
public static void saveProperties(Context context, String file,
String encode, Properties properties) throws Exception {
FileOutputStream s = new FileOutputStream(file, false);
properties.store(s, "");
}

// ---------------------------------------------------------------------------------------------------

/**
* 从网络上下载
*
* @param url
* @return
* @throws IOException
*/
public static Bitmap getBitMapFromUrl(String url) throws IOException {
Bitmap bitmap = null;
URL u = null;
HttpURLConnection conn = null;
InputStream is = null;
u = new URL(url);
conn = (HttpURLConnection) u.openConnection();
is = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(is);
return bitmap;
}

/**
* 异步加载网络图片
*
* @param src图片路径
* @param iv
* imageview
* @param callback回调接口
*/
public static void loadImage(final String src, final ImageView iv,
final ImageCallBack callback) {
final Handler handler = new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
callback.setImageBitmap((Bitmap) msg.obj, iv, src);
}
};
new Thread(new Runnable() {
@Override
public void run() {
Bitmap bitmap = null;
try {
bitmap = getBitMapFromUrl(src);
} catch (IOException e) {
e.printStackTrace();
}
if (bitmap != null) {
Message msg = handler.obtainMessage(0, bitmap);
handler.sendMessage(msg);
}
}
}).start();
}

/**
* 获取网络byte流的图片
*
* @param src
* @return
* @throws Exception
*/
public static byte[] getImageBytes(String src) throws Exception {
URL url = new URL(src);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);// 设置延迟时间为5s
InputStream is = conn.getInputStream();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int len = 0;
byte[] buffer = new byte[1024];
while ((len = is.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
return bos.toByteArray();
}

/**
* 压缩图片
*
* @param bm
* 所要转换的bitmap
* @param newWidth新的宽
* @param newHeight新的高
* @return 指定宽高的bitmap
*/
public static Bitmap zoomBitmap(byte[] data, int newWidth, int newHeight) {
BitmapFactory.Options opts = new Options();
opts.inJustDecodeBounds = false;
opts.inSampleSize = 10;
// 得到新的图片
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length,
opts);
// 获得图片的宽高
int width = bitmap.getWidth();
int height = bitmap.getHeight();
// 计算缩放比例
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
// 取得想要缩放的matrix参数
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);

Bitmap newbm = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix,
true);
if (!bitmap.isRecycled())// 回收bitmap
bitmap.recycle();
return newbm;
}

/**
* 异步加载网络图片
*
* @param src
* url地址
* @param iv
* 传入的iamgeView
* @param callback
* 回调函数
*/
public static void AsycloadImage(final String src, final ImageView iv,
final ImageCallBack callback) {
final Handler handler = new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
callback.setImageBitmap((Bitmap) msg.obj, iv, src);
}
};
new Thread(new Runnable() {
@Override
public void run() {
byte[] data = null;
Bitmap bitmap = null;
try {
data = getImageBytes(src);
bitmap = compressBitmap(data, 3);

} catch (Exception e) {
e.printStackTrace();
}
if (bitmap != null) {
Message msg = handler.obtainMessage(0, bitmap);
handler.sendMessage(msg);
}
}
}).start();
}

/**
* 异步加载图片
*
* @param url
* 图片路径
* @param iv
* ImageView
* @param imgCache
* 缓存
* @param callback
* 回调接口
*/
public static void AyncLoadImageFromUrl(final String url,
final ImageView iv,
final Map<String, SoftReference<Bitmap>> imgCache,
final ImageCallBack callback) {
if (imgCache.containsKey(url))// 如果缓存中存在
{
iv.setImageBitmap(imgCache.get(url).get());
return;
}
final Handler handler = new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
callback.setImageBitmap((Bitmap) msg.obj, iv, url);
}
};
new Thread(new Runnable() {

@Override
public void run() {
byte[] data = null;
Bitmap bitmap = null;
try {
data = getImageBytes(url);
bitmap = compressBitmap(data, 3);
} catch (Exception e) {
e.printStackTrace();
}
if (bitmap != null) {
// 保存到缓存中
// 将图片保存到缓存中
imgCache.put(url, new SoftReference<Bitmap>(bitmap));
Message msg = handler.obtainMessage(0, bitmap);
handler.sendMessage(msg);
}
}
}).start();
}

/**
* 保存图片到sdcard,并且返回图片名称,带后缀名
*
* @param context
* @param fileName
* 图片目录名称
* @param photo
* 图片路径
* @throws IOException
*/
public static String saveImgToSdcard(Context context, String fileName,
String photo) throws IOException {
String url = photo;
// 获取图片名称,包含后缀
String imgName = url.substring(url.lastIndexOf("/") + 1, url.length());
URL Url = new URL(url);
HttpURLConnection conn = (HttpURLConnection) Url.openConnection();
InputStream is = conn.getInputStream();
String saveUrl = context.getFilesDir() + "/" + fileName + "/" + imgName;
File file = new File(saveUrl);
// 如果图片文件存在
if (file.exists())
return imgName;
FileOutputStream fos = new FileOutputStream(file);
byte[] data = new byte[512];
int len = 0;
while ((len = is.read(data)) != -1) {
fos.write(data, 0, len);
}
fos.flush();
fos.close();
return imgName;
}

/**
* 保存图片到指定的目录
*
* @param context
* 上下文
* @param filedir
* 图片目录名称
* @param name
* 图片名称
* @param bitmap
* 图片
* @throws Exception
*/
public static void saveBitmapToSdcard(Context context, String filedir,
String name, Bitmap bitmap) throws Exception {
String path = context.getFilesDir() + File.separator + filedir
+ File.separator;
File file = new File(path);
if (!file.exists()) {
file.mkdir();
}
file = new File(path + name + ".png");
if (file.exists())
return;
FileOutputStream fos = new FileOutputStream(file);
bitmap.compress(CompressFormat.PNG, 100, fos);
fos.close();
}

/** 从sdcard制定目录读取图片 */
public static Bitmap getBitmapFromSdcard(Context context, String file,
String name) {
String src = context.getFilesDir() + "/" + file + "/" + name;
Bitmap bitmap = BitmapFactory.decodeFile(src);
return bitmap;
}

/**
* 从缓存中读取
*
* @param url
* @return
* @throws Exception
*/
public static Bitmap getImgFromCache(final String url, final ImageView iv,
final Map<String, SoftReference<Bitmap>> imgCache,
final ImageCallBack callback) throws Exception {
// 从内存中读取
if (imgCache.containsKey(url)) {
synchronized (imgCache) {
SoftReference<Bitmap> bitmapReference = imgCache.get(url);
if (null != bitmapReference) {
return bitmapReference.get();
}
}
}
final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
callback.setImageBitmap((Bitmap) msg.obj, iv, url);
}
};
// �木W�j中下�d
new Thread(new Runnable() {
@Override
public void run() {
Bitmap bitmap = null;
try {
bitmap = getBitMapFromUrl(url);
} catch (IOException e) {
e.printStackTrace();
}
// 将图片保存进内存中
imgCache.put(url, new SoftReference<Bitmap>(bitmap));
Message msg = handler.obtainMessage(0, bitmap);
handler.sendMessage(msg);
}
}).start();
return null;
}

public interface ImageCallBack {
public void setImageBitmap(Bitmap bitmap, ImageView iv, String url);
}

/**
* get 请求
*
* @param url路径
* @return
* @throws Exception
* @throws ClientProtocolException
*/
public static HttpResponse get(String url) throws Exception {
HttpResponse response = null;
HttpClient client = new DefaultHttpClient();
// 设置连接超时
client.getParams().setIntParameter(
HttpConnectionParams.CONNECTION_TIMEOUT, 10000);
// 设置编码
// client.getParams().setParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET,
// "gb2312");
// get方式
HttpGet httpRequest = new HttpGet(url);
// 发出一个request,并返回一个基于http协议的response
// System.out.println("------toolkit 1066----------");
response = client.execute(httpRequest);
return response;
}

/**
* post请求
*
* @param path
* 请求的地址
* @param params
* 参数列表
* @return
* @throws Exception
*/
public static InputStream postRequest(String path,
Map<String, String> params) throws Exception {
// 封装请求参数
List<NameValuePair> pair = new ArrayList<NameValuePair>();
if (params != null && !params.isEmpty()) {
for (Map.Entry<String, String> entry : params.entrySet()) {
pair.add(new BasicNameValuePair(entry.getKey(), entry
.getValue()));
}
}
// 把请求参数变成请求体部分
UrlEncodedFormEntity uee = new UrlEncodedFormEntity(pair, "utf-8");


// 使用HttpPost对象设置发送的URL路径
final HttpPost post = new HttpPost(path);
// 发送请求体
post.setEntity(uee);
// 创建一个浏览器对象,以把POST对象向服务器发送,并返回响应消息
DefaultHttpClient dhc = new DefaultHttpClient();
// 设置连接超时
dhc.getParams().setIntParameter(
HttpConnectionParams.CONNECTION_TIMEOUT, 10000);
dhc.getParams().setIntParameter(HttpConnectionParams.SO_TIMEOUT, 10000); // 设置等待数据超时10s
HttpResponse response = dhc.execute(post);
Log.e("TAG", "服务器返回状态:----" + response.getStatusLine().getStatusCode());
if (response != null && response.getStatusLine().getStatusCode() == 200) {
return response.getEntity().getContent();
} else
post.abort();
return null;
}

/**
* post请求
*
* @param url路径
* @param list
* 参数列表
* @return
* @throws IOException
* @throws ClientProtocolException
*/
public static HttpResponse post(String url, List<BasicNameValuePair> list,
String encode) throws Throwable {
HttpResponse response = null;
HttpClient client = new DefaultHttpClient();
// 设置连接超时
client.getParams().setIntParameter(
HttpConnectionParams.CONNECTION_TIMEOUT, 5000);
client.getParams().setIntParameter(HttpConnectionParams.SO_TIMEOUT,
5000); // 设置等待数据超时5s
// 创建一个 基于http协议的请求(post方式)
HttpPost httpRequest = new HttpPost(url);
if (list != null) {
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, encode);
// 将请求中的参数信息放置到request中
httpRequest.setEntity(entity);
}
// 发出一个request,并返回一个基于http协议的response
response = client.execute(httpRequest);
return response;

}

/*
* 参数说明: uploadUrl: Servlet的url fileName: 上传图片的文件名(如: qq.png) fileUrl:
* 上传文件在手机客户端的完整路径(如: /sdcard/qq.png)
*/
public static InputStream upload(String uploadUrl, String fileName,
String fileUrl) throws Exception {
String end = "\r\n";
String twoHyphens = "--";
String boundary = "*****";
InputStream is = null;
URL url = new URL(uploadUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
/* 允许Input、Output,不使用Cache */
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
/* 设置传送的method=POST */
conn.setRequestMethod("POST");
/* setRequestProperty */
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Charset", "UTF-8");
conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="
+ boundary);
// 将phone放置到请求的头部

if (fileName != null && fileUrl != null) {
conn.setRequestProperty("picName", fileName);
/* 设置DataOutputStream */
DataOutputStream ds = new DataOutputStream(conn.getOutputStream());
ds.writeBytes(twoHyphens + boundary + end);
ds.writeBytes("Content-Disposition: form-data; "
+ "name=\"file1\";filename=\"" + fileName + "\"" + end);
ds.writeBytes(end);

/* 取得文件的FileInputStream */
FileInputStream fStream = new FileInputStream(fileUrl);
/* 设置每次写入1024bytes */
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];

int length = -1;
/* 从文件读取数据至缓冲区 */
while ((length = fStream.read(buffer)) != -1) {
/* 将资料写入DataOutputStream中 */
ds.write(buffer, 0, length);
}
ds.writeBytes(end);
ds.writeBytes(twoHyphens + boundary + twoHyphens + end);

/* close streams */
fStream.close();
ds.flush();
ds.close();
}
/* 取得Response内容 */
is = conn.getInputStream();
return is;
}

// -------------------------------------加密,验证,转换系列-----------------------------------------------------------
/**
* 验证是否为手机号码
*
* @param mobiles
* @return
*/
public static boolean isMobileNO(String mobiles) {
// Pattern p =
// Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,1,2,5-9]))\\d{8}$");
Pattern p = Pattern.compile("^([0-9]{3})\\d{8}$");
Matcher m = p.matcher(mobiles);
return m.matches();
}

/**
* 验证输入是否为邮箱
*
* @param strEmail
* @return
*/
public static boolean isEmail(String strEmail) {
String strPattern = "^[a-zA-Z][\\w\\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\\w\\.-]*[a-zA-Z0-9]\\.[a-zA-Z][a-zA-Z\\.]*[a-zA-Z]$";
Pattern p = Pattern.compile(strPattern);
Matcher m = p.matcher(strEmail);
return m.matches();
}

/**
* 验证输入是否6位数字
*
* @param strEmail
* @return
*/
public static boolean isCode(String strCode) {
String strPattern = "^[0-9]{6}";
Pattern p = Pattern.compile(strPattern);
Matcher m = p.matcher(strCode);
return m.matches();
}

/**
* 验证输入是否6位字符包含数字和字母,不包含特殊字符
*
* @param strEmail
* @return
*/
public static boolean isCheckCode(String strCode) {
String strPattern = "^[0-9a-zA-Z]{6}";
Pattern p = Pattern.compile(strPattern);
Matcher m = p.matcher(strCode);
return m.matches();
}

/**
* 验证输入是否6到12位上字符包含数字和字母,包含特殊字符
*
* @param strEmail
* @return
*/
public static boolean isPassCode(String strCode) {
String strPattern = "^[0-9a-zA-Z@*%#()><!_~]{6,12}";
Pattern p = Pattern.compile(strPattern);
Matcher m = p.matcher(strCode);
return m.matches();
}

/**
* 过滤url
*
* @param str
* @return
*/
public static boolean isLegalUrlParameters(String str) {
String strPattern = "[&=\\s]+";
Pattern p = Pattern.compile(strPattern);
Matcher m = p.matcher(str);
return m.find();
}

/**
* 验证ip
*
* @param text
* @return
*/
public static boolean isIp(String text) {
if (text != null && text != "") {
// 定义正则表达式
String regex = "^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])\\."
+ "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."
+ "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."
+ "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$";
// 判断ip地址是否与正则表达式匹配
if (text.matches(regex)) {
// 返回判断信息
return true;
} else {
return false;
}
}
return false;
}

/**
* md5加密
*
* @param s
* @return
* @throws Exception
*/
public final static String MD5(String s) throws Exception {
char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f' };

byte[] strTemp = s.getBytes();
MessageDigest mdTemp = MessageDigest.getInstance("MD5");
mdTemp.update(strTemp);
byte[] md = mdTemp.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);
}

/**
* 加密
*
* @param sSrc
* 原文
* @param sKey
* 密码是16位
* @return
* @throws Exception
*/
public static String AESEncrypt(String sSrc, String sKey) throws Exception {
if (sKey == null) {
System.out.print("Key为空null");
return null;
}
// 判断Key是否为16位
if (sKey.length() != 16) {
System.out.print("Key无效");
return null;
}
byte[] raw = sKey.getBytes();
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec iv = new IvParameterSpec("0102030405060708".getBytes());
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encrypted = cipher.doFinal(sSrc.getBytes());
return byte2hex(encrypted).toLowerCase();
}

/**
* 解密
*
* @param sSrc
* @param sKey密码是16位
* @return
* @throws Exception
*/
public static String AESDecrypt(String sSrc, String sKey) throws Exception {
// 判断Key是否正确
if (sKey == null) {
System.out.print("Key为空null");
return null;
}
// 判断Key是否为16位
if (sKey.length() != 16) {
System.out.print("Key无效");
return null;
}
byte[] raw = sKey.getBytes("ASCII");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec iv = new IvParameterSpec("0102030405060708".getBytes());
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
byte[] encrypted1 = hex2byte(sSrc);
byte[] original = cipher.doFinal(encrypted1);
String originalString = new String(original);
return originalString;
}

private static final byte[] HEX_CHAR_TABLE = { (byte) '0', (byte) '1',
(byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6',
(byte) '7', (byte) '8', (byte) '9', (byte) 'A', (byte) 'B',
(byte) 'C', (byte) 'D', (byte) 'E', (byte) 'F' };

/**
* 十六进制无符号整数形式
*
* @param raw
* @param len
* @return
*/
public static String getHex(byte[] raw, int len) {
byte[] hex = new byte[2 * len];
int index = 0;
int pos = 0;

for (byte b : raw) {
if (pos >= len)
break;

pos++;
int v = b & 0xFF;
hex[index++] = HEX_CHAR_TABLE[v >>> 4];
hex[index++] = HEX_CHAR_TABLE[v & 0xF];
}
return new String(hex);
}

/**
* 转换为10进制无符号字符串
*
* @param bytes
* @return
*/
public static long getDec(byte[] bytes) {
long result = 0;
long factor = 1;
for (int i = 0; i < bytes.length; ++i) {
long value = bytes[i] & 0xffl;
result += value * factor;
factor *= 256l;
}
return result;
}

/**
* 二进制转换为16进制
*
* @param b
* @return
*/
public static String byte2hex(byte[] b) {
String hs = "";
String stmp = "";
for (int n = 0; n < b.length; n++) {
stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length() == 1) {
hs = hs + "0" + stmp;
} else {
hs = hs + stmp;
}
}
return hs.toUpperCase();
}

/**
* 16进制转换为二进制
*
* @param strhex
* @return
*/
public static byte[] hex2byte(String strhex) {
if (strhex == null) {
return null;
}
int l = strhex.length();
if (l % 2 == 1) {
return null;
}
byte[] b = new byte[l / 2];
for (int i = 0; i != l / 2; i++) {
b[i] = (byte) Integer.parseInt(strhex.substring(i * 2, i * 2 + 2),
16);
}
return b;
}

/**
* 16进制字符转换为int
*
* @param c
* @return
*/
public static int reverseToInt(char c) {
if (c == 'A')
return 10;
else if (c == 'B')
return 11;
else if (c == 'C')
return 12;
else if (c == 'D')
return 13;
else if (c == 'E')
return 14;
else if (c == 'F')
return 15;
else
return Integer.parseInt(String.valueOf(c));
}

/**
* 16进制加法
*
* @param src1
* @param src2
* @return
*/
public static String hexAdd(String src1, String src2) {
int length1 = src1.toUpperCase().length();
int length2 = src2.toUpperCase().length();
String extend = "";
char sum[] = null;
if (length1 > length2) {// 如果src1的长度大于src2
int num = length1 - length2;
sum = new char[length1];
String zero = "";
for (int i = 0; i < num; i++) {
zero += "0";
}
src2 = zero + src2;
// 遍历数组,然后相加
int add = 0, rest = 0;
for (int i = length1 - 1; i >= 0; i--) {
int a = reverseToInt(src1.toUpperCase().charAt(i));
int b = reverseToInt(src2.toUpperCase().charAt(i));
if (a + b + add >= 16) {
int temp = add;
add = (a + b + add) / 16;
rest = (a + b + temp) % 16;
sum[i] = reverseToChar(rest);
} else {
sum[i] = reverseToChar(a + b + add);
add = 0;
}
}
} else if (length1 < length2) {// src1的长度小于src2
int num = length2 - length1;
sum = new char[length2];
String zero = "";
for (int i = 0; i < num; i++) {
zero += "0";
}
src1 = zero + src1;
// 遍历数组,然后相加
int add = 0, rest = 0;
for (int i = length2 - 1; i >= 0; i--) {
int a = reverseToInt(src1.toUpperCase().charAt(i));
int b = reverseToInt(src2.toUpperCase().charAt(i));
if (a + b + add >= 16) {
int temp = add;
add = (a + b + add) / 16;
rest = (a + b + temp) % 16;
sum[i] = reverseToChar(rest);
} else {
sum[i] = reverseToChar(a + b + add);
add = 0;
}
}
} else {// 如果相等
// 遍历数组,然后相加
sum = new char[length2];
int add = 0, rest = 0;
for (int i = length2 - 1; i >= 0; i--) {
int a = reverseToInt(src1.toUpperCase().charAt(i));
int b = reverseToInt(src2.toUpperCase().charAt(i));
if (a + b + add >= 16) {
int temp = add;
add = (a + b + add) / 16;
rest = (a + b + temp) % 16;
sum[i] = reverseToChar(rest);
if (i == 0) {// 如果i==0
extend = String.valueOf(add);
}
} else {
sum[i] = reverseToChar(a + b + add);
add = 0;
}
}
}
return extend + String.valueOf(sum);
}

/**
* 整形转为16进制表示的char
*
* @param num
* @return
*/
public static char reverseToChar(int num) {
/*
* if (num == 10) return 'A'; else if (num == 11) return 'B'; else if
* (num == 12) return 'C'; else if (num == 13) return 'D'; else if (num
* == 14) return 'E'; else if (num == 15) return 'F'; else return
* String.valueOf(num).charAt(0);
*/
return Integer.toHexString(num).charAt(0);
}

/**
* 16进制字符按位取反
*
* @param num
* @return
*/
public static String revers(String num) {
num = num.toUpperCase();
char array[] = num.toCharArray();
for (int i = 0; i < array.length; i++) {
if (array[i] == 'A')
array[i] = reverseToChar(15 - 10);
else if (array[i] == 'B')
array[i] = reverseToChar(15 - 11);
else if (array[i] == 'C')
array[i] = reverseToChar(15 - 12);
else if (array[i] == 'D')
array[i] = reverseToChar(15 - 13);
else if (array[i] == 'E')
array[i] = reverseToChar(15 - 14);
else if (array[i] == 'F')
array[i] = reverseToChar(15 - 15);
else
array[i] = reverseToChar(15 - Integer.parseInt(String
.valueOf(array[i])));
}
//
return String.valueOf(array);
}

/**
* 输入流转换为byte数组
*
* @param is
* @return
* @throws IOException
*/
public static byte[] streamToBytes(InputStream is) throws IOException {
ByteArrayOutputStream os = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];

int len;
while ((len = is.read(buffer)) != -1) {
os.write(buffer, 0, len);
}
return os.toByteArray();
}

/**
* 将输入流转为字符串
*
* @param is
* 输入流
* @param encode
* 编码方式
* @return
* @throws Exception
*/
public static String streamToString(InputStream is, String encode)
throws Exception {

byte[] data = streamToBytes(is);
return new String(data, encode);
}

/**
* 将String转换成InputStream
*
* @param in
* @return
* @throws UnsupportedEncodingException
* @throws Exception
*/
public static InputStream StringTOInputStream(String in, String encode)
throws IOException {
ByteArrayInputStream is = new ByteArrayInputStream(in.getBytes(encode));
return is;
}

/**
* 将byte数组转换为输入流
*
* @param data
* @return
*/
public static InputStream ByteToStream(byte[] data) {
ByteArrayInputStream os = new ByteArrayInputStream(data);
return os;
}

/**
* 资源文件转换为bitmap
*
* @param context
* @param resId
* @return
*/
public static Bitmap getBitmapFromResource(Context context, int resId) {
InputStream is = context.getResources().openRawResource(resId);
return BitmapFactory.decodeStream(is);
}

/**
* 返回当前日期xxxx年x月xx日x星期
*
* @return
*/
public static String getDate() {
Date date = new Date();
Calendar c = Calendar.getInstance();
c.setTime(date);
String[] weekDays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
int w = c.get(Calendar.DAY_OF_WEEK) - 1;
if (w < 0) {
w = 0;
}
String mDate = c.get(Calendar.YEAR) + "年" + c.get(Calendar.MONTH) + "月"
+ c.get(Calendar.DATE) + "日 " + weekDays[w];
return mDate;
}
}


更多相关文章

  1. Android直播系统平台搭建之图片实现阴影效果的方法小结
  2. 一步教你超简单设置Android(安卓)Studio背景图片
  3. Android改变button背景色与获取button背景色
  4. aapt: Android(安卓)Asset Packaging Tool
  5. Android(安卓)获取屏幕的分辨率
  6. Android轮播图Banner使用方法
  7. Android标准Glide加载圆形图和圆角矩形图
  8. Android——SAX方式解析XML数据
  9. 【Android】debug 状态下其签名文件 debug.keystore 相关(如何获

随机推荐

  1. Android原生的TTS(语音播报功能)
  2. 如何完全卸载Android(安卓)Studio并进行
  3. 浅析Binder(六)——Java服务启动
  4. Android开发--浅谈ExpandableListActivit
  5. Android报错之.android/repositories.cfg
  6. Android类库介绍
  7. Android查询:模拟键盘鼠标事件(adb shell
  8. android中求区域内两个坐标之间的距离的
  9. 【Android(安卓)学习】之二维码扫描开发(
  10. Android(安卓)NavigationBar隐藏与浮层