android 常用方法总结
- 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);
- }
- };
- // 從網絡中下載
- 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;
- }
- }
android 常用方法总结的更多相关文章
- android 常用方法集合
private static Contextcontext; privatestatic Displaydisplay; private static String TAG = "MyToo ...
- 【汇总】Android 常用方法整理
1.解决ActionBar OverFlow按钮不显示.(在oncreate中调用即可) private void setOverflowShowingAlways() { try { ViewCon ...
- Appium初识
一. Appium工作原理 基本工作流程如下: Appium提供了一套web服务,Appium起一个Server(4723端口),用于与脚本client通信. server接收web driver(即 ...
- android页面渲染速度提升的常用方法
参考文档:http://blog.csdn.net/vector_yi/article/details/24402101 当activity中用到的布局较多较为复杂时,页面渲染就会变得复杂,现汇总以下 ...
- Android JNI学习(四)——JNI的常用方法的中文API
本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...
- Android MediaPlayer 常用方法介绍
Android MediaPlayer 常用方法介绍 方法:create(Context context, Uri uri) 解释:静态方法,通过Uri创建一个多媒体播放器. 方法:create(Co ...
- Android 中的常用方法
//安装apk文件 private void installAPK(File file) { Intent intent = newIntent(Intent.ACTION_VIEW); Uri ...
- android工具类常用方法
1.获取手机唯一识别号 添加AndroidManifest.xml权限 <uses-permission android:name="android.permission.READ_P ...
- android.util.Log常用方法
android.util.Log常用的方法有以下5个: Log.v() Log.d() Log.i() Log.w() 以及 Log.e() .根据首字母分别对应VERBOSE,DEBUG,INFO, ...
随机推荐
- Java面向对象内测
功能要求 开发基于控制台的试题信息管理系统.具体要求如下: (1)显示试题信息管理系统主菜单,包括: 1)列出所有试题信息 2)按科目查询 3)按题干查询 4)添加试题 5)删除试题 6)退出系统 p ...
- c#异步线程:同步调用,异步调用,异步回调
定义一个异步线程类: public class AsyEventClass { private static ILog logger = LogManager.GetLogger(MethodBase ...
- andriod读写XML
AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xm ...
- python3.6使用pickle序列化class
from library.connecter.database.mongo import Op_Mongo a = pickle.dumps(Op_Mongo) #序列化 b = pickle.loa ...
- 如何设计好的RESTful API 之好的RESTful API 特征
原文地址:http://blog.csdn.net/ywk253100/article/details/25654021 导读:设计好RESTful API对于软件架构的可扩展性.可伸缩性和消费者的体 ...
- python中pickle简介
2017-04-10 pickle是用来加工数据的,可以用来存取结构化数据. 例如: 一个字典a = {'name':'Timmy','age':26},用pickle.dump存到本地文件,所存数据 ...
- 编译安装Nginx和php搭建KodExplorer网盘
编译安装Nginx和php搭建KodExplorer网盘 环境说明: 系统版本 CentOS 6.9 x86_64 软件版本 nginx-1.12.2 php ...
- C++基础学习教程(一)
開始自己的C++复习进阶之路. 声明: 这次写的博文纯当是一个回想复习的教程.一些非常基础的知识将不再出现.或者一掠而过,这次的主要风格就是演示样例代码非常多~~~ 全部代码在Ubuntu 14.04 ...
- Eclipse对于多个Java项目的支持并不友好!
本文吐槽! 如果我们创建两个Java项目.一个叫StatsReader.把数据从网上下载到本地数据库里.一个叫StatsViewer.把数据从数据库里拿出来呈现给用户.这两个项目都要用同一个外部类库m ...
- Java 分支结构 - if...else/switch
Java 分支结构 - if...else/switch 顺序结构只能顺序执行,不能进行判断和选择,因此需要分支结构. Java 有两种分支结构: if 语句 switch 语句 if 语句 一个 i ...