1包的相關操作
package com.example.coshenwancheng.utils; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.net.Uri; import java.io.File; import java.util.ArrayList; import java.util.List; /** * @desc: 包的相關操作 */ public class PackageUtils { /** * Check whether a particular package has been granted a particular permission. * 檢查包是否授予權限 * * @param context * @param permName * @param pkgName * @return */ public static boolean checkPermission(Context context, String permName, String pkgName) { PackageManager pm = context.getPackageManager(); boolean permission = (PackageManager.PERMISSION_GRANTED == pm.checkPermission(permName, pkgName)); return permission; } /** * Check whether a particular package has been granted a particular permission. * 檢查包是否授予權限 * * @param context * @param permName * @return */ public static boolean checkPermission(Context context, String permName) { int perm = context.checkCallingOrSelfPermission(permName); return perm == PackageManager.PERMISSION_GRANTED; } /** * Install package * 安裝apk * * @param context * @param filePath * @return */ public static boolean install(Context context, String filePath) { Intent i = new Intent(Intent.ACTION_VIEW); File file = new File(filePath); if (file == null || !file.exists() || !file.isFile() || file.length() <= 0) { return false; } i.setDataAndType(Uri.parse("file://" + filePath), "application/vnd.android.package-archive"); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); return true; } /** * Uninstall package * 卸載apk * * @param context * @param packageName * @return */ public static boolean uninstall(Context context, String packageName) { if (packageName == null || packageName.length() == 0) { return false; } Intent i = new Intent(Intent.ACTION_DELETE, Uri.parse(new StringBuilder(32).append("package:") .append(packageName).toString())); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); return true; } /** * Judge whether packageName is a system application * 判斷是否是一個系統的應用軟件 * * @param context * @return */ public static boolean isSystemApplication(Context context) { if (context == null) { return false; } return isSystemApplication(context, context.getPackageName()); } /** * Judge whether packageName is a system application * 判斷是否是一個系統的應用軟件 * * @param context * @param packageName * @return */ public static boolean isSystemApplication(Context context, String packageName) { if (context == null) { return false; } return isSystemApplication(context.getPackageManager(), packageName); } /** * Judge whether packageName is a system application * 判斷是否是一個系統的應用軟件 * * @param packageManager * @param packageName * @return */ public static boolean isSystemApplication(PackageManager packageManager, String packageName) { if (packageManager == null || packageName == null || packageName.length() == 0) { return false; } try { ApplicationInfo app = packageManager.getApplicationInfo(packageName, 0); return (app != null && (app.flags & ApplicationInfo.FLAG_SYSTEM) > 0); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return false; } /** * Get installed package infos * 獲取安裝包信息 * * @param context * @return */ public static List<PackageInfo> getInsatalledPackageInfos(Context context) { return context.getPackageManager().getInstalledPackages(0); } /** * Judge whether the packageName is installed * 判斷是否安裝了軟件 * * @param context * @param packageName * @return */ public static boolean isInsatalled(Context context, String packageName) { if (!StringUtils.isEmpty(packageName)) { List<PackageInfo> list = getInsatalledPackageInfos(context); if (!CollectionUtils.isEmpty(list)) { for (PackageInfo pi : list) { if (packageName.equalsIgnoreCase(pi.packageName)) { return true; } } } } return false; } /** * Get all apps * 獲取所有的APP * * @param context * @return */ public static List<PackageInfo> getAllApps(Context context) { List<PackageInfo> apps = new ArrayList<PackageInfo>(); PackageManager packageManager = context.getPackageManager(); List<PackageInfo> packageInfos = packageManager.getInstalledPackages(0); for (int i = 0; i < packageInfos.size(); i++) { PackageInfo pak = packageInfos.get(i); if ((pak.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) { apps.add(pak); } } return apps; } /** * Start app by packageName * 通過包名啓動應用程序 * * @param context * @param packageName */ public static void startApp(Context context, String packageName) { PackageInfo packageinfo = null; try { packageinfo = context.getPackageManager().getPackageInfo(packageName, 0); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } if (packageinfo == null) { return; } Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null); resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER); resolveIntent.setPackage(packageinfo.packageName); List<ResolveInfo> resolveinfoList = context.getPackageManager() .queryIntentActivities(resolveIntent, 0); ResolveInfo resolveinfo = resolveinfoList.iterator().next(); if (resolveinfo != null) { String pkgName = resolveinfo.activityInfo.packageName; String className = resolveinfo.activityInfo.name; Intent intent = new Intent(Intent.ACTION_MAIN); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addCategory(Intent.CATEGORY_LAUNCHER); ComponentName cn = new ComponentName(pkgName, className); intent.setComponent(cn); context.startActivity(intent); } } }
2獲取隨機數操作類
package com.example.coshenwancheng.utils; import java.util.Random; /** * @desc: 獲取隨機數操作類 */ public class RandomUtils { /** * Returns a pseudo-random uniformly distributed {@code int}. * 返回僞隨機均勻分佈 * * @return */ public static int randomInt() { Random random = new Random(); return random.nextInt(); } /** * Returns a pseudo-random uniformly distributed {@code int} in the half-open range [0, n). * * @param n * @return */ public static int randomInt(int n) { Random random = new Random(); return random.nextInt(n); } /** * Returns a pseudo-random uniformly distributed {@code int} in the half-open range [min, max]. * * @param min * @param max * @return */ public static int randomInt(int min, int max) { Random random = new Random(); return random.nextInt(max) % (max - min + 1) + min; } /** * Returns a pseudo-random uniformly distributed {@code int} in the half-open range [0, n). * * @param n * @return */ public static int randomInt2(int n) { return (int) (System.currentTimeMillis() % n); } /** * Returns a pseudo-random uniformly distributed {@code int} in the half-open range [0, n). * * @param n * @return */ public static int randomInt3(int n) { return (int) (Math.random() * 100); } /** * Returns a pseudo-random uniformly distributed {@code float} in the half-open range [0.0, 1.0). * * @return */ public static float randomFloat() { Random random = new Random(); return random.nextFloat(); } /** * Returns a pseudo-random uniformly distributed {@code double} in the half-open range [0.0, 1.0). * * @return */ public static double randomDouble() { Random random = new Random(); return random.nextDouble(); } /** * Returns a pseudo-random uniformly distributed {@code long}. * * @return */ public static long randomLong() { Random random = new Random(); return random.nextLong(); } /** * Returns a pseudo-random uniformly distributed {@code boolean}. * * @return */ public static boolean randomBoolean() { Random random = new Random(); return random.nextBoolean(); } /** * Returns a pseudo-random (approximately) normally distributed {@code double} with mean 0.0 and standard deviation * 1.0. This method uses the <i>polar method</i> of G. E. P. Box, M. E. Muller, and G. Marsaglia, as described by * Donald E. Knuth in <i>The Art of Computer Programming, Volume 2: Seminumerical Algorithms</i>, section 3.4.1, * subsection C, algorithm P. * * @return */ public static double randomGaussian() { Random random = new Random(); return random.nextGaussian(); } /** * Fills {@code buf} with random bytes. * * @param buf */ public static void randomBytes(byte[] buf) { Random random = new Random(); random.nextBytes(buf); } /** * Get a random string * 得到一個隨機字符串 * * @param source * @param length * @return */ public static String randomString(String source, int length) { return StringUtils.isEmpty(source) ? null : randomString(source.toCharArray(), length); } /** * Get a random string * 得到一個隨機字符串 * * @param sourceChar * @param length * @return */ public static String randomString(char[] sourceChar, int length) { if (sourceChar == null || sourceChar.length == 0 || length < 0) { return null; } StringBuilder builder = new StringBuilder(length); for (int i = 0; i < length; i++) { builder.append(sourceChar[randomInt(sourceChar.length)]); } return builder.toString(); } /** * Shuffling a int array * 重新排序數組 * * @param intArray * @return */ public static int[] shuffle(int[] intArray) { if (intArray == null) { return null; } return shuffle(intArray, intArray.length); } /** * Shuffling a int array * 重新排序數組 * * @param intArray * @param shuffleCount * @return */ public static int[] shuffle(int[] intArray, int shuffleCount) { int length; if (intArray == null || shuffleCount < 0 || (length = intArray.length) < shuffleCount) { return null; } int[] out = new int[shuffleCount]; for (int i = 1; i <= shuffleCount; i++) { int random = randomInt(length - i); out[i - 1] = intArray[random]; int temp = intArray[length - i]; intArray[length - i] = intArray[random]; intArray[random] = temp; } return out; } }
3SD卡相關的輔助類
package com.example.coshenwancheng.utils; import java.io.File; import android.os.Environment; import android.os.StatFs; /** * SD卡相關的輔助類 */ public class SDCardUtils { private SDCardUtils() { /** cannot be instantiated **/ throw new UnsupportedOperationException("cannot be instantiated"); } /** * 判斷SDCard是否可用 * * @return */ public static boolean isSDCardEnable() { return Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED); } /** * 獲取SD卡路徑 * * @return */ public static String getSDCardPath() { return Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator; } /** * 獲取SD卡的剩餘容量 單位byte * * @return */ public static long getSDCardAllSize() { if (isSDCardEnable()) { StatFs stat = new StatFs(getSDCardPath()); // 獲取空閒的數據塊的數量 long availableBlocks = (long) stat.getAvailableBlocks() - 4; // 獲取單個數據塊的大小(byte) long freeBlocks = stat.getAvailableBlocks(); return freeBlocks * availableBlocks; } return 0; } /** * 獲取指定路徑所在空間的剩餘可用容量字節數,單位byte * * @param filePath * @return 容量字節 SDCard可用空間,內部存儲可用空間 */ public static long getFreeBytes(String filePath) { // 如果是sd卡的下的路徑,則獲取sd卡可用容量 if (filePath.startsWith(getSDCardPath())) { filePath = getSDCardPath(); } else {// 如果是內部存儲的路徑,則獲取內存存儲的可用容量 filePath = Environment.getDataDirectory().getAbsolutePath(); } StatFs stat = new StatFs(filePath); long availableBlocks = (long) stat.getAvailableBlocks() - 4; return stat.getBlockSize() * availableBlocks; } /** * 獲取系統存儲路徑 * * @return */ public static String getRootDirectoryPath() { return Environment.getRootDirectory().getAbsolutePath(); } }
4序列化和反序列化操作類
package com.example.coshenwancheng.utils; import android.content.Context; import java.io.Externalizable; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InvalidClassException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; /** * @desc: 序列化和反序列化操作類 */ public class SerializableUtils { /** * 序列化數據 * * @param context * @param fileName * @param obj * @throws IOException */ public static void serializeData(Context context, String fileName, Object obj) throws IOException { if (!(obj instanceof Serializable) && !(obj instanceof Externalizable)) { throw new InvalidClassException("Object must be serialized!"); } FileOutputStream fos = context.openFileOutput(fileName, Context.MODE_PRIVATE); ObjectOutputStream ostream = new ObjectOutputStream(fos); ostream.writeObject(obj); ostream.flush(); ostream.close(); fos.close(); } /** * 反序列化數據 * * @param context * @param fileName * @return * @throws ClassNotFoundException * @throws IOException */ public static Object deserializeData(Context context, String fileName) throws ClassNotFoundException, IOException { FileInputStream fis = context.openFileInput(fileName); ObjectInputStream s = new ObjectInputStream(fis); Object obj = s.readObject(); s.close(); fis.close(); return obj; } }
5服務開啓與關閉
package com.example.coshenwancheng.utils; import android.app.ActivityManager; import android.content.Context; import android.content.Intent; import java.util.List; /** * @desc: 服務開啓與關閉 */ public class ServiceUtils { /** * Judge whether a service is running * * @param context * @param className * @return */ public static boolean isServiceRunning(Context context, String className) { boolean isRunning = false; ActivityManager activityManager = (ActivityManager) context .getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningServiceInfo> serviceInfos = activityManager .getRunningServices(Integer.MAX_VALUE); for (ActivityManager.RunningServiceInfo si : serviceInfos) { if (className.equals(si.service.getClassName())) { isRunning = true; } } return isRunning; } /** * Stop running service * * @param context * @param className * @return */ public static boolean stopRunningService(Context context, String className) { Intent intent_service = null; boolean ret = false; try { intent_service = new Intent(context, Class.forName(className)); } catch (Exception e) { e.printStackTrace(); } if (intent_service != null) { ret = context.stopService(intent_service); } return ret; } }
6字符串操作
package com.example.coshenwancheng.utils; import android.text.TextUtils; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; import java.util.Locale; /** * @desc: 字符串操作 */ public class StringUtils { /** * Judge whether a string is whitespace, empty ("") or null. * * @param str * @return */ public static boolean isEmpty(String str) { int strLen; if (str == null || (strLen = str.length()) == 0 || str.equalsIgnoreCase("null")) { return true; } for (int i = 0; i < strLen; i++) { if ((Character.isWhitespace(str.charAt(i)) == false)) { return false; } } return true; } /** * Returns true if a and b are equal, including if they are both null. * * @param a * @param b * @return */ public static boolean equals(CharSequence a, CharSequence b) { return TextUtils.equals(a, b); } /** * Judge whether a string is number. * * @param str * @return */ public static boolean isNumeric(String str) { for (int i = str.length(); --i >= 0; ) { if (!Character.isDigit(str.charAt(i))) { return false; } } return true; } /** * Encode a string * * @param str * @return */ public static String encodeString(String str) { try { return URLEncoder.encode(str, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); return str; } } /** * Decode a string * * @param str * @return */ public static String decodeString(String str) { try { return URLDecoder.decode(str, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); return str; } } /** * Converts this string to lower case, using the rules of {@code locale}. * * @param s * @return */ public static String toLowerCase(String s) { return s.toLowerCase(Locale.getDefault()); } /** * Converts this this string to upper case, using the rules of {@code locale}. * * @param s * @return */ public static String toUpperCase(String s) { return s.toUpperCase(Locale.getDefault()); } }
7獲取系統信息工具類
package com.example.coshenwancheng.utils; import android.os.Build; /** * @desc: 獲取系統信息工具類 */ public class SystemUtils { /** * ART * * @return */ public static boolean isART() { final String vmVersion = System.getProperty("java.vm.version"); return vmVersion != null && vmVersion.startsWith("2"); } /** * DALVIK * * @return */ public static boolean isDalvik() { final String vmVersion = System.getProperty("java.vm.version"); return vmVersion != null && vmVersion.startsWith("1"); } /** * The brand (e.g., Xiaomi) the software is customized for, if any. * * @return */ public static String getBrand() { return Build.BRAND; } /** * The name of the underlying board, like "MSM8660_SURF". * * @return */ public static String getBoard() { return Build.BOARD; } /** * The end-user-visible name for the end product, like "MI-ONE Plus". * * @return */ public static String getModel() { return Build.MODEL; } /** * Either a changelist number, or a label like "JZO54K". * * @return */ public static String getID() { return Build.ID; } /** * The user-visible version string, like "4.1.2". * * @return */ public static String getVersionRelease() { return Build.VERSION.RELEASE; } /** * The user-visible SDK version of the framework. * * @return */ public static int getVersionSDK() { return Build.VERSION.SDK_INT; } /** * A string that uniquely identifies this build. Do not attempt to parse this value. * * @return */ public static String getFingerPrint() { return Build.FINGERPRINT; } /** * The name of the overall product, like "mione_plus". * * @return */ public static String getProduct() { return Build.PRODUCT; } /** * The manufacturer of the product/hardware, like "Xiaomi". * * @return */ public static String getManufacturer() { return Build.MANUFACTURER; } /** * The name of the industrial design, like "mione_plus". * * @return */ public static String getDevice() { return Build.DEVICE; } /** * The name of the instruction set (CPU type + ABI convention) of native code, like "armeabi-v7a". * * @return */ public static String getCpuAbi() { return Build.CPU_ABI; } /** * The name of the second instruction set (CPU type + ABI convention) of native code, like "armeabi". * * @return */ public static String getCpuAbi2() { return Build.CPU_ABI2; } /** * A build ID string meant for displaying to the user, like "JZO54K". * * @return */ public static String getDisplay() { return Build.DISPLAY; } }
8時間工具類
/* * Copyright 2016 北京博瑞彤芸文化傳播股份有限公司 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.example.coshenwancheng.utils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Locale; import java.util.TimeZone; /** * @description 時間工具類 */ public class TimeUtils { private TimeUtils() { throw new UnsupportedOperationException("u can't fuck me..."); } /** * <p>在工具類中經常使用到工具類的格式化描述,這個主要是一個日期的操作類,所以日誌格式主要使用 SimpleDateFormat的定義格式.</p> * 格式的意義如下: 日期和時間模式 <br> * <p>日期和時間格式由日期和時間模式字符串指定。在日期和時間模式字符串中,未加引號的字母 'A' 到 'Z' 和 'a' 到 'z' * 被解釋爲模式字母,用來表示日期或時間字符串元素。文本可以使用單引號 (') 引起來,以免進行解釋。"''" * 表示單引號。所有其他字符均不解釋;只是在格式化時將它們簡單複製到輸出字符串,或者在分析時與輸入字符串進行匹配。 * </p> * 定義了以下模式字母(所有其他字符 'A' 到 'Z' 和 'a' 到 'z' 都被保留): <br> * <table border="1" cellspacing="1" cellpadding="1" summary="Chart shows pattern letters, date/time component, * presentation, and examples."> * <tr> * <th align="left">字母</th> * <th align="left">日期或時間元素</th> * <th align="left">表示</th> * <th align="left">示例</th> * </tr> * <tr> * <td><code>G</code></td> * <td>Era 標誌符</td> * <td>Text</td> * <td><code>AD</code></td> * </tr> * <tr> * <td><code>y</code> </td> * <td>年 </td> * <td>Year </td> * <td><code>1996</code>; <code>96</code> </td> * </tr> * <tr> * <td><code>M</code> </td> * <td>年中的月份 </td> * <td>Month </td> * <td><code>July</code>; <code>Jul</code>; <code>07</code> </td> * </tr> * <tr> * <td><code>w</code> </td> * <td>年中的週數 </td> * <td>Number </td> * <td><code>27</code> </td> * </tr> * <tr> * <td><code>W</code> </td> * <td>月份中的週數 </td> * <td>Number </td> * <td><code>2</code> </td> * </tr> * <tr> * <td><code>D</code> </td> * <td>年中的天數 </td> * <td>Number </td> * <td><code>189</code> </td> * </tr> * <tr> * <td><code>d</code> </td> * <td>月份中的天數 </td> * <td>Number </td> * <td><code>10</code> </td> * </tr> * <tr> * <td><code>F</code> </td> * <td>月份中的星期 </td> * <td>Number </td> * <td><code>2</code> </td> * </tr> * <tr> * <td><code>E</code> </td> * <td>星期中的天數 </td> * <td>Text </td> * <td><code>Tuesday</code>; <code>Tue</code> </td> * </tr> * <tr> * <td><code>a</code> </td> * <td>Am/pm 標記 </td> * <td>Text </td> * <td><code>PM</code> </td> * </tr> * <tr> * <td><code>H</code> </td> * <td>一天中的小時數(0-23) </td> * <td>Number </td> * <td><code>0</code> </td> * </tr> * <tr> * <td><code>k</code> </td> * <td>一天中的小時數(1-24) </td> * <td>Number </td> * <td><code>24</code> </td> * </tr> * <tr> * <td><code>K</code> </td> * <td>am/pm 中的小時數(0-11) </td> * <td>Number </td> * <td><code>0</code> </td> * </tr> * <tr> * <td><code>h</code> </td> * <td>am/pm 中的小時數(1-12) </td> * <td>Number </td> * <td><code>12</code> </td> * </tr> * <tr> * <td><code>m</code> </td> * <td>小時中的分鐘數 </td> * <td>Number </td> * <td><code>30</code> </td> * </tr> * <tr> * <td><code>s</code> </td> * <td>分鐘中的秒數 </td> * <td>Number </td> * <td><code>55</code> </td> * </tr> * <tr> * <td><code>S</code> </td> * <td>毫秒數 </td> * <td>Number </td> * <td><code>978</code> </td> * </tr> * <tr> * <td><code>z</code> </td> * <td>時區 </td> * <td>General time zone </td> * <td><code>Pacific Standard Time</code>; <code>PST</code>; <code>GMT-08:00</code> </td> * </tr> * <tr> * <td><code>Z</code> </td> * <td>時區 </td> * <td>RFC 822 time zone </td> * <td><code>-0800</code> </td> * </tr> * </table> * <pre> * HH:mm 15:44 * h:mm a 3:44 下午 * HH:mm z 15:44 CST * HH:mm Z 15:44 +0800 * HH:mm zzzz 15:44 中國標準時間 * HH:mm:ss 15:44:40 * yyyy-MM-dd 2016-08-12 * yyyy-MM-dd HH:mm 2016-08-12 15:44 * yyyy-MM-dd HH:mm:ss 2016-08-12 15:44:40 * yyyy-MM-dd HH:mm:ss zzzz 2016-08-12 15:44:40 中國標準時間 * EEEE yyyy-MM-dd HH:mm:ss zzzz 星期五 2016-08-12 15:44:40 中國標準時間 * yyyy-MM-dd HH:mm:ss.SSSZ 2016-08-12 15:44:40.461+0800 * yyyy-MM-dd'T'HH:mm:ss.SSSZ 2016-08-12T15:44:40.461+0800 * yyyy.MM.dd G 'at' HH:mm:ss z 2016.08.12 公元 at 15:44:40 CST * K:mm a 3:44 下午 * EEE, MMM d, ''yy 星期五, 八月 12, '16 * hh 'o''clock' a, zzzz 03 o'clock 下午, 中國標準時間 * yyyyy.MMMMM.dd GGG hh:mm aaa 02016.八月.12 公元 03:44 下午 * EEE, d MMM yyyy HH:mm:ss Z 星期五, 12 八月 2016 15:44:40 +0800 * yyMMddHHmmssZ 160812154440+0800 * yyyy-MM-dd'T'HH:mm:ss.SSSZ 2016-08-12T15:44:40.461+0800 * EEEE 'DATE('yyyy-MM-dd')' 'TIME('HH:mm:ss')' zzzz 星期五 DATE(2016-08-12) TIME(15:44:40) 中國標準時間 * </pre> */ public static final SimpleDateFormat DEFAULT_SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); public static final SimpleDateFormat CN_MM_DD_SDF = new SimpleDateFormat("MM月dd日", Locale.getDefault()); public static final SimpleDateFormat CN_M_D_SDF = new SimpleDateFormat("M月d日", Locale.getDefault()); public static final SimpleDateFormat EN_YYYY_MM_DD_SDF = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()); public static final SimpleDateFormat CN_YYYY_MM_DD_SDF = new SimpleDateFormat("yyyy年MM月dd日", Locale.getDefault()); public static final SimpleDateFormat CN_YYYY_M_D_SDF = new SimpleDateFormat("yyyy年M月d日", Locale.getDefault()); public static final SimpleDateFormat EN_M_D_SDF = new SimpleDateFormat("M/d", Locale.getDefault()); public static final SimpleDateFormat EN_MM_DD_SDF = new SimpleDateFormat("MM-dd", Locale.getDefault()); public static final SimpleDateFormat EN_HH_mm = new SimpleDateFormat("HH:mm", Locale.getDefault()); /** * 將時間戳轉爲時間字符串 * <p>格式爲yyyy-MM-dd HH:mm:ss</p> * * @param milliseconds 毫秒時間戳 * @return 時間字符串 */ public static String milliseconds2String(long milliseconds) { return milliseconds2String(milliseconds, DEFAULT_SDF); } /** * 將時間戳轉爲時間字符串 * <p>格式爲用戶自定義</p> * * @param milliseconds 毫秒時間戳 * @param format 時間格式 * @return 時間字符串 */ public static String milliseconds2String(long milliseconds, SimpleDateFormat format) { return format.format(new Date(milliseconds)); } /** * 將時間字符串轉爲時間戳 * <p>格式爲yyyy-MM-dd HH:mm:ss</p> * * @param time 時間字符串 * @return 毫秒時間戳 */ public static long string2Milliseconds(String time) { return string2Milliseconds(time, DEFAULT_SDF); } /** * 將時間字符串轉爲時間戳 * <p>格式爲用戶自定義</p> * * @param time 時間字符串 * @param format 時間格式 * @return 毫秒時間戳 */ public static long string2Milliseconds(String time, SimpleDateFormat format) { try { return format.parse(time).getTime(); } catch (ParseException e) { e.printStackTrace(); } return -1; } /** * 將時間字符串轉爲Date類型 * <p>格式爲yyyy-MM-dd HH:mm:ss</p> * * @param time 時間字符串 * @return Date類型 */ public static Date string2Date(String time) { return string2Date(time, DEFAULT_SDF); } /** * 將時間字符串轉爲Date類型 * <p>格式爲用戶自定義</p> * * @param time 時間字符串 * @param format 時間格式 * @return Date類型 */ public static Date string2Date(String time, SimpleDateFormat format) { return new Date(string2Milliseconds(time, format)); } /** * 將Date類型轉爲時間字符串 * <p>格式爲yyyy-MM-dd HH:mm:ss</p> * * @param time Date類型時間 * @return 時間字符串 */ public static String date2String(Date time) { return date2String(time, DEFAULT_SDF); } /** * 將Date類型轉爲時間字符串 * <p>格式爲用戶自定義</p> * * @param time Date類型時間 * @param format 時間格式 * @return 時間字符串 */ public static String date2String(Date time, SimpleDateFormat format) { return format.format(time); } /** * 將Date類型轉爲時間戳 * * @param time Date類型時間 * @return 毫秒時間戳 */ public static long date2Milliseconds(Date time) { return time.getTime(); } /** * 將時間戳轉爲Date類型 * * @param milliseconds 毫秒時間戳 * @return Date類型時間 */ public static Date milliseconds2Date(long milliseconds) { return new Date(milliseconds); } /** * 獲取兩個毫秒值之間的時間差(天數) * * @param time1 * @param time2 一般time2寫較大的值 * @return */ public static int getIntervalTime(long time1, long time2){ return (int) ((time2 - time1) / (1000 * 3600 * 24)); } /** * 獲取當前時間 * * @return 毫秒時間戳 */ public static long getCurTimeMills() { return System.currentTimeMillis(); } /** * 獲取當前時間 * <p>格式爲yyyy-MM-dd HH:mm:ss</p> * * @return 時間字符串 */ public static String getCurTimeString() { return date2String(new Date()); } /** * 獲取當前時間 * <p>格式爲用戶自定義</p> * * @param format 時間格式 * @return 時間字符串 */ public static String getCurTimeString(SimpleDateFormat format) { return date2String(new Date(), format); } /** * 獲取當前時間 * <p>Date類型</p> * * @return Date類型時間 */ public static Date getCurTimeDate() { return new Date(); } /** * 判斷閏年 * * @param year 年份 * @return {@code true}: 閏年<br>{@code false}: 平年 */ public static boolean isLeapYear(int year) { return year % 4 == 0 && year % 100 != 0 || year % 400 == 0; } /** * 獲取當前日期是星期幾<br> * * @return 當前日期是星期幾 */ public static String getWeekOfDate() { String[] weekDays = {"週日", "週一", "週二", "週三", "週四", "週五", "週六"}; Calendar cal = Calendar.getInstance(); cal.setTime(new Date()); int w = cal.get(Calendar.DAY_OF_WEEK) - 1; if (w < 0) w = 0; return weekDays[w]; } /** * 獲取當前日期是星期幾<br> * * @return 當前日期是星期幾 */ public static String getWeek() { String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; Calendar cal = Calendar.getInstance(); cal.setTime(new Date()); int w = cal.get(Calendar.DAY_OF_WEEK) - 1; if (w < 0) w = 0; return weekDays[w]; } /** * 獲取當前日期的下一天是星期幾<br> * * @return 當前日期是星期幾 */ public static String getWeekOfNextDate() { String[] weekDays = {"週日", "週一", "週二", "週三", "週四", "週五", "週六"}; Calendar cal = Calendar.getInstance(); cal.setTime(new Date()); int w = cal.get(Calendar.DAY_OF_WEEK); if (w == 0) w = 1; if (w > 6) w = 0; return weekDays[w]; } /** * 獲取桌面時鐘的時間 */ public static String getDeskClockTime() { final Calendar c = Calendar.getInstance(); c.setTimeZone(TimeZone.getTimeZone("GMT+8:00")); String mHuor = String.valueOf(c.get(Calendar.HOUR_OF_DAY)); String imnute = String.valueOf(c.get(Calendar.MINUTE)); if (imnute.length() < 2) { imnute = "0" + imnute; } if (mHuor.length() < 2) { mHuor = "0" + mHuor; } return mHuor + ":" + imnute; } /** * 獲取當前月份是幾月 */ public static String getCurMonth() { Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH) + 1; String monthString = null; if (month < 10) { monthString = 0 + "" + month; } else { monthString = "" + month; } /** * 月份從0開始計算 */ return year + "-" + monthString; } /** * 獲取兩個月份差值 * * @param month1 * @param month2 * @return */ public static int getDistanceOfTwoMonth(String month1, String month2) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); Calendar bef = Calendar.getInstance(); Calendar aft = Calendar.getInstance(); bef.setTime(sdf.parse(month1)); aft.setTime(sdf.parse(month2)); int result = aft.get(Calendar.MONTH) - bef.get(Calendar.MONTH); int month = (aft.get(Calendar.YEAR) - bef.get(Calendar.YEAR)) * 12; return Math.abs(month + result); } /** * 判斷舊日期和新日期【新舊根據獲取先後而定】的先後關係,如果新日期大於舊日期則返回true */ public static boolean compareDates(int oldYear, int oldMonth, int oldDay, int newYear, int newMonth, int newDay) { if (newYear != oldYear) return !(newYear < oldYear); if (newMonth != oldMonth) return !(newMonth < oldMonth); if (newDay != oldDay) return !(newDay < oldDay); return false; } /** * 獲取當前時 */ public static int getHour() { final Calendar c = Calendar.getInstance(); c.setTimeZone(TimeZone.getTimeZone("GMT+8:00")); return c.get(Calendar.HOUR_OF_DAY); } /** * 獲取指定時間的小時 */ public static int getHour(long timeMills) { final Calendar c = Calendar.getInstance(); c.setTimeInMillis(timeMills); c.setTimeZone(TimeZone.getTimeZone("GMT+8:00")); return c.get(Calendar.HOUR_OF_DAY); } /** * 獲取當前月的天數 * * @return */ public static int getCurMonthLength() { Calendar a = Calendar.getInstance(); a.set(Calendar.DATE, 1); a.roll(Calendar.DATE, -1); int maxDate = a.get(Calendar.DATE); return maxDate; } /** * 獲取當前日期 * * @return */ public static String getCurDayOFMonth() { Calendar c = Calendar.getInstance(); return String.valueOf(c.get(Calendar.DAY_OF_MONTH)); } /** * 獲取當前年份 * @return */ public static String getCurYear() { Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR); return year+""; } }
9Toast統一管理類
package com.example.coshenwancheng.utils; import android.content.Context; import android.widget.Toast; /** * Toast統一管理類 * */ public class ToastUtil { private ToastUtil() { /** cannot be instantiated**/ throw new UnsupportedOperationException("cannot be instantiated"); } public static boolean isShow = true; /** * 短時間顯示Toast * * @param context * @param message */ public static void showShort(Context context, CharSequence message) { if (isShow) { Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); } } /** * 短時間顯示Toast * * @param context * @param message */ public static void showShort(Context context, int message) { if (isShow) { Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); } } /** * 長時間顯示Toast * * @param context * @param message */ public static void showLong(Context context, CharSequence message) { if (isShow) { Toast.makeText(context, message, Toast.LENGTH_LONG).show(); } } /** * 長時間顯示Toast * * @param context * @param message */ public static void showLong(Context context, int message) { if (isShow) { Toast.makeText(context, message, Toast.LENGTH_LONG).show(); } } /** * 自定義顯示Toast時間 * * @param context * @param message * @param duration */ public static void show(Context context, CharSequence message, int duration) { if (isShow) { Toast.makeText(context, message, duration).show(); } } /** * 自定義顯示Toast時間 * * @param context * @param message * @param duration */ public static void show(Context context, int message, int duration) { if (isShow) { Toast.makeText(context, message, duration).show(); } } }
10驗證數據合法性
package com.example.coshenwancheng.utils; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @desc: 驗證數據合法性 */ public class VerifyUtils { /** * verify whether email is valid * * @param email * @return */ public static boolean isEmail(String email) { Pattern pattern = Pattern .compile("^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)" + "+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$"); Matcher matcher = pattern.matcher(email); return matcher.matches(); } /** * verify whether email is valid * * @param email * @return */ public static boolean isEmail2(String email) { String expr = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$"; return email.matches(expr); } /** * verify whether mobile number is valid * * @param number * @return */ public static boolean isMobileNumber(String number) { String expr = "^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$"; return number.matches(expr); } /** * verify whether url is valid * * @param url * @return */ public static boolean isUrl(String url) { String regex = "^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"; Pattern patt = Pattern.compile(regex); Matcher matcher = patt.matcher(url); return matcher.matches(); } /** * verify whether number and letter are only contained * * @param data * @return */ public static boolean isNumberAndLetter(String data) { String expr = "^[A-Za-z0-9]+$"; return data.matches(expr); } /** * verify whether number is only contained * * @param data * @return */ public static boolean isNumber(String data) { String expr = "^[0-9]+$"; return data.matches(expr); } /** * verify whether letter is only contained * * @param data * @return */ public static boolean isLetter(String data) { String expr = "^[A-Za-z]+$"; return data.matches(expr); } /** * verify whether Chinese is only contained * * @param data * @return */ public static boolean isChinese(String data) { String expr = "^[\u0391-\uFFE5]+$"; return data.matches(expr); } /** * verify whether Chinese is contained * * @param data * @return */ public static boolean isContainsChinese(String data) { String chinese = "[\u0391-\uFFE5]"; if (!StringUtils.isEmpty(data)) { for (int i = 0; i < data.length(); i++) { String temp = data.substring(i, i + 1); boolean flag = temp.matches(chinese); if (flag) { return true; } } } return false; } /** * verify whether chinese identity card is valid * * @param data * @return */ public static boolean isChineseCard(String data) { String expr = "^[0-9]{17}[0-9xX]$"; return data.matches(expr); } /** * verify whether post code is valid * * @param data * @return */ public static boolean isPostCode(String data) { String expr = "^[0-9]{6,10}"; return data.matches(expr); } }