diff --git a/README-CN.md b/README-CN.md index 5353ca07ac..9e1f926c1d 100644 --- a/README-CN.md +++ b/README-CN.md @@ -1,753 +1,760 @@ -# Android开发人员不得不收集的代码([持续更新中][update_log.md]) - -## [README of English][readme.md] - -## API - -* ### Activity相关→[ActivityUtils.java][activity.java]→[Demo][activity.demo] -``` -isActivityExists : 判断是否存在Activity -launchActivity : 打开Activity -getLauncherActivity: 获取入口activity -``` - -* ### App相关→[AppUtils.java][app.java]→[Demo][app.demo] -``` -isInstallApp : 判断App是否安装 -installApp : 安装App(支持6.0) -installAppSilent : 静默安装App -uninstallApp : 卸载App -uninstallAppSilent : 静默卸载App -isAppRoot : 判断App是否有root权限 -launchApp : 打开App -getAppPackageName : 获取App包名 -getAppDetailsSettings: 获取App具体设置 -getAppName : 获取App名称 -getAppIcon : 获取App图标 -getAppPath : 获取App路径 -getAppVersionName : 获取App版本号 -getAppVersionCode : 获取App版本码 -isSystemApp : 判断App是否是系统应用 -isAppDebug : 判断App是否是Debug版本 -getAppSignature : 获取App签名 -getAppSignatureSHA1 : 获取应用签名的的SHA1值 -isAppForeground : 判断App是否处于前台 -getForegroundApp : 获取前台应用包名 -getAppInfo : 获取App信息 -getAppsInfo : 获取所有已安装App信息 -cleanAppData : 清除App所有数据 -``` - -* ### 栏相关→[BarUtils.java][bar.java] -``` -setTransparentStatusBar: 设置透明状态栏(api大于19方可使用) -hideStatusBar : 隐藏状态栏 -getStatusBarHeight : 获取状态栏高度 -isStatusBarExists : 判断状态栏是否存在 -getActionBarHeight : 获取ActionBar高度 -showNotificationBar : 显示通知栏 -hideNotificationBar : 隐藏通知栏 -``` - -* ### 清除相关→[CleanUtils.java][clean.java]→[Demo][clean.demo] -``` -cleanInternalCache : 清除内部缓存 -cleanInternalFiles : 清除内部文件 -cleanInternalDbs : 清除内部数据库 -cleanInternalDbByName: 根据名称清除数据库 -cleanInternalSP : 清除内部SP -cleanExternalCache : 清除外部缓存 -cleanCustomCache : 清除自定义目录下的文件 -``` - -* ### 剪贴板相关→[ClipboardUtils.java][clipboard.java] -``` -copyText : 复制文本到剪贴板 -getText : 获取剪贴板的文本 -copyUri : 复制uri到剪贴板 -getUri : 获取剪贴板的uri -copyIntent: 复制意图到剪贴板 -getIntent : 获取剪贴板的意图 -``` - -* ### 关闭相关→[CloseUtils.java][close.java] -``` -closeIO : 关闭IO -closeIOQuietly: 安静关闭IO -``` - -* ### 转换相关→[ConvertUtils.java][convert.java]→[Test][convert.test] -``` -bytes2HexString, hexString2Bytes : byteArr与hexString互转 -chars2Bytes, bytes2Chars : charArr与byteArr互转 -memorySize2Byte, byte2MemorySize : 以unit为单位的内存大小与字节数互转 -byte2FitMemorySize : 字节数转合适内存大小 -timeSpan2Millis, millis2TimeSpan : 以unit为单位的时间长度与毫秒时间戳互转 -millis2FitTimeSpan : 毫秒时间戳转合适时间长度 -bytes2Bits, bits2Bytes : bytes与bits互转 -input2OutputStream, output2InputStream : inputStream与outputStream互转 -inputStream2Bytes, bytes2InputStream : inputStream与byteArr互转 -outputStream2Bytes, bytes2OutputStream : outputStream与byteArr互转 -inputStream2String, string2InputStream : inputStream与string按编码互转 -outputStream2String, string2OutputStream: outputStream与string按编码互转 -bitmap2Bytes, bytes2Bitmap : bitmap与byteArr互转 -drawable2Bitmap, bitmap2Drawable : drawable与bitmap互转 -drawable2Bytes, bytes2Drawable : drawable与byteArr互转 -view2Bitmap : view转Bitmap -dp2px, px2dp : dp与px互转 -sp2px, px2sp : sp与px互转 -``` - -* ### 崩溃相关→[CrashUtils.java][crash.java] -``` -getInstance: 获取单例 -init : 初始化 -``` - -* ### 设备相关→[DeviceUtils.java][device.java]→[Demo][device.demo] -``` -isDeviceRooted : 判断设备是否rooted -getSDKVersion : 获取设备系统版本号 -getAndroidID : 获取设备AndroidID -getMacAddress : 获取设备MAC地址 -getManufacturer : 获取设备厂商 -getModel : 获取设备型号 -shutdown : 关机 -reboot : 重启 -reboot2Recovery : 重启到recovery -reboot2Bootloader: 重启到bootloader -``` - -* ### 判空相关→[EmptyUtils.java][empty.java]→[Test][empty.test] -``` -isEmpty : 判断对象是否为空 -isNotEmpty: 判断对象是否非空 -``` - -* ### 编码解码相关→[EncodeUtils.java][encode.java]→[Test][encode.test] -``` -urlEncode : URL编码 -urlDecode : URL解码 -base64Encode : Base64编码 -base64Encode2String: Base64编码 -base64Decode : Base64解码 -base64UrlSafeEncode: Base64URL安全编码 -htmlEncode : Html编码 -htmlDecode : Html解码 -``` - -* ### 加密解密相关→[EncryptUtils.java][encrypt.java]→[Test][encrypt.test] -``` -encryptMD2, encryptMD2ToString : MD2加密 -encryptMD5, encryptMD5ToString : MD5加密 -encryptMD5File, encryptMD5File2String : MD5加密文件 -encryptSHA1, encryptSHA1ToString : SHA1加密 -encryptSHA224, encryptSHA224ToString : SHA224加密 -encryptSHA256, encryptSHA256ToString : SHA256加密 -encryptSHA384, encryptSHA384ToString : SHA384加密 -encryptSHA512, encryptSHA512ToString : SHA512加密 -encryptHmacMD5, encryptHmacMD5ToString : HmacMD5加密 -encryptHmacSHA1, encryptHmacSHA1ToString : HmacSHA1加密 -encryptHmacSHA224, encryptHmacSHA224ToString : HmacSHA224加密 -encryptHmacSHA256, encryptHmacSHA256ToString : HmacSHA256加密 -encryptHmacSHA384, encryptHmacSHA384ToString : HmacSHA384加密 -encryptHmacSHA512, encryptHmacSHA512ToString : HmacSHA512加密 -encryptDES, encryptDES2HexString, encryptDES2Base64 : DES加密 -decryptDES, decryptHexStringDES, decryptBase64DES : DES解密 -encrypt3DES, encrypt3DES2HexString, encrypt3DES2Base64: 3DES加密 -decrypt3DES, decryptHexString3DES, decryptBase64_3DES : 3DES解密 -encryptAES, encryptAES2HexString, encryptAES2Base64 : AES加密 -decryptAES, decryptHexStringAES, decryptBase64AES : AES解密 -``` - -* ### 文件相关→[FileUtils.java][file.java]→[Test][file.test] -``` -getFileByPath : 根据文件路径获取文件 -isFileExists : 判断文件是否存在 -rename : 重命名文件 -isDir : 判断是否是目录 -isFile : 判断是否是文件 -createOrExistsDir : 判断目录是否存在,不存在则判断是否创建成功 -createOrExistsFile : 判断文件是否存在,不存在则判断是否创建成功 -createFileByDeleteOldFile: 判断文件是否存在,存在则在创建之前删除 -copyDir : 复制目录 -copyFile : 复制文件 -moveDir : 移动目录 -moveFile : 移动文件 -deleteDir : 删除目录 -deleteFile : 删除文件 -listFilesInDir : 获取目录下所有文件 -listFilesInDir : 获取目录下所有文件包括子目录 -listFilesInDirWithFilter : 获取目录下所有后缀名为suffix的文件 -listFilesInDirWithFilter : 获取目录下所有后缀名为suffix的文件包括子目录 -listFilesInDirWithFilter : 获取目录下所有符合filter的文件 -listFilesInDirWithFilter : 获取目录下所有符合filter的文件包括子目录 -searchFileInDir : 获取目录下指定文件名的文件包括子目录 -writeFileFromIS : 将输入流写入文件 -writeFileFromString : 将字符串写入文件 -readFile2List : 指定编码按行读取文件到链表中 -readFile2String : 指定编码按行读取文件到字符串中 -readFile2Bytes : 读取文件到字符数组中 -getFileLastModified : 获取文件最后修改的毫秒时间戳 -getFileCharsetSimple : 简单获取文件编码格式 -getFileLines : 获取文件行数 -getDirSize : 获取目录大小 -getFileSize : 获取文件大小 -getDirLength : 获取目录长度 -getFileLength : 获取文件长度 -getFileMD5 : 获取文件的MD5校验码 -getFileMD5ToString : 获取文件的MD5校验码 -getDirName : 根据全路径获取最长目录 -getFileName : 根据全路径获取文件名 -getFileNameNoExtension : 根据全路径获取文件名不带拓展名 -getFileExtension : 根据全路径获取文件拓展名 -``` - -* ### Fragment相关→[FragmentUtils.java][fragment.java]→[Demo][fragment.demo] -``` -addFragment : 新增fragment -hideAddFragment : 先隐藏后新增fragment -addFragments : 新增多个fragment -removeFragment : 移除fragment -removeToFragment : 移除到指定fragment -removeFragments : 移除同级别fragment -removeAllFragments : 移除所有fragment -replaceFragment : 替换fragment -popFragment : 出栈fragment -popToFragment : 出栈到指定fragment -popFragments : 出栈同级别fragment -popAllFragments : 出栈所有fragment -popAddFragment : 先出栈后新增fragment -hideFragment : 隐藏fragment -hideFragments : 隐藏同级别fragment -showFragment : 显示fragment -hideShowFragment : 先隐藏后显示fragment -getLastAddFragment : 获取同级别最后加入的fragment -getLastAddFragmentInStack: 获取栈中同级别最后加入的fragment -getTopShowFragment : 获取顶层可见fragment -getTopShowFragmentInStack: 获取栈中顶层可见fragment -getFragments : 获取同级别fragment -getFragmentsInStack : 获取栈中同级别fragment -getAllFragments : 获取所有fragment -getAllFragmentsInStack : 获取栈中所有fragment -getPreFragment : 获取目标fragment的前一个fragment -findFragment : 查找fragment -dispatchBackPress : 处理fragment回退键 -setBackgroundColor : 设置背景色 -setBackgroundResource : 设置背景资源 -setBackground : 设置背景 -``` - -* ### Handler相关→[HandlerUtils.java][handler.java]→[Demo][handler.demo] -``` -HandlerHolder: 使用必读 -``` - -* ### 图片相关→[ImageUtils.java][image.java]→[Demo][image.demo] -``` -bitmap2Bytes, bytes2Bitmap : bitmap与byteArr互转 -drawable2Bitmap, bitmap2Drawable: drawable与bitmap互转 -drawable2Bytes, bytes2Drawable : drawable与byteArr互转 -getBitmap : 获取bitmap -scale : 缩放图片 -clip : 裁剪图片 -skew : 倾斜图片 -rotate : 旋转图片 -getRotateDegree : 获取图片旋转角度 -toRound : 转为圆形图片 -toRoundCorner : 转为圆角图片 -fastBlur : 快速模糊 -renderScriptBlur : renderScript模糊图片 -stackBlur : stack模糊图片 -addFrame : 添加颜色边框 -addReflection : 添加倒影 -addTextWatermark : 添加文字水印 -addImageWatermark : 添加图片水印 -toAlpha : 转为alpha位图 -toGray : 转为灰度图片 -save : 保存图片 -isImage : 根据文件名判断文件是否为图片 -getImageType : 获取图片类型 -compressByScale : 按缩放压缩 -compressByQuality : 按质量压缩 -compressBySampleSize : 按采样大小压缩 -``` - -* ### 意图相关→[IntentUtils.java][intent.java] -``` -getInstallAppIntent : 获取安装App(支持6.0)的意图 -getUninstallAppIntent : 获取卸载App的意图 -getLaunchAppIntent : 获取打开App的意图 -getAppDetailsSettingsIntent: 获取App具体设置的意图 -getShareTextIntent : 获取分享文本的意图 -getShareImageIntent : 获取分享图片的意图 -getComponentIntent : 获取其他应用组件的意图 -getShutdownIntent : 获取关机的意图 -getCaptureIntent : 获取拍照的意图 -``` - -* ### 键盘相关→[KeyboardUtils.java][keyboard.java]→[Demo][keyboard.demo] -``` -hideSoftInput : 动态隐藏软键盘 -clickBlankArea2HideSoftInput: 点击屏幕空白区域隐藏软键盘 -showSoftInput : 动态显示软键盘 -toggleSoftInput : 切换键盘显示与否状态 -``` - -* ### 定位相关→[LocationUtils.java][location.java]→[Demo][location.demo] -``` -isGpsEnabled : 判断Gps是否可用 -isLocationEnabled: 判断定位是否可用 -openGpsSettings : 打开Gps设置界面 -register : 注册 -unregister : 注销 -getAddress : 根据经纬度获取地理位置 -getCountryName : 根据经纬度获取所在国家 -getLocality : 根据经纬度获取所在地 -getStreet : 根据经纬度获取所在街道 -``` - -* ### 日志相关→[LogUtils.java][log.java]→[Demo][log.demo] -``` -Builder.setLogSwitch : 设置log总开关 -Builder.setGlobalTag : 设置log全局tag -Builder.setLogHeadSwitch : 设置log头开关 -Builder.setLog2FileSwitch: 设置log文件开关 -Builder.setBorderSwitch : 设置log边框开关 -Builder.setLogFilter : 设置log过滤器 - -v : Verbose日志 -d : Debug日志 -i : Info日志 -w : Warn日志 -e : Error日志 -a : Assert日志 -file: log到文件 -json: log字符串之json -xml : log字符串之xml -``` - -* ### 网络相关→[NetworkUtils.java][network.java]→[Demo][network.demo] -``` -openWirelessSettings : 打开网络设置界面 -isConnected : 判断网络是否连接 -isAvailableByPing : 判断网络是否可用 -getDataEnabled : 判断移动数据是否打开 -setDataEnabled : 打开或关闭移动数据 -is4G : 判断网络是否是4G -getWifiEnabled : 判断wifi是否打开 -setWifiEnabled : 打开或关闭wifi -isWifiConnected : 判断wifi是否连接状态 -isWifiAvailable : 判断wifi数据是否可用 -getNetworkOperatorName: 获取移动网络运营商名称 -getNetworkType : 获取当前网络类型 -getIPAddress : 获取IP地址 -getDomainAddress : 获取域名ip地址 -``` - -* ### 手机相关→[PhoneUtils.java][phone.java]→[Demo][phone.demo] -``` -isPhone : 判断设备是否是手机 -getIMEI : 获取IMEI码 -getIMSI : 获取IMSI码 -getPhoneType : 获取移动终端类型 -isSimCardReady : 判断sim卡是否准备好 -getSimOperatorName : 获取Sim卡运营商名称 -getSimOperatorByMnc: 获取Sim卡运营商名称 -getPhoneStatus : 获取手机状态信息 -dial : 跳至拨号界面 -call : 拨打phoneNumber -sendSms : 跳至发送短信界面 -sendSmsSilent : 发送短信 -getAllContactInfo : 获取手机联系人 -getContactNum : 打开手机联系人界面点击联系人后便获取该号码 -getAllSMS : 获取手机短信并保存到xml中 -``` - -* ### 拼音相关→[PinyinUtils.java][pinyin.java]→[Test][pinyin.test] -``` -ccs2Pinyin : 汉字转拼音 -ccs2Pinyin : 汉字转拼音 -getPinyinFirstLetter : 获取第一个汉字首字母 -getPinyinFirstLetters: 获取所有汉字的首字母 -getSurnamePinyin : 根据名字获取姓氏的拼音 -getSurnameFirstLetter: 根据名字获取姓氏的首字母 -``` - -* ### 进程相关→[ProcessUtils.java][process.java]→[Demo][process.demo] -``` -getForegroundProcessName : 获取前台线程包名 -killAllBackgroundProcesses: 杀死所有的后台服务进程 -killBackgroundProcesses : 杀死后台服务进程 -``` - -* ### 正则相关→[RegexUtils.java][regex.java]→[Test][regex.test] -``` -isMobileSimple : 验证手机号(简单) -isMobileExact : 验证手机号(精确) -isTel : 验证电话号码 -isIDCard15 : 验证身份证号码15位 -isIDCard18 : 验证身份证号码18位 -isEmail : 验证邮箱 -isURL : 验证URL -isZh : 验证汉字 -isUsername : 验证用户名 -isDate : 验证yyyy-MM-dd格式的日期校验,已考虑平闰年 -isIP : 验证IP地址 -isMatch : 判断是否匹配正则 -getMatches : 获取正则匹配的部分 -getSplits : 获取正则匹配分组 -getReplaceFirst: 替换正则匹配的第一部分 -getReplaceAll : 替换所有正则匹配的部分 -``` - -* ### 屏幕相关→[ScreenUtils.java][screen.java] -``` -getScreenWidth : 获取屏幕的宽度(单位:px) -getScreenHeight : 获取屏幕的高度(单位:px) -setLandscape : 设置屏幕为横屏 -setPortrait : 设置屏幕为竖屏 -isLandscape : 判断是否横屏 -isPortrait : 判断是否竖屏 -getScreenRotation : 获取屏幕旋转角度 -captureWithStatusBar : 获取当前屏幕截图,包含状态栏 -captureWithoutStatusBar: 获取当前屏幕截图,不包含状态栏 -isScreenLock : 判断是否锁屏 -``` - -* ### SD卡相关→[SDCardUtils.java][sdcard.java]→[Demo][sdcard.demo] -``` -isSDCardEnable: 判断SD卡是否可用 -getSDCardPath : 获取SD卡路径 -getDataPath : 获取SD卡Data路径 -getFreeSpace : 计算SD卡的剩余空间 -getSDCardInfo : 获取SD卡信息 -``` - -* ### 服务相关→[ServiceUtils.java][service.java] -``` -getAllRunningService: 获取所有运行的服务 -startService : 启动服务 -stopService : 停止服务 -bindService : 绑定服务 -unbindService : 解绑服务 -isServiceRunning : 判断服务是否运行 -``` - -* ### Shell相关→[ShellUtils.java][shell.java] -``` -execCmd: 是否是在root下执行命令 -``` - -* ### 尺寸相关→[SizeUtils.java][size.java] -``` -dp2px, px2dp : dp与px转换 -sp2px, px2sp : sp与px转换 -applyDimension : 各种单位转换 -forceGetViewSize : 在onCreate中获取视图的尺寸 -measureView : 测量视图尺寸 -getMeasuredWidth : 获取测量视图宽度 -getMeasuredHeight: 获取测量视图高度 -``` - -* ### Snackbar相关→[SnackbarUtils.java][snackbar.java]→[Demo][snackbar.demo] -``` -showShortSnackbar : 显示短时snackbar -showLongSnackbar : 显示长时snackbar -showIndefiniteSnackbar: 显示自定义时长snackbar -addView : 为SnackBar添加布局 -dismissSnackbar : 取消snackbar显示 -``` - -* ### SpannableString相关→[SpannableStringUtils.java][spannable.java]→[Demo][spannable.demo] -``` -getBuilder : 获取建造者 -setFlag : 设置标识 -setForegroundColor: 设置前景色 -setBackgroundColor: 设置背景色 -setQuoteColor : 设置引用线的颜色 -setLeadingMargin : 设置缩进 -setBullet : 设置列表标记 -setProportion : 设置字体比例 -setXProportion : 设置字体横向比例 -setStrikethrough : 设置删除线 -setUnderline : 设置下划线 -setSuperscript : 设置上标 -setSubscript : 设置下标 -setBold : 设置粗体 -setItalic : 设置斜体 -setBoldItalic : 设置粗斜体 -setFontFamily : 设置字体 -setAlign : 设置对齐 -setBitmap : 设置图片 -setDrawable : 设置图片 -setUri : 设置图片 -setResourceId : 设置图片 -setClickSpan : 设置点击事件 -setUrl : 设置超链接 -setBlur : 设置模糊 -append : 追加样式字符串 -create : 创建样式字符串 -``` - -* ### SP相关→[SPUtils.java][sp.java]→[Test][sp.test] -``` -SPUtils : SPUtils构造函数 -put : SP中写入数据 -getString : SP中读取String -putInt : SP中写入int类型value -getInt : SP中读取int -putLong : SP中写入long类型value -getLong : SP中读取long -putFloat : SP中写入float类型value -getFloat : SP中读取float -putBoolean: SP中写入boolean类型value -getBoolean: SP中读取boolean -getAll : SP中获取所有键值对 -remove : SP中移除该key -contains : SP中是否存在该key -clear : SP中清除所有数据 -``` - -* ### 字符串相关→[StringUtils.java][string.java]→[Test][string.test] -``` -isEmpty : 判断字符串是否为null或长度为0 -isTrimEmpty : 判断字符串是否为null或全为空格 -isSpace : 判断字符串是否为null或全为空白字符 -equals : 判断两字符串是否相等 -equalsIgnoreCase: 判断两字符串忽略大小写是否相等 -null2Length0 : null转为长度为0的字符串 -length : 返回字符串长度 -upperFirstLetter: 首字母大写 -lowerFirstLetter: 首字母小写 -reverse : 反转字符串 -toDBC : 转化为半角字符 -toSBC : 转化为全角字符 -``` - -* ### 线程池相关→[ThreadPoolUtils.java][thread_pool.java] -``` -ThreadPoolUtils : ThreadPoolUtils构造函数 -execute : 在未来某个时间执行给定的命令 -execute : 在未来某个时间执行给定的命令链表 -shutDown : 待以前提交的任务执行完毕后关闭线程池 -shutDownNow : 试图停止所有正在执行的活动任务 -isShutDown : 判断线程池是否已关闭 -isTerminated : 关闭线程池后判断所有任务是否都已完成 -awaitTermination : 请求关闭、发生超时或者当前线程中断 -submit : 提交一个Callable任务用于执行 -submit : 提交一个Runnable任务用于执行 -invokeAll, invokeAny : 执行给定的任务 -schedule : 延迟执行Runnable命令 -schedule : 延迟执行Callable命令 -scheduleWithFixedRate : 延迟并循环执行命令 -scheduleWithFixedDelay: 延迟并以固定休息时间循环执行命令 -``` - -* ### 时间相关→[TimeUtils.java][time.java]→[Test][time.test] -``` -millis2String : 将时间戳转为时间字符串 -string2Millis : 将时间字符串转为时间戳 -string2Date : 将时间字符串转为Date类型 -date2String : 将Date类型转为时间字符串 -date2Millis : 将Date类型转为时间戳 -millis2Date : 将时间戳转为Date类型 -getTimeSpan : 获取两个时间差(单位:unit) -getFitTimeSpan : 获取合适型两个时间差 -getNowTimeMills : 获取当前毫秒时间戳 -getNowTimeString : 获取当前时间字符串 -getNowTimeDate : 获取当前Date -getTimeSpanByNow : 获取与当前时间的差(单位:unit) -getFitTimeSpanByNow : 获取合适型与当前时间的差 -getFriendlyTimeSpanByNow: 获取友好型与当前时间的差 -isSameDay : 判断是否同一天 -isLeapYear : 判断是否闰年 -getWeek, getWeekIndex : 获取星期 -getWeekOfMonth : 获取月份中的第几周 -getWeekOfYear : 获取年份中的第几周 -getChineseZodiac : 获取生肖 -getZodiac : 获取星座 -``` - -* ### 吐司相关→[ToastUtils.java][toast.java]→[Demo][toast.demo] -``` -init : 吐司初始化 -showShortToastSafe: 安全地显示短时吐司 -showLongToastSafe : 安全地显示长时吐司 -showShortToast : 显示短时吐司 -showLongToast : 显示长时吐司 -cancelToast : 取消吐司显示 -``` - -* ### 压缩相关→[ZipUtils.java][zip.java]→[Test][zip.test] -``` -zipFiles : 批量压缩文件 -zipFile : 压缩文件 -unzipFiles : 批量解压文件 -unzipFile : 解压文件 -unzipFileByKeyword: 解压带有关键字的文件 -getFilesPath : 获取压缩文件中的文件路径链表 -getComments : 获取压缩文件中的注释链表 -getEntries : 获取压缩文件中的文件对象 -``` - -* ### 更新Log→[update_log.md][update_log.md] - -*** - -## About - -* 做这份整理是想把它作为Android开发的小字典,当遇到一些琐碎问题时,不用再面向百度或者谷歌查询API的使用,费时费力,这里有的话,大家尽管撸走;同时也希望它能逐日壮大起来,期待大家的Star和完善,当然我也会一直更新发布版本和日志,为了方便大家导入,现已上传jcenter;其中很多代码也是汇四方之精华,谢谢前辈们的提供,当然最终还是要通过单元测试的,如有错误,请及时告之。 -* QQ群提供讨论,1群:74721490(已满)2群:25206533,至于验证问题对大家来说肯定都是小case。关于群:[在别人生活里低调地做配角(我和466个程序员的故事)][group]。 -* 我的[微博][weibo],求个关注哈。 - -## Download - -Gradle: -``` groovy -compile 'com.blankj:utilcode:1.3.8' -``` - -## How to use - -``` -Utils.init(context); -``` - -## Proguard - -``` --keep class com.blankj.utilcode.** { *; } --keepclassmembers class com.blankj.utilcode.** { *; } --dontwarn com.blankj.utilcode.** -``` - -## License - -``` -Copyright 2016 Blankj - -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. -``` - -[update_log.md]: https://github.com/Blankj/AndroidUtilCode/blob/master/update_log.md - -[readme.md]: https://github.com/Blankj/AndroidUtilCode -[readme-cn.md]: https://github.com/Blankj/AndroidUtilCode/blob/master/README-CN.md - -[activity.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ActivityUtils.java -[activity.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/ActivityActivity.java - -[app.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/AppUtils.java -[app.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/AppActivity.java - -[bar.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/BarUtils.java - -[clean.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/CleanUtils.java -[clean.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/CleanActivity.java - -[clipboard.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ClipboardUtils.java - -[close.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/CloseUtils.java - -[convert.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ConvertUtils.java -[convert.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/ConvertUtilsTest.java - -[crash.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/CrashUtils.java - -[device.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/DeviceUtils.java -[device.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/DeviceActivity.java - -[empty.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/EmptyUtils.java -[empty.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/EmptyUtilsTest.java - -[encode.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/EncodeUtils.java -[encode.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/EncodeUtilsTest.java - -[encrypt.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/EncryptUtils.java -[encrypt.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/EncryptUtilsTest.java - -[file.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/FileUtils.java -[file.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/FileUtilsTest.java - -[fragment.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/FragmentUtils.java -[fragment.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/FragmentActivity.java - -[handler.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/HandlerUtils.java -[handler.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/HandlerActivity.java - -[image.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ImageUtils.java -[image.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/ImageActivity.java - -[intent.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/IntentUtils.java - -[keyboard.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java -[keyboard.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/KeyboardActivity.java - -[location.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/LocationUtils.java -[location.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/LocationActivity.java - -[log.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/LogUtils.java -[log.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/LogActivity.java - -[network.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/NetworkUtils.java -[network.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/NetworkActivity.java - -[phone.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/PhoneUtils.java -[phone.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/PhoneActivity.java - -[pinyin.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/PinyinUtils.java -[pinyin.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/PinyinUtilsTest.java - -[process.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ProcessUtils.java -[process.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/ProcessActivity.java - -[regex.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/RegexUtils.java -[regex.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/RegexUtilsTest.java - -[screen.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ScreenUtils.java - -[sdcard.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/SDCardUtils.java -[sdcard.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/SDCardActivity.java - -[service.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ServiceUtils.java - -[shell.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ShellUtils.java - -[size.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/SizeUtils.java - -[snackbar.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java -[snackbar.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/SnackbarActivity.java - -[spannable.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/SpannableStringUtils.java -[spannable.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/SpannableActivity.java - -[sp.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/SPUtils.java -[sp.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/SPUtilsTest.java - -[string.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/StringUtils.java -[string.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/StringUtilsTest.java - -[thread_pool.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ThreadPoolUtils.java - -[time.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/TimeUtils.java -[time.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/TimeUtilsTest.java - -[toast.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ToastUtils.java -[toast.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/ToastActivity.java - -[zip.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ZipUtils.java -[zip.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/ZipUtilsTest.java - -[group]: http://www.jianshu.com/p/8938015df951 -[weibo]: http://weibo.com/blankcmj +# Android开发人员不得不收集的代码([持续更新中][update_log.md]) + +## [README of English][readme.md] + +## API + +* ### Activity相关→[ActivityUtils.java][activity.java]→[Demo][activity.demo] +``` +isActivityExists : 判断是否存在Activity +launchActivity : 打开Activity +getLauncherActivity: 获取入口activity +``` + +* ### App相关→[AppUtils.java][app.java]→[Demo][app.demo] +``` +isInstallApp : 判断App是否安装 +installApp : 安装App(支持6.0) +installAppSilent : 静默安装App +uninstallApp : 卸载App +uninstallAppSilent : 静默卸载App +isAppRoot : 判断App是否有root权限 +launchApp : 打开App +getAppPackageName : 获取App包名 +getAppDetailsSettings: 获取App具体设置 +getAppName : 获取App名称 +getAppIcon : 获取App图标 +getAppPath : 获取App路径 +getAppVersionName : 获取App版本号 +getAppVersionCode : 获取App版本码 +isSystemApp : 判断App是否是系统应用 +isAppDebug : 判断App是否是Debug版本 +getAppSignature : 获取App签名 +getAppSignatureSHA1 : 获取应用签名的的SHA1值 +isAppForeground : 判断App是否处于前台 +getForegroundApp : 获取前台应用包名 +getAppInfo : 获取App信息 +getAppsInfo : 获取所有已安装App信息 +cleanAppData : 清除App所有数据 +``` + +* ### 栏相关→[BarUtils.java][bar.java] +``` +setTransparentStatusBar: 设置透明状态栏(api大于19方可使用) +hideStatusBar : 隐藏状态栏 +getStatusBarHeight : 获取状态栏高度 +isStatusBarExists : 判断状态栏是否存在 +getActionBarHeight : 获取ActionBar高度 +showNotificationBar : 显示通知栏 +hideNotificationBar : 隐藏通知栏 +``` + +* ### 清除相关→[CleanUtils.java][clean.java]→[Demo][clean.demo] +``` +cleanInternalCache : 清除内部缓存 +cleanInternalFiles : 清除内部文件 +cleanInternalDbs : 清除内部数据库 +cleanInternalDbByName: 根据名称清除数据库 +cleanInternalSP : 清除内部SP +cleanExternalCache : 清除外部缓存 +cleanCustomCache : 清除自定义目录下的文件 +``` + +* ### 剪贴板相关→[ClipboardUtils.java][clipboard.java] +``` +copyText : 复制文本到剪贴板 +getText : 获取剪贴板的文本 +copyUri : 复制uri到剪贴板 +getUri : 获取剪贴板的uri +copyIntent: 复制意图到剪贴板 +getIntent : 获取剪贴板的意图 +``` + +* ### 关闭相关→[CloseUtils.java][close.java] +``` +closeIO : 关闭IO +closeIOQuietly: 安静关闭IO +``` + +* ### 转换相关→[ConvertUtils.java][convert.java]→[Test][convert.test] +``` +bytes2HexString, hexString2Bytes : byteArr与hexString互转 +chars2Bytes, bytes2Chars : charArr与byteArr互转 +memorySize2Byte, byte2MemorySize : 以unit为单位的内存大小与字节数互转 +byte2FitMemorySize : 字节数转合适内存大小 +timeSpan2Millis, millis2TimeSpan : 以unit为单位的时间长度与毫秒时间戳互转 +millis2FitTimeSpan : 毫秒时间戳转合适时间长度 +bytes2Bits, bits2Bytes : bytes与bits互转 +input2OutputStream, output2InputStream : inputStream与outputStream互转 +inputStream2Bytes, bytes2InputStream : inputStream与byteArr互转 +outputStream2Bytes, bytes2OutputStream : outputStream与byteArr互转 +inputStream2String, string2InputStream : inputStream与string按编码互转 +outputStream2String, string2OutputStream: outputStream与string按编码互转 +bitmap2Bytes, bytes2Bitmap : bitmap与byteArr互转 +drawable2Bitmap, bitmap2Drawable : drawable与bitmap互转 +drawable2Bytes, bytes2Drawable : drawable与byteArr互转 +view2Bitmap : view转Bitmap +dp2px, px2dp : dp与px互转 +sp2px, px2sp : sp与px互转 +``` + +* ### 崩溃相关→[CrashUtils.java][crash.java] +``` +getInstance: 获取单例 +init : 初始化 +``` + +* ### 设备相关→[DeviceUtils.java][device.java]→[Demo][device.demo] +``` +isDeviceRooted : 判断设备是否rooted +getSDKVersion : 获取设备系统版本号 +getAndroidID : 获取设备AndroidID +getMacAddress : 获取设备MAC地址 +getManufacturer : 获取设备厂商 +getModel : 获取设备型号 +shutdown : 关机 +reboot : 重启 +reboot2Recovery : 重启到recovery +reboot2Bootloader: 重启到bootloader +``` + +* ### 判空相关→[EmptyUtils.java][empty.java]→[Test][empty.test] +``` +isEmpty : 判断对象是否为空 +isNotEmpty: 判断对象是否非空 +``` + +* ### 编码解码相关→[EncodeUtils.java][encode.java]→[Test][encode.test] +``` +urlEncode : URL编码 +urlDecode : URL解码 +base64Encode : Base64编码 +base64Encode2String: Base64编码 +base64Decode : Base64解码 +base64UrlSafeEncode: Base64URL安全编码 +htmlEncode : Html编码 +htmlDecode : Html解码 +``` + +* ### 加密解密相关→[EncryptUtils.java][encrypt.java]→[Test][encrypt.test] +``` +encryptMD2, encryptMD2ToString : MD2加密 +encryptMD5, encryptMD5ToString : MD5加密 +encryptMD5File, encryptMD5File2String : MD5加密文件 +encryptSHA1, encryptSHA1ToString : SHA1加密 +encryptSHA224, encryptSHA224ToString : SHA224加密 +encryptSHA256, encryptSHA256ToString : SHA256加密 +encryptSHA384, encryptSHA384ToString : SHA384加密 +encryptSHA512, encryptSHA512ToString : SHA512加密 +encryptHmacMD5, encryptHmacMD5ToString : HmacMD5加密 +encryptHmacSHA1, encryptHmacSHA1ToString : HmacSHA1加密 +encryptHmacSHA224, encryptHmacSHA224ToString : HmacSHA224加密 +encryptHmacSHA256, encryptHmacSHA256ToString : HmacSHA256加密 +encryptHmacSHA384, encryptHmacSHA384ToString : HmacSHA384加密 +encryptHmacSHA512, encryptHmacSHA512ToString : HmacSHA512加密 +encryptDES, encryptDES2HexString, encryptDES2Base64 : DES加密 +decryptDES, decryptHexStringDES, decryptBase64DES : DES解密 +encrypt3DES, encrypt3DES2HexString, encrypt3DES2Base64: 3DES加密 +decrypt3DES, decryptHexString3DES, decryptBase64_3DES : 3DES解密 +encryptAES, encryptAES2HexString, encryptAES2Base64 : AES加密 +decryptAES, decryptHexStringAES, decryptBase64AES : AES解密 +``` + +* ### 文件相关→[FileUtils.java][file.java]→[Test][file.test] +``` +getFileByPath : 根据文件路径获取文件 +isFileExists : 判断文件是否存在 +rename : 重命名文件 +isDir : 判断是否是目录 +isFile : 判断是否是文件 +createOrExistsDir : 判断目录是否存在,不存在则判断是否创建成功 +createOrExistsFile : 判断文件是否存在,不存在则判断是否创建成功 +createFileByDeleteOldFile: 判断文件是否存在,存在则在创建之前删除 +copyDir : 复制目录 +copyFile : 复制文件 +moveDir : 移动目录 +moveFile : 移动文件 +deleteDir : 删除目录 +deleteFile : 删除文件 +listFilesInDir : 获取目录下所有文件 +listFilesInDir : 获取目录下所有文件包括子目录 +listFilesInDirWithFilter : 获取目录下所有后缀名为suffix的文件 +listFilesInDirWithFilter : 获取目录下所有后缀名为suffix的文件包括子目录 +listFilesInDirWithFilter : 获取目录下所有符合filter的文件 +listFilesInDirWithFilter : 获取目录下所有符合filter的文件包括子目录 +searchFileInDir : 获取目录下指定文件名的文件包括子目录 +writeFileFromIS : 将输入流写入文件 +writeFileFromString : 将字符串写入文件 +readFile2List : 指定编码按行读取文件到链表中 +readFile2String : 指定编码按行读取文件到字符串中 +readFile2Bytes : 读取文件到字符数组中 +getFileLastModified : 获取文件最后修改的毫秒时间戳 +getFileCharsetSimple : 简单获取文件编码格式 +getFileLines : 获取文件行数 +getDirSize : 获取目录大小 +getFileSize : 获取文件大小 +getDirLength : 获取目录长度 +getFileLength : 获取文件长度 +getFileMD5 : 获取文件的MD5校验码 +getFileMD5ToString : 获取文件的MD5校验码 +getDirName : 根据全路径获取最长目录 +getFileName : 根据全路径获取文件名 +getFileNameNoExtension : 根据全路径获取文件名不带拓展名 +getFileExtension : 根据全路径获取文件拓展名 +``` + +* ### Fragment相关→[FragmentUtils.java][fragment.java]→[Demo][fragment.demo] +``` +addFragment : 新增fragment +hideAddFragment : 先隐藏后新增fragment +addFragments : 新增多个fragment +removeFragment : 移除fragment +removeToFragment : 移除到指定fragment +removeFragments : 移除同级别fragment +removeAllFragments : 移除所有fragment +replaceFragment : 替换fragment +popFragment : 出栈fragment +popToFragment : 出栈到指定fragment +popFragments : 出栈同级别fragment +popAllFragments : 出栈所有fragment +popAddFragment : 先出栈后新增fragment +hideFragment : 隐藏fragment +hideFragments : 隐藏同级别fragment +showFragment : 显示fragment +hideShowFragment : 先隐藏后显示fragment +getLastAddFragment : 获取同级别最后加入的fragment +getLastAddFragmentInStack: 获取栈中同级别最后加入的fragment +getTopShowFragment : 获取顶层可见fragment +getTopShowFragmentInStack: 获取栈中顶层可见fragment +getFragments : 获取同级别fragment +getFragmentsInStack : 获取栈中同级别fragment +getAllFragments : 获取所有fragment +getAllFragmentsInStack : 获取栈中所有fragment +getPreFragment : 获取目标fragment的前一个fragment +findFragment : 查找fragment +dispatchBackPress : 处理fragment回退键 +setBackgroundColor : 设置背景色 +setBackgroundResource : 设置背景资源 +setBackground : 设置背景 +``` + +* ### Handler相关→[HandlerUtils.java][handler.java]→[Demo][handler.demo] +``` +HandlerHolder: 使用必读 +``` + +* ### 图片相关→[ImageUtils.java][image.java]→[Demo][image.demo] +``` +bitmap2Bytes, bytes2Bitmap : bitmap与byteArr互转 +drawable2Bitmap, bitmap2Drawable: drawable与bitmap互转 +drawable2Bytes, bytes2Drawable : drawable与byteArr互转 +getBitmap : 获取bitmap +scale : 缩放图片 +clip : 裁剪图片 +skew : 倾斜图片 +rotate : 旋转图片 +getRotateDegree : 获取图片旋转角度 +toRound : 转为圆形图片 +toRoundCorner : 转为圆角图片 +fastBlur : 快速模糊 +renderScriptBlur : renderScript模糊图片 +stackBlur : stack模糊图片 +addFrame : 添加颜色边框 +addReflection : 添加倒影 +addTextWatermark : 添加文字水印 +addImageWatermark : 添加图片水印 +toAlpha : 转为alpha位图 +toGray : 转为灰度图片 +save : 保存图片 +isImage : 根据文件名判断文件是否为图片 +getImageType : 获取图片类型 +compressByScale : 按缩放压缩 +compressByQuality : 按质量压缩 +compressBySampleSize : 按采样大小压缩 +``` + +* ### 意图相关→[IntentUtils.java][intent.java] +``` +getInstallAppIntent : 获取安装App(支持6.0)的意图 +getUninstallAppIntent : 获取卸载App的意图 +getLaunchAppIntent : 获取打开App的意图 +getAppDetailsSettingsIntent: 获取App具体设置的意图 +getShareTextIntent : 获取分享文本的意图 +getShareImageIntent : 获取分享图片的意图 +getComponentIntent : 获取其他应用组件的意图 +getShutdownIntent : 获取关机的意图 +getCaptureIntent : 获取拍照的意图 +``` + +* ### 键盘相关→[KeyboardUtils.java][keyboard.java]→[Demo][keyboard.demo] +``` +hideSoftInput : 动态隐藏软键盘 +clickBlankArea2HideSoftInput: 点击屏幕空白区域隐藏软键盘 +showSoftInput : 动态显示软键盘 +toggleSoftInput : 切换键盘显示与否状态 +``` + +* ### 定位相关→[LocationUtils.java][location.java]→[Demo][location.demo] +``` +isGpsEnabled : 判断Gps是否可用 +isLocationEnabled: 判断定位是否可用 +openGpsSettings : 打开Gps设置界面 +register : 注册 +unregister : 注销 +getAddress : 根据经纬度获取地理位置 +getCountryName : 根据经纬度获取所在国家 +getLocality : 根据经纬度获取所在地 +getStreet : 根据经纬度获取所在街道 +``` + +* ### 日志相关→[LogUtils.java][log.java]→[Demo][log.demo] +``` +Builder.setLogSwitch : 设置log总开关 +Builder.setGlobalTag : 设置log全局tag +Builder.setLogHeadSwitch : 设置log头开关 +Builder.setLog2FileSwitch: 设置log文件开关 +Builder.setBorderSwitch : 设置log边框开关 +Builder.setLogFilter : 设置log过滤器 + +v : Verbose日志 +d : Debug日志 +i : Info日志 +w : Warn日志 +e : Error日志 +a : Assert日志 +file: log到文件 +json: log字符串之json +xml : log字符串之xml +``` + +* ### 网络相关→[NetworkUtils.java][network.java]→[Demo][network.demo] +``` +openWirelessSettings : 打开网络设置界面 +isConnected : 判断网络是否连接 +isAvailableByPing : 判断网络是否可用 +getDataEnabled : 判断移动数据是否打开 +setDataEnabled : 打开或关闭移动数据 +is4G : 判断网络是否是4G +getWifiEnabled : 判断wifi是否打开 +setWifiEnabled : 打开或关闭wifi +isWifiConnected : 判断wifi是否连接状态 +isWifiAvailable : 判断wifi数据是否可用 +getNetworkOperatorName: 获取移动网络运营商名称 +getNetworkType : 获取当前网络类型 +getIPAddress : 获取IP地址 +getDomainAddress : 获取域名ip地址 +``` + +* ### 手机相关→[PhoneUtils.java][phone.java]→[Demo][phone.demo] +``` +isPhone : 判断设备是否是手机 +getIMEI : 获取IMEI码 +getIMSI : 获取IMSI码 +getPhoneType : 获取移动终端类型 +isSimCardReady : 判断sim卡是否准备好 +getSimOperatorName : 获取Sim卡运营商名称 +getSimOperatorByMnc: 获取Sim卡运营商名称 +getPhoneStatus : 获取手机状态信息 +dial : 跳至拨号界面 +call : 拨打phoneNumber +sendSms : 跳至发送短信界面 +sendSmsSilent : 发送短信 +getAllContactInfo : 获取手机联系人 +getContactNum : 打开手机联系人界面点击联系人后便获取该号码 +getAllSMS : 获取手机短信并保存到xml中 +``` + +* ### 拼音相关→[PinyinUtils.java][pinyin.java]→[Test][pinyin.test] +``` +ccs2Pinyin : 汉字转拼音 +ccs2Pinyin : 汉字转拼音 +getPinyinFirstLetter : 获取第一个汉字首字母 +getPinyinFirstLetters: 获取所有汉字的首字母 +getSurnamePinyin : 根据名字获取姓氏的拼音 +getSurnameFirstLetter: 根据名字获取姓氏的首字母 +``` + +* ### 进程相关→[ProcessUtils.java][process.java]→[Demo][process.demo] +``` +getForegroundProcessName : 获取前台线程包名 +killAllBackgroundProcesses: 杀死所有的后台服务进程 +killBackgroundProcesses : 杀死后台服务进程 +``` + +* ### 正则相关→[RegexUtils.java][regex.java]→[Test][regex.test] +``` +isMobileSimple : 验证手机号(简单) +isMobileExact : 验证手机号(精确) +isTel : 验证电话号码 +isIDCard15 : 验证身份证号码15位 +isIDCard18 : 验证身份证号码18位 +isEmail : 验证邮箱 +isURL : 验证URL +isZh : 验证汉字 +isUsername : 验证用户名 +isDate : 验证yyyy-MM-dd格式的日期校验,已考虑平闰年 +isIP : 验证IP地址 +isMatch : 判断是否匹配正则 +getMatches : 获取正则匹配的部分 +getSplits : 获取正则匹配分组 +getReplaceFirst: 替换正则匹配的第一部分 +getReplaceAll : 替换所有正则匹配的部分 +``` + +* ### 屏幕相关→[ScreenUtils.java][screen.java] +``` +getScreenWidth : 获取屏幕的宽度(单位:px) +getScreenHeight : 获取屏幕的高度(单位:px) +setLandscape : 设置屏幕为横屏 +setPortrait : 设置屏幕为竖屏 +isLandscape : 判断是否横屏 +isPortrait : 判断是否竖屏 +getScreenRotation : 获取屏幕旋转角度 +captureWithStatusBar : 获取当前屏幕截图,包含状态栏 +captureWithoutStatusBar: 获取当前屏幕截图,不包含状态栏 +isScreenLock : 判断是否锁屏 +``` + +* ### SD卡相关→[SDCardUtils.java][sdcard.java]→[Demo][sdcard.demo] +``` +isSDCardEnable: 判断SD卡是否可用 +getSDCardPath : 获取SD卡路径 +getDataPath : 获取SD卡Data路径 +getFreeSpace : 计算SD卡的剩余空间 +getSDCardInfo : 获取SD卡信息 +``` + +* ### 服务相关→[ServiceUtils.java][service.java] +``` +getAllRunningService: 获取所有运行的服务 +startService : 启动服务 +stopService : 停止服务 +bindService : 绑定服务 +unbindService : 解绑服务 +isServiceRunning : 判断服务是否运行 +``` + +* ### Shell相关→[ShellUtils.java][shell.java] +``` +execCmd: 是否是在root下执行命令 +``` + +* ### 尺寸相关→[SizeUtils.java][size.java] +``` +dp2px, px2dp : dp与px转换 +sp2px, px2sp : sp与px转换 +applyDimension : 各种单位转换 +forceGetViewSize : 在onCreate中获取视图的尺寸 +measureView : 测量视图尺寸 +getMeasuredWidth : 获取测量视图宽度 +getMeasuredHeight: 获取测量视图高度 +``` + +* ### Snackbar相关→[SnackbarUtils.java][snackbar.java]→[Demo][snackbar.demo] +``` +showShortSnackbar : 显示短时snackbar +showLongSnackbar : 显示长时snackbar +showIndefiniteSnackbar: 显示自定义时长snackbar +addView : 为SnackBar添加布局 +dismissSnackbar : 取消snackbar显示 +``` + +* ### SpannableString相关→[SpannableStringUtils.java][spannable.java]→[Demo][spannable.demo] +``` +Builder.getBuilder : 获取建造者 +Builder.setFlag : 设置标识 +Builder.setForegroundColor: 设置前景色 +Builder.setBackgroundColor: 设置背景色 +Builder.setQuoteColor : 设置引用线的颜色 +Builder.setLeadingMargin : 设置缩进 +Builder.setBullet : 设置列表标记 +Builder.setFontSize : 设置字体尺寸 +Builder.setFontProportion : 设置字体比例 +Builder.setFontXProportion: 设置字体横向比例 +Builder.setStrikethrough : 设置删除线 +Builder.setUnderline : 设置下划线 +Builder.setSuperscript : 设置上标 +Builder.setSubscript : 设置下标 +Builder.setBold : 设置粗体 +Builder.setItalic : 设置斜体 +Builder.setBoldItalic : 设置粗斜体 +Builder.setFontFamily : 设置字体 +Builder.setAlign : 设置对齐 +Builder.setBitmap : 设置图片 +Builder.setDrawable : 设置图片 +Builder.setUri : 设置图片 +Builder.setResourceId : 设置图片 +Builder.setClickSpan : 设置点击事件 +Builder.setUrl : 设置超链接 +Builder.setBlur : 设置模糊 +Builder.append : 追加样式字符串 +Builder.create : 创建样式字符串 +``` + +* ### SP相关→[SPUtils.java][sp.java]→[Test][sp.test] +``` +SPUtils : SPUtils构造函数 +put : SP中写入数据 +getString : SP中读取String +putInt : SP中写入int类型value +getInt : SP中读取int +putLong : SP中写入long类型value +getLong : SP中读取long +putFloat : SP中写入float类型value +getFloat : SP中读取float +putBoolean: SP中写入boolean类型value +getBoolean: SP中读取boolean +getAll : SP中获取所有键值对 +remove : SP中移除该key +contains : SP中是否存在该key +clear : SP中清除所有数据 +``` + +* ### 字符串相关→[StringUtils.java][string.java]→[Test][string.test] +``` +isEmpty : 判断字符串是否为null或长度为0 +isTrimEmpty : 判断字符串是否为null或全为空格 +isSpace : 判断字符串是否为null或全为空白字符 +equals : 判断两字符串是否相等 +equalsIgnoreCase: 判断两字符串忽略大小写是否相等 +null2Length0 : null转为长度为0的字符串 +length : 返回字符串长度 +upperFirstLetter: 首字母大写 +lowerFirstLetter: 首字母小写 +reverse : 反转字符串 +toDBC : 转化为半角字符 +toSBC : 转化为全角字符 +``` + +* ### 线程池相关→[ThreadPoolUtils.java][thread_pool.java] +``` +ThreadPoolUtils : ThreadPoolUtils构造函数 +execute : 在未来某个时间执行给定的命令 +execute : 在未来某个时间执行给定的命令链表 +shutDown : 待以前提交的任务执行完毕后关闭线程池 +shutDownNow : 试图停止所有正在执行的活动任务 +isShutDown : 判断线程池是否已关闭 +isTerminated : 关闭线程池后判断所有任务是否都已完成 +awaitTermination : 请求关闭、发生超时或者当前线程中断 +submit : 提交一个Callable任务用于执行 +submit : 提交一个Runnable任务用于执行 +invokeAll, invokeAny : 执行给定的任务 +schedule : 延迟执行Runnable命令 +schedule : 延迟执行Callable命令 +scheduleWithFixedRate : 延迟并循环执行命令 +scheduleWithFixedDelay: 延迟并以固定休息时间循环执行命令 +``` + +* ### 时间相关→[TimeUtils.java][time.java]→[Test][time.test] +``` +millis2String : 将时间戳转为时间字符串 +string2Millis : 将时间字符串转为时间戳 +string2Date : 将时间字符串转为Date类型 +date2String : 将Date类型转为时间字符串 +date2Millis : 将Date类型转为时间戳 +millis2Date : 将时间戳转为Date类型 +getTimeSpan : 获取两个时间差(单位:unit) +getFitTimeSpan : 获取合适型两个时间差 +getNowMills : 获取当前毫秒时间戳 +getNowString : 获取当前时间字符串 +getNowDate : 获取当前Date +getTimeSpanByNow : 获取与当前时间的差(单位:unit) +getFitTimeSpanByNow : 获取合适型与当前时间的差 +getFriendlyTimeSpanByNow: 获取友好型与当前时间的差 +getMillis : 获取与给定时间等于时间差的时间戳 +getString : 获取与给定时间等于时间差的时间字符串 +getDate : 获取与给定时间等于时间差的Date +getMillisByNow : 获取与当前时间等于时间差的时间戳 +getStringByNow : 获取与当前时间等于时间差的时间字符串 +getDateByNow : 获取与当前时间等于时间差的Date +isSameDay : 判断是否同一天 +isLeapYear : 判断是否闰年 +getWeek, getWeekIndex : 获取星期 +getWeekOfMonth : 获取月份中的第几周 +getWeekOfYear : 获取年份中的第几周 +getChineseZodiac : 获取生肖 +getZodiac : 获取星座 +``` + +* ### 吐司相关→[ToastUtils.java][toast.java]→[Demo][toast.demo] +``` +init : 吐司初始化 +showShortToastSafe: 安全地显示短时吐司 +showLongToastSafe : 安全地显示长时吐司 +showShortToast : 显示短时吐司 +showLongToast : 显示长时吐司 +cancelToast : 取消吐司显示 +``` + +* ### 压缩相关→[ZipUtils.java][zip.java]→[Test][zip.test] +``` +zipFiles : 批量压缩文件 +zipFile : 压缩文件 +unzipFiles : 批量解压文件 +unzipFile : 解压文件 +unzipFileByKeyword: 解压带有关键字的文件 +getFilesPath : 获取压缩文件中的文件路径链表 +getComments : 获取压缩文件中的注释链表 +getEntries : 获取压缩文件中的文件对象 +``` + +* ### 更新Log→[update_log.md][update_log.md] + +*** + +## About + +* 做这份整理是想把它作为Android开发的小字典,当遇到一些琐碎问题时,不用再面向百度或者谷歌查询API的使用,费时费力,这里有的话,大家尽管撸走;同时也希望它能逐日壮大起来,期待大家的Star和完善,当然我也会一直更新发布版本和日志,为了方便大家导入,现已上传jcenter;其中很多代码也是汇四方之精华,谢谢前辈们的提供,当然最终还是要通过单元测试的,如有错误,请及时告之。 +* QQ群提供讨论,1群:74721490(已满)2群:25206533,至于验证问题对大家来说肯定都是小case。关于群:[在别人生活里低调地做配角(我和466个程序员的故事)][group]。 +* 我的[微博][weibo],求个关注哈。 + +## Download + +Gradle: +``` groovy +compile 'com.blankj:utilcode:1.4.0' +``` + +## How to use + +``` +Utils.init(context); +``` + +## Proguard + +``` +-keep class com.blankj.utilcode.** { *; } +-keepclassmembers class com.blankj.utilcode.** { *; } +-dontwarn com.blankj.utilcode.** +``` + +## License + +``` +Copyright 2016 Blankj + +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. +``` + +[update_log.md]: https://github.com/Blankj/AndroidUtilCode/blob/master/update_log.md + +[readme.md]: https://github.com/Blankj/AndroidUtilCode +[readme-cn.md]: https://github.com/Blankj/AndroidUtilCode/blob/master/README-CN.md + +[activity.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ActivityUtils.java +[activity.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/ActivityActivity.java + +[app.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/AppUtils.java +[app.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/AppActivity.java + +[bar.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/BarUtils.java + +[clean.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/CleanUtils.java +[clean.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/CleanActivity.java + +[clipboard.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ClipboardUtils.java + +[close.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/CloseUtils.java + +[convert.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ConvertUtils.java +[convert.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/ConvertUtilsTest.java + +[crash.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/CrashUtils.java + +[device.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/DeviceUtils.java +[device.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/DeviceActivity.java + +[empty.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/EmptyUtils.java +[empty.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/EmptyUtilsTest.java + +[encode.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/EncodeUtils.java +[encode.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/EncodeUtilsTest.java + +[encrypt.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/EncryptUtils.java +[encrypt.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/EncryptUtilsTest.java + +[file.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/FileUtils.java +[file.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/FileUtilsTest.java + +[fragment.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/FragmentUtils.java +[fragment.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/FragmentActivity.java + +[handler.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/HandlerUtils.java +[handler.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/HandlerActivity.java + +[image.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ImageUtils.java +[image.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/ImageActivity.java + +[intent.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/IntentUtils.java + +[keyboard.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java +[keyboard.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/KeyboardActivity.java + +[location.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/LocationUtils.java +[location.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/LocationActivity.java + +[log.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/LogUtils.java +[log.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/LogActivity.java + +[network.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/NetworkUtils.java +[network.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/NetworkActivity.java + +[phone.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/PhoneUtils.java +[phone.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/PhoneActivity.java + +[pinyin.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/PinyinUtils.java +[pinyin.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/PinyinUtilsTest.java + +[process.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ProcessUtils.java +[process.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/ProcessActivity.java + +[regex.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/RegexUtils.java +[regex.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/RegexUtilsTest.java + +[screen.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ScreenUtils.java + +[sdcard.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/SDCardUtils.java +[sdcard.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/SDCardActivity.java + +[service.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ServiceUtils.java + +[shell.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ShellUtils.java + +[size.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/SizeUtils.java + +[snackbar.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java +[snackbar.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/SnackbarActivity.java + +[spannable.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/SpannableStringUtils.java +[spannable.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/SpannableActivity.java + +[sp.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/SPUtils.java +[sp.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/SPUtilsTest.java + +[string.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/StringUtils.java +[string.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/StringUtilsTest.java + +[thread_pool.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ThreadPoolUtils.java + +[time.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/TimeUtils.java +[time.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/TimeUtilsTest.java + +[toast.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ToastUtils.java +[toast.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/ToastActivity.java + +[zip.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ZipUtils.java +[zip.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/ZipUtilsTest.java + +[group]: http://www.jianshu.com/p/8938015df951 +[weibo]: http://weibo.com/blankcmj diff --git a/README.md b/README.md index ef4af395aa..e72030acfc 100644 --- a/README.md +++ b/README.md @@ -1,743 +1,758 @@ -# Android developers should collect the following utils - -## [README of Chinese][readme-cn.md] - -Directory is shown below: - -> - **About Activity→[ActivityUtils.java][activity.java]→[Demo][activity.demo]** - ``` -isActivityExists -launchActivity -getLauncherActivity - ``` - -> - **About App→[AppUtils.java][app.java]→[Demo][app.demo]** - ``` -isInstallApp -installApp -installAppSilent -uninstallApp -uninstallAppSilent -isAppRoot -launchApp -getAppPackageName -getAppDetailsSettings -getAppName -getAppIcon -getAppPath -getAppVersionName -getAppVersionCode -isSystemApp -isAppDebug -getAppSignature -getAppSignatureSHA1 -isAppForeground -getForegroundApp -getAppInfo -getAppsInfo -cleanAppData - ``` - -> - **About Bar→[BarUtils.java][bar.java]** - ``` -setTransparentStatusBar -hideStatusBar -getStatusBarHeight -isStatusBarExists -getActionBarHeight -showNotificationBar -hideNotificationBar - ``` - -> - **About Clean→[CleanUtils.java][clean.java]→[Demo][clean.demo]** - ``` -cleanInternalCache -cleanInternalFiles -cleanInternalDbs -cleanInternalDbByName -cleanInternalSP -cleanExternalCache -cleanCustomCache - ``` - -> - **About Clipboard→[ClipboardUtils.java][clipboard.java]** - ``` -copyText -getText -copyUri -getUri -copyIntent -getIntent - ``` - -> - **About Close→[CloseUtils.java][close.java]** - ``` -closeIO -closeIOQuietly - ``` - -> - **About Convert→[ConvertUtils.java][convert.java]→[Test][convert.test]** - ``` -bytes2HexString, hexString2Bytes -chars2Bytes, bytes2Chars -memorySize2Byte, byte2MemorySize -byte2FitMemorySize -timeSpan2Millis, millis2TimeSpan -millis2FitTimeSpan -bytes2Bits, bits2Bytes -input2OutputStream, output2InputStream -inputStream2Bytes, bytes2InputStream -outputStream2Bytes, bytes2OutputStream -inputStream2String, string2InputStream -outputStream2String, string2OutputStream -bitmap2Bytes, bytes2Bitmap -drawable2Bitmap, bitmap2Drawable -drawable2Bytes, bytes2Drawable -view2Bitmap -dp2px, px2dp -sp2px, px2sp - ``` - -> - **About Crash→[CrashUtils.java][crash.java]** - ``` -getInstance -init - ``` - -> - **About Device→[DeviceUtils.java][device.java]→[Demo][device.demo]** - ``` -isDeviceRooted -getSDKVersion -getAndroidID -getMacAddress -getManufacturer -getModel -shutdown -reboot -reboot2Recovery -reboot2Bootloader - ``` - -> - **About Empty→[EmptyUtils.java][empty.java]→[Test][empty.test]** - ``` -isEmpty -isNotEmpty - ``` - -> - **About Encode→[EncodeUtils.java][encode.java]→[Test][encode.test]** - ``` -urlEncode -urlDecode -base64Encode -base64Encode2String -base64Decode -base64UrlSafeEncode -htmlEncode -htmlDecode - ``` - -> - **About Encrypt→[EncryptUtils.java][encrypt.java]→[Test][encrypt.test]** - ``` -encryptMD2, encryptMD2ToString -encryptMD5, encryptMD5ToString -encryptMD5File, encryptMD5File2String -encryptSHA1, encryptSHA1ToString -encryptSHA224, encryptSHA224ToString -encryptSHA256, encryptSHA256ToString -encryptSHA384, encryptSHA384ToString -encryptSHA512, encryptSHA512ToString -encryptHmacMD5, encryptHmacMD5ToString -encryptHmacSHA1, encryptHmacSHA1ToString -encryptHmacSHA224, encryptHmacSHA224ToString -encryptHmacSHA256, encryptHmacSHA256ToString -encryptHmacSHA384, encryptHmacSHA384ToString -encryptHmacSHA512, encryptHmacSHA512ToString -encryptDES, encryptDES2HexString, encryptDES2Base64 -decryptDES, decryptHexStringDES, decryptBase64DES -encrypt3DES, encrypt3DES2HexString, encrypt3DES2Base64 -decrypt3DES, decryptHexString3DES, decryptBase64_3DES -encryptAES, encryptAES2HexString, encryptAES2Base64 -decryptAES, decryptHexStringAES, decryptBase64AES - ``` - -> - **About File→[FileUtils.java][file.java]→[Test][file.test]** - ``` -getFileByPath -isFileExists -rename -isDir -isFile -createOrExistsDir -createOrExistsFile -createFileByDeleteOldFile -copyDir -copyFile -moveDir -moveFile -deleteDir -deleteFile -listFilesInDir -listFilesInDir -listFilesInDirWithFilter -listFilesInDirWithFilter -listFilesInDirWithFilter -listFilesInDirWithFilter -searchFileInDir -writeFileFromIS -writeFileFromString -readFile2List -readFile2String -readFile2Bytes -getFileLastModified -getFileCharsetSimple -getFileLines -getDirSize -getFileSize -getDirLength -getFileLength -getFileMD5 -getFileMD5ToString -getDirName -getFileName -getFileNameNoExtension -getFileExtension - ``` - -> - **About Fragment→[FragmentUtils.java][fragment.java]→[Demo][fragment.demo]** - ``` -addFragment -addFragments -removeFragment -removeToFragment -removeFragments -removeAllFragments -replaceFragment -popFragment -popToFragment -popFragments -popAllFragments -popAddFragment -hideFragment -hideFragments -showFragment -hideShowFragment -getLastAddFragment -getLastAddFragmentInStack -getTopShowFragment -getTopShowFragmentInStack -getFragments -getFragmentsInStack -getAllFragments -getAllFragmentsInStack -getPreFragment -findFragment -dispatchBackPress -setBackgroundColor -setBackgroundResource -setBackground - ``` - -> - **About Handler→[HandlerUtils.java][handler.java]→[Demo][handler.demo]** - ``` -HandlerHolder - ``` - -> - **About Image→[ImageUtils.java][image.java]→[Demo][image.demo]** - ``` -bitmap2Bytes, bytes2Bitmap -drawable2Bitmap, bitmap2Drawable -drawable2Bytes, bytes2Drawable -getBitmap -scale -clip -skew -rotate -getRotateDegree -toRound -toRoundCorner -fastBlur -renderScriptBlur -stackBlur -addFrame -addReflection -addTextWatermark -addImageWatermark -toAlpha -toGray -save -isImage -getImageType -compressByScale -compressByQuality -compressBySampleSize - ``` - -> - **About Intent→[IntentUtils.java][intent.java]** - ``` -getInstallAppIntent -getUninstallAppIntent -getLaunchAppIntent -getAppDetailsSettingsIntent -getShareTextIntent -getShareImageIntent -getComponentIntent -getShutdownIntent -getCaptureIntent - ``` - -> - **About Keyboard→[KeyboardUtils.java][keyboard.java]→[Demo][keyboard.demo]** - ``` -hideSoftInput -clickBlankArea2HideSoftInput -showSoftInput -toggleSoftInput - ``` - -> - **About Location→[LocationUtils.java][location.java]→[Demo][location.demo]** - ``` -isGpsEnabled -isLocationEnabled -openGpsSettings -register -unregister -getAddress -getCountryName -getLocality -getStreet - ``` - -> - **About Log→[LogUtils.java][log.java]→[Demo][log.demo]** - ``` -v -d -i -w -e -a -file -json -xml - ``` - -> - **About Network→[NetworkUtils.java][network.java]→[Demo][network.demo]** - ``` -openWirelessSettings -isConnected -isAvailableByPing -getDataEnabled -setDataEnabled -is4G -getWifiEnabled -setWifiEnabled -isWifiConnected -isWifiAvailable -getNetworkOperatorName -getNetworkType -getIPAddress -getDomainAddress - ``` - -> - **About Phone→[PhoneUtils.java][phone.java]→[Demo][phone.demo]** - ``` -isPhone -getIMEI -getIMSI -getPhoneType -isSimCardReady -getSimOperatorName -getSimOperatorByMnc -getPhoneStatus -dial -call -sendSms -sendSmsSilent -getAllContactInfo -getContactNum -getAllSMS - ``` - -> - **About Pinyin→[PinyinUtils.java][pinyin.java]→[Test][pinyin.test]** - ``` -ccs2Pinyin -ccs2Pinyin -getPinyinFirstLetter -getPinyinFirstLetters -getSurnamePinyin -getSurnameFirstLetter - ``` - -> - **About Process→[ProcessUtils.java][process.java]→[Demo][process.demo]** - ``` -getForegroundProcessName -killAllBackgroundProcesses -killBackgroundProcesses - ``` - -> - **About Regex→[RegexUtils.java][regex.java]→[Test][regex.test]** - ``` -isMobileSimple -isMobileExact -isTel -isIDCard15 -isIDCard18 -isEmail -isURL -isZh -isUsername -isDate -isIP -isMatch -getMatches -getSplits -getReplaceFirst -getReplaceAll - ``` - -> - **About Screen→[ScreenUtils.java][screen.java]** - ``` -getScreenWidth -getScreenHeight -setLandscape -setPortrait -isLandscape -isPortrait -getScreenRotation -captureWithStatusBar -captureWithoutStatusBar -isScreenLock - ``` - -> - **About SDCard→[SDCardUtils.java][sdcard.java]→[Demo][sdcard.demo]** - ``` -isSDCardEnable -getSDCardPath -getDataPath -getFreeSpace -getSDCardInfo - ``` - -> - **About Service→[ServiceUtils.java][service.java]** - ``` -getAllRunningService -startService -stopService -bindService -unbindService -isServiceRunning - ``` - -> - **About Shell→[ShellUtils.java][shell.java]** - ``` -execCmd - ``` - -> - **About Size→[SizeUtils.java][size.java]** - ``` -dp2px, px2dp -sp2px, px2sp -applyDimension -forceGetViewSize -measureView -getMeasuredWidth -getMeasuredHeight - ``` - -> - **About Snackbar→[SnackbarUtils.java][snackbar.java]→[Demo][snackbar.demo]** - ``` -showShortSnackbar -showLongSnackbar -showIndefiniteSnackbar -addView -dismissSnackbar - ``` - -> - **About SpannableString→[SpannableStringUtils.java][spannable.java]→[Demo][spannable.demo]** - ``` -getBuilder -setFlag -setForegroundColor -setBackgroundColor -setQuoteColor -setLeadingMargin -setBullet -setProportion -setXProportion -setStrikethrough -setUnderline -setSuperscript -setSubscript -setBold -setItalic -setBoldItalic -setFontFamily -setAlign -setBitmap -setDrawable -setUri -setResourceId -setClickSpan -setUrl -setBlur -append -create - ``` - -> - **About SP→[SPUtils.java][sp.java]→[Test][sp.test]** - ``` -SPUtils -put -getString -putInt -getInt -putLong -getLong -putFloat -getFloat -putBoolean -getBoolean -getAll -remove -contains -clear - ``` - -> - **About String→[StringUtils.java][string.java]→[Test][string.test]** - ``` -isEmpty -isTrimEmpty -isSpace -equals -equalsIgnoreCase -null2Length0 -length -upperFirstLetter -lowerFirstLetter -reverse -toDBC -toSBC - ``` - -> - **About ThreadPool→[ThreadPoolUtils.java][thread_pool.java]** - ``` -ThreadPoolUtils -execute -execute -shutDown -shutDownNow -isShutDown -isTerminated -awaitTermination -submit -submit -invokeAll, invokeAny -schedule -schedule -scheduleWithFixedRate -scheduleWithFixedDelay - ``` - -> - **About Time→[TimeUtils.java][time.java]→[Test][time.test]** - ``` -millis2String -string2Millis -string2Date -date2String -date2Millis -millis2Date -getTimeSpan -getFitTimeSpan -getNowTimeMills -getNowTimeString -getNowTimeDate -getTimeSpanByNow -getFitTimeSpanByNow -getFriendlyTimeSpanByNow -isSameDay -isLeapYear -getWeek, getWeekIndex -getWeekOfMonth -getWeekOfYear -getChineseZodiac -getZodiac - ``` - -> - **About Toast→[ToastUtils.java][toast.java]→[Demo][toast.demo]** - ``` -init -showShortToastSafe -showLongToastSafe -showShortToast -showLongToast -cancelToast - ``` - -> - **About Zip→[ZipUtils.java][zip.java]→[Test][zip.test]** - ``` -zipFiles -zipFile -unzipFiles -unzipFile -unzipFileByKeyword -getFilesPath -getComments -getEntries - ``` - -> - **更新Log→[update_log.md][update_log.md]** - -*** - -## About - -**I'm so sorry for that the code is annotated with Chinese.** - -## Download - -Gradle: -``` groovy -compile 'com.blankj:utilcode:1.3.7' -``` - -## How to use - -``` -Utils.init(context); -``` - -## Proguard - -``` --keep class com.blankj.utilcode.** { *; } --keepclassmembers class com.blankj.utilcode.** { *; } --dontwarn com.blankj.utilcode.** -``` - -## License - -``` -Copyright 2016 Blankj - -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. -``` - -[update_log.md]: https://github.com/Blankj/AndroidUtilCode/blob/master/update_log.md - -[readme.md]: https://github.com/Blankj/AndroidUtilCode -[readme-cn.md]: https://github.com/Blankj/AndroidUtilCode/blob/master/README-CN.md - -[activity.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ActivityUtils.java -[activity.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/ActivityActivity.java - -[app.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/AppUtils.java -[app.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/AppActivity.java - -[bar.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/BarUtils.java - -[clean.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/CleanUtils.java -[clean.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/CleanActivity.java - -[clipboard.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ClipboardUtils.java - -[close.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/CloseUtils.java - -[convert.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ConvertUtils.java -[convert.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/ConvertUtilsTest.java - -[crash.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/CrashUtils.java - -[device.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/DeviceUtils.java -[device.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/DeviceActivity.java - -[empty.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/EmptyUtils.java -[empty.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/EmptyUtilsTest.java - -[encode.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/EncodeUtils.java -[encode.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/EncodeUtilsTest.java - -[encrypt.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/EncryptUtils.java -[encrypt.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/EncryptUtilsTest.java - -[file.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/FileUtils.java -[file.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/FileUtilsTest.java - -[fragment.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/FragmentUtils.java -[fragment.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/FragmentActivity.java - -[handler.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/HandlerUtils.java -[handler.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/HandlerActivity.java - -[image.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ImageUtils.java -[image.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/ImageActivity.java - -[intent.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/IntentUtils.java - -[keyboard.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java -[keyboard.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/KeyboardActivity.java - -[location.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/LocationUtils.java -[location.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/LocationActivity.java - -[log.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/LogUtils.java -[log.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/LogActivity.java - -[network.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/NetworkUtils.java -[network.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/NetworkActivity.java - -[phone.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/PhoneUtils.java -[phone.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/PhoneActivity.java - -[pinyin.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/PinyinUtils.java -[pinyin.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/PinyinUtilsTest.java - -[process.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ProcessUtils.java -[process.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/ProcessActivity.java - -[regex.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/RegexUtils.java -[regex.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/RegexUtilsTest.java - -[screen.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ScreenUtils.java - -[sdcard.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/SDCardUtils.java -[sdcard.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/SDCardActivity.java - -[service.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ServiceUtils.java - -[shell.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ShellUtils.java - -[size.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/SizeUtils.java - -[snackbar.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java -[snackbar.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/SnackbarActivity.java - -[spannable.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/SpannableStringUtils.java -[spannable.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/SpannableActivity.java - -[sp.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/SPUtils.java -[sp.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/SPUtilsTest.java - -[string.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/StringUtils.java -[string.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/StringUtilsTest.java - -[thread_pool.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ThreadPoolUtils.java - -[time.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/TimeUtils.java -[time.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/TimeUtilsTest.java - -[toast.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ToastUtils.java -[toast.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/ToastActivity.java - -[zip.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ZipUtils.java -[zip.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/ZipUtilsTest.java - -[group]: http://www.jianshu.com/p/8938015df951 -[weibo]: http://weibo.com/blankcmj +# Android developers should collect the following utils + +## [README of Chinese][readme-cn.md] + +## API + +* ### About Activity→[ActivityUtils.java][activity.java]→[Demo][activity.demo] +``` +isActivityExists +launchActivity +getLauncherActivity +``` + +* ### About App→[AppUtils.java][app.java]→[Demo][app.demo] +``` +isInstallApp +installApp +installAppSilent +uninstallApp +uninstallAppSilent +isAppRoot +launchApp +getAppPackageName +getAppDetailsSettings +getAppName +getAppIcon +getAppPath +getAppVersionName +getAppVersionCode +isSystemApp +isAppDebug +getAppSignature +getAppSignatureSHA1 +isAppForeground +getForegroundApp +getAppInfo +getAppsInfo +cleanAppData +``` + +* ### About Bar→[BarUtils.java][bar.java] +``` +setTransparentStatusBar +hideStatusBar +getStatusBarHeight +isStatusBarExists +getActionBarHeight +showNotificationBar +hideNotificationBar +``` + +* ### About Clean→[CleanUtils.java][clean.java]→[Demo][clean.demo] +``` +cleanInternalCache +cleanInternalFiles +cleanInternalDbs +cleanInternalDbByName +cleanInternalSP +cleanExternalCache +cleanCustomCache +``` + +* ### About Clipboard→[ClipboardUtils.java][clipboard.java] +``` +copyText +getText +copyUri +getUri +copyIntent +getIntent +``` + +* ### About Close→[CloseUtils.java][close.java] +``` +closeIO +closeIOQuietly +``` + +* ### About Convert→[ConvertUtils.java][convert.java]→[Test][convert.test] +``` +bytes2HexString, hexString2Bytes +chars2Bytes, bytes2Chars +memorySize2Byte, byte2MemorySize +byte2FitMemorySize +timeSpan2Millis, millis2TimeSpan +millis2FitTimeSpan +bytes2Bits, bits2Bytes +input2OutputStream, output2InputStream +inputStream2Bytes, bytes2InputStream +outputStream2Bytes, bytes2OutputStream +inputStream2String, string2InputStream +outputStream2String, string2OutputStream +bitmap2Bytes, bytes2Bitmap +drawable2Bitmap, bitmap2Drawable +drawable2Bytes, bytes2Drawable +view2Bitmap +dp2px, px2dp +sp2px, px2sp +``` + +* ### About Crash→[CrashUtils.java][crash.java] +``` +getInstance +init +``` + +* ### About Device→[DeviceUtils.java][device.java]→[Demo][device.demo] +``` +isDeviceRooted +getSDKVersion +getAndroidID +getMacAddress +getManufacturer +getModel +shutdown +reboot +reboot2Recovery +reboot2Bootloader +``` + +* ### About Empty→[EmptyUtils.java][empty.java]→[Test][empty.test] +``` +isEmpty +isNotEmpty +``` + +* ### About Encode→[EncodeUtils.java][encode.java]→[Test][encode.test] +``` +urlEncode +urlDecode +base64Encode +base64Encode2String +base64Decode +base64UrlSafeEncode +htmlEncode +htmlDecode +``` + +* ### About Encrypt→[EncryptUtils.java][encrypt.java]→[Test][encrypt.test] +``` +encryptMD2, encryptMD2ToString +encryptMD5, encryptMD5ToString +encryptMD5File, encryptMD5File2String +encryptSHA1, encryptSHA1ToString +encryptSHA224, encryptSHA224ToString +encryptSHA256, encryptSHA256ToString +encryptSHA384, encryptSHA384ToString +encryptSHA512, encryptSHA512ToString +encryptHmacMD5, encryptHmacMD5ToString +encryptHmacSHA1, encryptHmacSHA1ToString +encryptHmacSHA224, encryptHmacSHA224ToString +encryptHmacSHA256, encryptHmacSHA256ToString +encryptHmacSHA384, encryptHmacSHA384ToString +encryptHmacSHA512, encryptHmacSHA512ToString +encryptDES, encryptDES2HexString, encryptDES2Base64 +decryptDES, decryptHexStringDES, decryptBase64DES +encrypt3DES, encrypt3DES2HexString, encrypt3DES2Base64 +decrypt3DES, decryptHexString3DES, decryptBase64_3DES +encryptAES, encryptAES2HexString, encryptAES2Base64 +decryptAES, decryptHexStringAES, decryptBase64AES +``` + +* ### About File→[FileUtils.java][file.java]→[Test][file.test] +``` +getFileByPath +isFileExists +rename +isDir +isFile +createOrExistsDir +createOrExistsFile +createFileByDeleteOldFile +copyDir +copyFile +moveDir +moveFile +deleteDir +deleteFile +listFilesInDir +listFilesInDir +listFilesInDirWithFilter +listFilesInDirWithFilter +listFilesInDirWithFilter +listFilesInDirWithFilter +searchFileInDir +writeFileFromIS +writeFileFromString +readFile2List +readFile2String +readFile2Bytes +getFileLastModified +getFileCharsetSimple +getFileLines +getDirSize +getFileSize +getDirLength +getFileLength +getFileMD5 +getFileMD5ToString +getDirName +getFileName +getFileNameNoExtension +getFileExtension +``` + +* ### About Fragment→[FragmentUtils.java][fragment.java]→[Demo][fragment.demo] +``` +addFragment +hideAddFragment +addFragments +removeFragment +removeToFragment +removeFragments +removeAllFragments +replaceFragment +popFragment +popToFragment +popFragments +popAllFragments +popAddFragment +hideFragment +hideFragments +showFragment +hideShowFragment +getLastAddFragment +getLastAddFragmentInStack +getTopShowFragment +getTopShowFragmentInStack +getFragments +getFragmentsInStack +getAllFragments +getAllFragmentsInStack +getPreFragment +findFragment +dispatchBackPress +setBackgroundColor +setBackgroundResource +setBackground +``` + +* ### About Handler→[HandlerUtils.java][handler.java]→[Demo][handler.demo] +``` +HandlerHolder +``` + +* ### About Image→[ImageUtils.java][image.java]→[Demo][image.demo] +``` +bitmap2Bytes, bytes2Bitmap +drawable2Bitmap, bitmap2Drawable +drawable2Bytes, bytes2Drawable +getBitmap +scale +clip +skew +rotate +getRotateDegree +toRound +toRoundCorner +fastBlur +renderScriptBlur +stackBlur +addFrame +addReflection +addTextWatermark +addImageWatermark +toAlpha +toGray +save +isImage +getImageType +compressByScale +compressByQuality +compressBySampleSize +``` + +* ### About Intent→[IntentUtils.java][intent.java] +``` +getInstallAppIntent +getUninstallAppIntent +getLaunchAppIntent +getAppDetailsSettingsIntent +getShareTextIntent +getShareImageIntent +getComponentIntent +getShutdownIntent +getCaptureIntent +``` + +* ### About Keyboard→[KeyboardUtils.java][keyboard.java]→[Demo][keyboard.demo] +``` +hideSoftInput +clickBlankArea2HideSoftInput +showSoftInput +toggleSoftInput +``` + +* ### About Location→[LocationUtils.java][location.java]→[Demo][location.demo] +``` +isGpsEnabled +isLocationEnabled +openGpsSettings +register +unregister +getAddress +getCountryName +getLocality +getStreet +``` + +* ### About Log→[LogUtils.java][log.java]→[Demo][log.demo] +``` +Builder.setLogSwitch +Builder.setGlobalTag +Builder.setLogHeadSwitch +Builder.setLog2FileSwitch +Builder.setBorderSwitch +Builder.setLogFilter + +v +d +i +w +e +a +file +json +xml +``` + +* ### About Network→[NetworkUtils.java][network.java]→[Demo][network.demo] +``` +openWirelessSettings +isConnected +isAvailableByPing +getDataEnabled +setDataEnabled +is4G +getWifiEnabled +setWifiEnabled +isWifiConnected +isWifiAvailable +getNetworkOperatorName +getNetworkType +getIPAddress +getDomainAddress +``` + +* ### About Phone→[PhoneUtils.java][phone.java]→[Demo][phone.demo] +``` +isPhone +getIMEI +getIMSI +getPhoneType +isSimCardReady +getSimOperatorName +getSimOperatorByMnc +getPhoneStatus +dial +call +sendSms +sendSmsSilent +getAllContactInfo +getContactNum +getAllSMS +``` + +* ### About Pinyin→[PinyinUtils.java][pinyin.java]→[Test][pinyin.test] +``` +ccs2Pinyin +ccs2Pinyin +getPinyinFirstLetter +getPinyinFirstLetters +getSurnamePinyin +getSurnameFirstLetter +``` + +* ### About Process→[ProcessUtils.java][process.java]→[Demo][process.demo] +``` +getForegroundProcessName +killAllBackgroundProcesses +killBackgroundProcesses +``` + +* ### About Regex→[RegexUtils.java][regex.java]→[Test][regex.test] +``` +isMobileSimple +isMobileExact +isTel +isIDCard15 +isIDCard18 +isEmail +isURL +isZh +isUsername +isDate +isIP +isMatch +getMatches +getSplits +getReplaceFirst +getReplaceAll +``` + +* ### About Screen→[ScreenUtils.java][screen.java] +``` +getScreenWidth +getScreenHeight +setLandscape +setPortrait +isLandscape +isPortrait +getScreenRotation +captureWithStatusBar +captureWithoutStatusBar +isScreenLock +``` + +* ### About SDCard→[SDCardUtils.java][sdcard.java]→[Demo][sdcard.demo] +``` +isSDCardEnable +getSDCardPath +getDataPath +getFreeSpace +getSDCardInfo +``` + +* ### About Service→[ServiceUtils.java][service.java] +``` +getAllRunningService +startService +stopService +bindService +unbindService +isServiceRunning +``` + +* ### About Shell→[ShellUtils.java][shell.java] +``` +execCmd +``` + +* ### About Size→[SizeUtils.java][size.java] +``` +dp2px, px2dp +sp2px, px2sp +applyDimension +forceGetViewSize +measureView +getMeasuredWidth +getMeasuredHeight +``` + +* ### About Snackbar→[SnackbarUtils.java][snackbar.java]→[Demo][snackbar.demo] +``` +showShortSnackbar +showLongSnackbar +showIndefiniteSnackbar +addView +dismissSnackbar +``` + +* ### About SpannableString→[SpannableStringUtils.java][spannable.java]→[Demo][spannable.demo] +``` +Builder.getBuilder +Builder.setFlag +Builder.setForegroundColor +Builder.setBackgroundColor +Builder.setQuoteColor +Builder.setLeadingMargin +Builder.setBullet +Builder.setFontSize +Builder.setFontProportion +Builder.setFontXProportion +Builder.setStrikethrough +Builder.setUnderline +Builder.setSuperscript +Builder.setSubscript +Builder.setBold +Builder.setItalic +Builder.setBoldItalic +Builder.setFontFamily +Builder.setAlign +Builder.setBitmap +Builder.setDrawable +Builder.setUri +Builder.setResourceId +Builder.setClickSpan +Builder.setUrl +Builder.setBlur +Builder.append +Builder.create +``` + +* ### About SP→[SPUtils.java][sp.java]→[Test][sp.test] +``` +SPUtils +put +getString +putInt +getInt +putLong +getLong +putFloat +getFloat +putBoolean +getBoolean +getAll +remove +contains +clear +``` + +* ### About String→[StringUtils.java][string.java]→[Test][string.test] +``` +isEmpty +isTrimEmpty +isSpace +equals +equalsIgnoreCase +null2Length0 +length +upperFirstLetter +lowerFirstLetter +reverse +toDBC +toSBC +``` + +* ### About ThreadPool→[ThreadPoolUtils.java][thread_pool.java] +``` +ThreadPoolUtils +execute +execute +shutDown +shutDownNow +isShutDown +isTerminated +awaitTermination +submit +submit +invokeAll, invokeAny +schedule +schedule +scheduleWithFixedRate +scheduleWithFixedDelay +``` + +* ### About Time→[TimeUtils.java][time.java]→[Test][time.test] +``` +millis2String +string2Millis +string2Date +date2String +date2Millis +millis2Date +getTimeSpan +getFitTimeSpan +getNowMills +getNowString +getNowDate +getTimeSpanByNow +getFitTimeSpanByNow +getFriendlyTimeSpanByNow +getMillis +getString +getDate +getMillisByNow +getStringByNow +getDateByNow +isSameDay +isLeapYear +getWeek, getWeekIndex +getWeekOfMonth +getWeekOfYear +getChineseZodiac +getZodiac +``` + +* ### About Toast→[ToastUtils.java][toast.java]→[Demo][toast.demo] +``` +init +showShortToastSafe +showLongToastSafe +showShortToast +showLongToast +cancelToast +``` + +* ### About Zip→[ZipUtils.java][zip.java]→[Test][zip.test] +``` +zipFiles +zipFile +unzipFiles +unzipFile +unzipFileByKeyword +getFilesPath +getComments +getEntries +``` + +* ### About Log→[update_log.md][update_log.md]** + +*** + +## About + +**I'm so sorry for that the code is annotated with Chinese.** + +## Download + +Gradle: +``` groovy +compile 'com.blankj:utilcode:1.4.0' +``` + +## How to use + +``` +Utils.init(context); +``` + +## Proguard + +``` +-keep class com.blankj.utilcode.** { *; } +-keepclassmembers class com.blankj.utilcode.** { *; } +-dontwarn com.blankj.utilcode.** +``` + +## License + +``` +Copyright 2016 Blankj + +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. +``` + +[update_log.md]: https://github.com/Blankj/AndroidUtilCode/blob/master/update_log.md + +[readme.md]: https://github.com/Blankj/AndroidUtilCode +[readme-cn.md]: https://github.com/Blankj/AndroidUtilCode/blob/master/README-CN.md + +[activity.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ActivityUtils.java +[activity.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/ActivityActivity.java + +[app.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/AppUtils.java +[app.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/AppActivity.java + +[bar.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/BarUtils.java + +[clean.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/CleanUtils.java +[clean.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/CleanActivity.java + +[clipboard.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ClipboardUtils.java + +[close.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/CloseUtils.java + +[convert.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ConvertUtils.java +[convert.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/ConvertUtilsTest.java + +[crash.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/CrashUtils.java + +[device.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/DeviceUtils.java +[device.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/DeviceActivity.java + +[empty.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/EmptyUtils.java +[empty.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/EmptyUtilsTest.java + +[encode.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/EncodeUtils.java +[encode.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/EncodeUtilsTest.java + +[encrypt.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/EncryptUtils.java +[encrypt.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/EncryptUtilsTest.java + +[file.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/FileUtils.java +[file.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/FileUtilsTest.java + +[fragment.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/FragmentUtils.java +[fragment.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/FragmentActivity.java + +[handler.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/HandlerUtils.java +[handler.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/HandlerActivity.java + +[image.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ImageUtils.java +[image.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/ImageActivity.java + +[intent.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/IntentUtils.java + +[keyboard.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java +[keyboard.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/KeyboardActivity.java + +[location.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/LocationUtils.java +[location.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/LocationActivity.java + +[log.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/LogUtils.java +[log.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/LogActivity.java + +[network.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/NetworkUtils.java +[network.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/NetworkActivity.java + +[phone.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/PhoneUtils.java +[phone.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/PhoneActivity.java + +[pinyin.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/PinyinUtils.java +[pinyin.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/PinyinUtilsTest.java + +[process.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ProcessUtils.java +[process.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/ProcessActivity.java + +[regex.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/RegexUtils.java +[regex.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/RegexUtilsTest.java + +[screen.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ScreenUtils.java + +[sdcard.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/SDCardUtils.java +[sdcard.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/SDCardActivity.java + +[service.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ServiceUtils.java + +[shell.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ShellUtils.java + +[size.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/SizeUtils.java + +[snackbar.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java +[snackbar.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/SnackbarActivity.java + +[spannable.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/SpannableStringUtils.java +[spannable.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/SpannableActivity.java + +[sp.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/SPUtils.java +[sp.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/SPUtilsTest.java + +[string.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/StringUtils.java +[string.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/StringUtilsTest.java + +[thread_pool.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ThreadPoolUtils.java + +[time.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/TimeUtils.java +[time.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/TimeUtilsTest.java + +[toast.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ToastUtils.java +[toast.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/app/src/main/java/com/blankj/androidutilcode/activity/ToastActivity.java + +[zip.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/util/ZipUtils.java +[zip.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/src/test/java/com/blankj/utilcode/util/ZipUtilsTest.java + +[group]: http://www.jianshu.com/p/8938015df951 +[weibo]: http://weibo.com/blankcmj diff --git a/app/build.gradle b/app/build.gradle index e5ed6a99fb..98013063f7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -40,4 +40,6 @@ dependencies { debugCompile "com.squareup.leakcanary:leakcanary-android:$LEAKCANARY_VERSION" releaseCompile leakCanary testCompile leakCanary -} \ No newline at end of file +} + + diff --git a/app/src/main/java/com/blankj/androidutilcode/activity/SpannableActivity.java b/app/src/main/java/com/blankj/androidutilcode/activity/SpannableActivity.java index 7a113d716e..54ed5801cc 100644 --- a/app/src/main/java/com/blankj/androidutilcode/activity/SpannableActivity.java +++ b/app/src/main/java/com/blankj/androidutilcode/activity/SpannableActivity.java @@ -46,43 +46,43 @@ public void updateDrawState(TextPaint ds) { TextView tvAboutSpannable = (TextView) findViewById(R.id.tv_about_spannable); // 响应点击事件的话必须设置以下属性 tvAboutSpannable.setMovementMethod(LinkMovementMethod.getInstance()); - tvAboutSpannable.setText(SpannableStringUtils - .getBuilder("测试SpannableStringUtils\n") - .setBold().setForegroundColor(Color.YELLOW).setBackgroundColor(Color.GRAY).setAlign(Layout.Alignment.ALIGN_CENTER) + tvAboutSpannable.setText(new SpannableStringUtils.Builder() + .appendLine("测试SpannableStringUtils").setBold().setForegroundColor(Color.YELLOW).setBackgroundColor(Color.GRAY).setAlign(Layout.Alignment.ALIGN_CENTER) .append("测试") .append("前景色").setForegroundColor(Color.GREEN) - .append("背景色\n").setBackgroundColor(Color.RED) - .append("测试首行缩进\n").setLeadingMargin(30, 50) - .append("测试引用\n").setQuoteColor(Color.YELLOW) - .append("测试列表项\n").setBullet(30, Color.YELLOW) + .appendLine("背景色").setBackgroundColor(Color.RED) + .appendLine("测试首行缩进").setLeadingMargin(30, 50) + .appendLine("测试引用").setQuoteColor(Color.BLACK) + .appendLine("测试列表项").setBullet(30, Color.BLACK) + .appendLine("测试32dp字体").setFontSize(36, true) .append("测试") - .append("2倍字体\n").setProportion(2) + .appendLine("2倍字体").setFontProportion(2) .append("测试") - .append("横向2倍字体\n").setXProportion(2) + .appendLine("横向2倍字体").setFontXProportion(2) .append("测试") .append("删除线").setStrikethrough() - .append("下划线\n").setUnderline() + .appendLine("下划线").setUnderline() .append("测试") .append("上标").setSuperscript() - .append("下标\n").setSubscript() + .appendLine("下标").setSubscript() .append("测试") .append("粗体").setBold() .append("斜体").setItalic() - .append("粗斜体\n").setBoldItalic() - .append("monospace font\n").setFontFamily("monospace") - .append("serif font\n").setFontFamily("serif") - .append("sans-serif font\n").setFontFamily("sans-serif") - .append("测试正常对齐\n").setAlign(Layout.Alignment.ALIGN_NORMAL) - .append("测试居中对齐\n").setAlign(Layout.Alignment.ALIGN_CENTER) - .append("测试相反对齐\n").setAlign(Layout.Alignment.ALIGN_OPPOSITE) + .appendLine("粗斜体").setBoldItalic() + .appendLine("monospace font").setFontFamily("monospace") + .appendLine("serif font").setFontFamily("serif") + .appendLine("sans-serif font").setFontFamily("sans-serif") + .appendLine("测试正常对齐").setAlign(Layout.Alignment.ALIGN_NORMAL) + .appendLine("测试居中对齐").setAlign(Layout.Alignment.ALIGN_CENTER) + .appendLine("测试相反对齐").setAlign(Layout.Alignment.ALIGN_OPPOSITE) .append("测试") - .append("图片\n").setResourceId(R.mipmap.ic_launcher) + .appendLine("图片").setResourceId(R.mipmap.ic_launcher) .append("测试") - .append("点击事件\n").setClickSpan(clickableSpan) + .appendLine("点击事件").setClickSpan(clickableSpan) .append("测试") - .append("Url\n").setUrl("https://github.com/Blankj/AndroidUtilCode") + .appendLine("Url").setUrl("https://github.com/Blankj/AndroidUtilCode") .append("测试") - .append("模糊字体\n").setBlur(3, BlurMaskFilter.Blur.NORMAL) + .append("模糊").setBlur(3, BlurMaskFilter.Blur.NORMAL) .create() ); } diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 217e73ab24..0c41ff9ece 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -1,4 +1,4 @@ 16dp - 32sp + 26sp diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 51141efe31..6909ad31c3 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -13,10 +13,11 @@ - diff --git a/update_log.md b/update_log.md index bb97509feb..f045d3e1cb 100644 --- a/update_log.md +++ b/update_log.md @@ -1,5 +1,6 @@ +* 17/04/21 发布Version1.4.0 +* 17/04/20 SpannableStringUtils新增设置字体尺寸 * 17/03/29 修改README -* 17/03/28 新增BaseActivity * 17/03/27 更新LogUtils * 17/03/26 更新LogUtils * 17/03/25 更新LogUtils diff --git a/utilcode/project.properties b/utilcode/project.properties index 55eb27e9cf..174f843233 100644 --- a/utilcode/project.properties +++ b/utilcode/project.properties @@ -1,10 +1,10 @@ #project -project.name=ALog +project.name=UtilCode project.groupId=com.blankj -project.artifactId=alog +project.artifactId=utilcode project.packaging=aar -project.siteUrl=https://github.com/Blankj/ALog -project.gitUrl=https://github.com/Blankj/ALog.git +project.siteUrl=https://github.com/Blankj/AndroidUtilCode +project.gitUrl=https://github.com/Blankj/AndroidUtilCode.git #javadoc -javadoc.name=ALog +javadoc.name=UtilCode \ No newline at end of file diff --git a/utilcode/src/main/java/com/blankj/utilcode/util/BarUtils.java b/utilcode/src/main/java/com/blankj/utilcode/util/BarUtils.java index 50535b014a..311864d3fd 100644 --- a/utilcode/src/main/java/com/blankj/utilcode/util/BarUtils.java +++ b/utilcode/src/main/java/com/blankj/utilcode/util/BarUtils.java @@ -68,6 +68,7 @@ public static void setColor(Activity activity, int color, int statusBarAlpha) { } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView(); + decorView.getChildAt(0).setFitsSystemWindows(false); int count = decorView.getChildCount(); if (count > 0 && decorView.getChildAt(count - 1) instanceof StatusBarView) { decorView.getChildAt(count - 1).setBackgroundColor(calculateStatusColor(color, statusBarAlpha)); diff --git a/utilcode/src/main/java/com/blankj/utilcode/util/PermissionUtils.java b/utilcode/src/main/java/com/blankj/utilcode/util/PermissionUtils.java new file mode 100644 index 0000000000..175c2e7eb6 --- /dev/null +++ b/utilcode/src/main/java/com/blankj/utilcode/util/PermissionUtils.java @@ -0,0 +1,138 @@ +package com.blankj.utilcode.util; + +import android.annotation.TargetApi; +import android.app.Activity; +import android.content.Context; +import android.content.pm.PackageManager; +import android.os.Build; +import android.support.v4.app.ActivityCompat; +import android.support.v4.content.ContextCompat; + +import java.util.ArrayList; +import java.util.List; + +/** + *
+ *     author: Blankj
+ *     blog  : http://blankj.com
+ *     time  : 2017/04/16
+ *     desc  : 权限相关工具类
+ * 
+ */ +public final class PermissionUtils { + + private static int mRequestCode = -1; + + private static OnPermissionListener mOnPermissionListener; + + public interface OnPermissionListener { + + void onPermissionGranted(); + + void onPermissionDenied(String[] deniedPermissions); + } + + public abstract static class RationaleHandler { + private Context context; + private int requestCode; + private String[] permissions; + + protected abstract void showRationale(); + + void showRationale(Context context, int requestCode, String[] permissions) { + this.context = context; + this.requestCode = requestCode; + this.permissions = permissions; + showRationale(); + } + + @TargetApi(Build.VERSION_CODES.M) + public void requestPermissionsAgain() { + ((Activity) context).requestPermissions(permissions, requestCode); + } + } + + @TargetApi(Build.VERSION_CODES.M) + public static void requestPermissions(Context context, int requestCode + , String[] permissions, OnPermissionListener listener) { + requestPermissions(context, requestCode, permissions, listener, null); + } + + @TargetApi(Build.VERSION_CODES.M) + public static void requestPermissions(Context context, int requestCode + , String[] permissions, OnPermissionListener listener, RationaleHandler handler) { + if (context instanceof Activity) { + mRequestCode = requestCode; + mOnPermissionListener = listener; + String[] deniedPermissions = getDeniedPermissions(context, permissions); + if (deniedPermissions.length > 0) { + boolean rationale = shouldShowRequestPermissionRationale(context, deniedPermissions); + if (rationale && handler != null) { + handler.showRationale(context, requestCode, deniedPermissions); + } else { + ((Activity) context).requestPermissions(deniedPermissions, requestCode); + } + } else { + if (mOnPermissionListener != null) + mOnPermissionListener.onPermissionGranted(); + } + } else { + throw new RuntimeException("Context must be an Activity"); + } + } + + /** + * 请求权限结果,对应Activity中onRequestPermissionsResult()方法。 + */ + public static void onRequestPermissionsResult(Activity context, int requestCode, String[] permissions, int[] + grantResults) { + if (mRequestCode != -1 && requestCode == mRequestCode) { + if (mOnPermissionListener != null) { + String[] deniedPermissions = getDeniedPermissions(context, permissions); + if (deniedPermissions.length > 0) { + mOnPermissionListener.onPermissionDenied(deniedPermissions); + } else { + mOnPermissionListener.onPermissionGranted(); + } + } + } + } + + /** + * 获取请求权限中需要授权的权限 + */ + private static String[] getDeniedPermissions(Context context, String[] permissions) { + List deniedPermissions = new ArrayList<>(); + for (String permission : permissions) { + if (ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_DENIED) { + deniedPermissions.add(permission); + } + } + return deniedPermissions.toArray(new String[deniedPermissions.size()]); + } + + /** + * 是否彻底拒绝了某项权限 + */ + public static boolean hasAlwaysDeniedPermission(Context context, String... deniedPermissions) { + for (String deniedPermission : deniedPermissions) { + if (!shouldShowRequestPermissionRationale(context, deniedPermission)) { + return true; + } + } + return false; + } + + /** + * 是否有权限需要说明提示 + */ + private static boolean shouldShowRequestPermissionRationale(Context context, String... deniedPermissions) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return false; + boolean rationale; + for (String permission : deniedPermissions) { + rationale = ActivityCompat.shouldShowRequestPermissionRationale((Activity) context, permission); + if (rationale) return true; + } + return false; + } +} \ No newline at end of file diff --git a/utilcode/src/main/java/com/blankj/utilcode/util/SpannableStringUtils.java b/utilcode/src/main/java/com/blankj/utilcode/util/SpannableStringUtils.java index e91fef5207..4d5d2f12ae 100644 --- a/utilcode/src/main/java/com/blankj/utilcode/util/SpannableStringUtils.java +++ b/utilcode/src/main/java/com/blankj/utilcode/util/SpannableStringUtils.java @@ -12,10 +12,12 @@ import android.text.Layout.Alignment; import android.text.SpannableStringBuilder; import android.text.Spanned; +import android.text.style.AbsoluteSizeSpan; import android.text.style.AlignmentSpan; import android.text.style.BackgroundColorSpan; import android.text.style.BulletSpan; import android.text.style.ClickableSpan; +import android.text.style.DynamicDrawableSpan; import android.text.style.ForegroundColorSpan; import android.text.style.ImageSpan; import android.text.style.LeadingMarginSpan; @@ -47,15 +49,7 @@ private SpannableStringUtils() { throw new UnsupportedOperationException("u can't instantiate me..."); } - /** - * 获取建造者 - * - * @param text 样式字符串文本 - * @return {@link Builder} - */ - public static Builder getBuilder(@NonNull CharSequence text) { - return new Builder(text); - } + private static final String LINE_SEPARATOR = System.getProperty("line.separator"); public static class Builder { @@ -71,53 +65,54 @@ public static class Builder { private int quoteColor; private boolean isLeadingMargin; - private int first; - private int rest; + private int first; + private int rest; private boolean isBullet; - private int gapWidth; - private int bulletColor; - - private float proportion; - private float xProportion; - private boolean isStrikethrough; - private boolean isUnderline; - private boolean isSuperscript; - private boolean isSubscript; - private boolean isBold; - private boolean isItalic; - private boolean isBoldItalic; - private String fontFamily; + private int gapWidth; + private int bulletColor; + + private int fontSize; + private boolean fontSizeIsDp; + private float fontProportion; + private float fontXProportion; + private boolean isStrikethrough; + private boolean isUnderline; + private boolean isSuperscript; + private boolean isSubscript; + private boolean isBold; + private boolean isItalic; + private boolean isBoldItalic; + private String fontFamily; private Alignment align; - private boolean imageIsBitmap; - private Bitmap bitmap; - private boolean imageIsDrawable; + private boolean imageIsBitmap; + private Bitmap bitmap; + private boolean imageIsDrawable; private Drawable drawable; - private boolean imageIsUri; - private Uri uri; - private boolean imageIsResourceId; + private boolean imageIsUri; + private Uri uri; + private boolean imageIsResourceId; @DrawableRes - private int resourceId; + private int resourceId; private ClickableSpan clickSpan; - private String url; + private String url; private boolean isBlur; - private float radius; - private Blur style; + private float radius; + private Blur style; private SpannableStringBuilder mBuilder; - - private Builder(@NonNull CharSequence text) { - this.text = text; + public Builder() { flag = Spanned.SPAN_EXCLUSIVE_EXCLUSIVE; foregroundColor = defaultValue; backgroundColor = defaultValue; quoteColor = defaultValue; - proportion = -1; - xProportion = -1; + fontSize = -1; + fontProportion = -1; + fontXProportion = -1; mBuilder = new SpannableStringBuilder(); } @@ -198,25 +193,38 @@ public Builder setBullet(int gapWidth, int color) { return this; } + /** + * 设置字体尺寸 + * + * @param size 尺寸 + * @param isDp 是否使用dip + * @return {@link Builder} + */ + public Builder setFontSize(int size, boolean isDp) { + this.fontSize = size; + this.fontSizeIsDp = isDp; + return this; + } + /** * 设置字体比例 * - * @param proportion 比例 + * @param fontProportion 字体比例 * @return {@link Builder} */ - public Builder setProportion(float proportion) { - this.proportion = proportion; + public Builder setFontProportion(float fontProportion) { + this.fontProportion = fontProportion; return this; } /** * 设置字体横向比例 * - * @param proportion 比例 + * @param fontXProportion 比例 * @return {@link Builder} */ - public Builder setXProportion(float proportion) { - this.xProportion = proportion; + public Builder setFontXProportion(float fontXProportion) { + this.fontXProportion = fontXProportion; return this; } @@ -423,7 +431,7 @@ public Builder setBlur(float radius, Blur style) { */ public Builder appendLine(@NonNull CharSequence text) { setSpan(); - this.text = text + System.getProperty("line.separator"); + this.text = text + LINE_SEPARATOR; return this; } @@ -453,6 +461,7 @@ public SpannableStringBuilder create() { * 设置样式 */ private void setSpan() { + if (text == null || text.length() == 0) return; int start = mBuilder.length(); mBuilder.append(this.text); int end = mBuilder.length(); @@ -469,20 +478,25 @@ private void setSpan() { isLeadingMargin = false; } if (quoteColor != defaultValue) { - mBuilder.setSpan(new QuoteSpan(quoteColor), start, end, 0); + mBuilder.setSpan(new QuoteSpan(quoteColor), start, end, flag); quoteColor = defaultValue; } if (isBullet) { - mBuilder.setSpan(new BulletSpan(gapWidth, bulletColor), start, end, 0); + mBuilder.setSpan(new BulletSpan(gapWidth, bulletColor), start, end, flag); isBullet = false; } - if (proportion != -1) { - mBuilder.setSpan(new RelativeSizeSpan(proportion), start, end, flag); - proportion = -1; + if (fontSize != -1) { + mBuilder.setSpan(new AbsoluteSizeSpan(fontSize, fontSizeIsDp), start, end, flag); + fontSize = -1; + fontSizeIsDp = false; + } + if (fontProportion != -1) { + mBuilder.setSpan(new RelativeSizeSpan(fontProportion), start, end, flag); + fontProportion = -1; } - if (xProportion != -1) { - mBuilder.setSpan(new ScaleXSpan(xProportion), start, end, flag); - xProportion = -1; + if (fontXProportion != -1) { + mBuilder.setSpan(new ScaleXSpan(fontXProportion), start, end, flag); + fontXProportion = -1; } if (isStrikethrough) { mBuilder.setSpan(new StrikethroughSpan(), start, end, flag); @@ -534,7 +548,7 @@ private void setSpan() { uri = null; imageIsUri = false; } else { - mBuilder.setSpan(new ImageSpan(Utils.getContext(), resourceId), start, end, flag); + mBuilder.setSpan(new ImageSpan(Utils.getContext(), resourceId, DynamicDrawableSpan.ALIGN_BASELINE), start, end, flag); resourceId = 0; imageIsResourceId = false; } diff --git a/utilcode/src/main/java/com/blankj/utilcode/util/TimeUtils.java b/utilcode/src/main/java/com/blankj/utilcode/util/TimeUtils.java index 971db452ff..f08b6dcc30 100644 --- a/utilcode/src/main/java/com/blankj/utilcode/util/TimeUtils.java +++ b/utilcode/src/main/java/com/blankj/utilcode/util/TimeUtils.java @@ -338,7 +338,7 @@ public static long getTimeSpan(String time0, String time1, @TimeConstants.Unit i * @return unit时间戳 */ public static long getTimeSpan(String time0, String time1, @TimeConstants.Unit int unit, String pattern) { - return ConvertUtils.millis2TimeSpan(Math.abs(string2Millis(time0, pattern) - string2Millis(time1, pattern)), unit); + return millis2TimeSpan(Math.abs(string2Millis(time0, pattern) - string2Millis(time1, pattern)), unit); } /** @@ -357,7 +357,7 @@ public static long getTimeSpan(String time0, String time1, @TimeConstants.Unit i * @return unit时间戳 */ public static long getTimeSpan(Date date0, Date date1, @TimeConstants.Unit int unit) { - return ConvertUtils.millis2TimeSpan(Math.abs(date2Millis(date0) - date2Millis(date1)), unit); + return millis2TimeSpan(Math.abs(date2Millis(date0) - date2Millis(date1)), unit); } /** @@ -376,7 +376,7 @@ public static long getTimeSpan(Date date0, Date date1, @TimeConstants.Unit int u * @return unit时间戳 */ public static long getTimeSpan(long millis0, long millis1, @TimeConstants.Unit int unit) { - return ConvertUtils.millis2TimeSpan(Math.abs(millis0 - millis1), unit); + return millis2TimeSpan(Math.abs(millis0 - millis1), unit); } /** @@ -395,7 +395,7 @@ public static long getTimeSpan(long millis0, long millis1, @TimeConstants.Unit i * @return 合适型两个时间差 */ public static String getFitTimeSpan(String time0, String time1, int precision) { - return ConvertUtils.millis2FitTimeSpan(Math.abs(string2Millis(time0, DEFAULT_PATTERN) - string2Millis(time1, DEFAULT_PATTERN)), precision); + return millis2FitTimeSpan(Math.abs(string2Millis(time0, DEFAULT_PATTERN) - string2Millis(time1, DEFAULT_PATTERN)), precision); } /** @@ -415,7 +415,7 @@ public static String getFitTimeSpan(String time0, String time1, int precision) { * @return 合适型两个时间差 */ public static String getFitTimeSpan(String time0, String time1, int precision, String pattern) { - return ConvertUtils.millis2FitTimeSpan(Math.abs(string2Millis(time0, pattern) - string2Millis(time1, pattern)), precision); + return millis2FitTimeSpan(Math.abs(string2Millis(time0, pattern) - string2Millis(time1, pattern)), precision); } /** @@ -433,7 +433,7 @@ public static String getFitTimeSpan(String time0, String time1, int precision, S * @return 合适型两个时间差 */ public static String getFitTimeSpan(Date date0, Date date1, int precision) { - return ConvertUtils.millis2FitTimeSpan(Math.abs(date2Millis(date0) - date2Millis(date1)), precision); + return millis2FitTimeSpan(Math.abs(date2Millis(date0) - date2Millis(date1)), precision); } /** @@ -451,7 +451,7 @@ public static String getFitTimeSpan(Date date0, Date date1, int precision) { * @return 合适型两个时间差 */ public static String getFitTimeSpan(long millis0, long millis1, int precision) { - return ConvertUtils.millis2FitTimeSpan(Math.abs(millis0 - millis1), precision); + return millis2FitTimeSpan(Math.abs(millis0 - millis1), precision); } /** @@ -459,7 +459,7 @@ public static String getFitTimeSpan(long millis0, long millis1, int precision) { * * @return 毫秒时间戳 */ - public static long getNowTimeMills() { + public static long getNowMills() { return System.currentTimeMillis(); } @@ -469,7 +469,7 @@ public static long getNowTimeMills() { * * @return 时间字符串 */ - public static String getNowTimeString() { + public static String getNowString() { return millis2String(System.currentTimeMillis(), DEFAULT_PATTERN); } @@ -480,7 +480,7 @@ public static String getNowTimeString() { * @param pattern 时间格式 * @return 时间字符串 */ - public static String getNowTimeString(String pattern) { + public static String getNowString(String pattern) { return millis2String(System.currentTimeMillis(), pattern); } @@ -489,7 +489,7 @@ public static String getNowTimeString(String pattern) { * * @return Date类型时间 */ - public static Date getNowTimeDate() { + public static Date getNowDate() { return new Date(); } @@ -509,7 +509,7 @@ public static Date getNowTimeDate() { * @return unit时间戳 */ public static long getTimeSpanByNow(String time, @TimeConstants.Unit int unit) { - return getTimeSpan(getNowTimeString(), time, unit, DEFAULT_PATTERN); + return getTimeSpan(getNowString(), time, unit, DEFAULT_PATTERN); } /** @@ -529,7 +529,7 @@ public static long getTimeSpanByNow(String time, @TimeConstants.Unit int unit) { * @return unit时间戳 */ public static long getTimeSpanByNow(String time, @TimeConstants.Unit int unit, String pattern) { - return getTimeSpan(getNowTimeString(), time, unit, pattern); + return getTimeSpan(getNowString(), time, unit, pattern); } /** @@ -585,7 +585,7 @@ public static long getTimeSpanByNow(long millis, @TimeConstants.Unit int unit) { * @return 合适型与当前时间的差 */ public static String getFitTimeSpanByNow(String time, int precision) { - return getFitTimeSpan(getNowTimeString(), time, precision, DEFAULT_PATTERN); + return getFitTimeSpan(getNowString(), time, precision, DEFAULT_PATTERN); } /** @@ -606,7 +606,7 @@ public static String getFitTimeSpanByNow(String time, int precision) { * @return 合适型与当前时间的差 */ public static String getFitTimeSpanByNow(String time, int precision, String pattern) { - return getFitTimeSpan(getNowTimeString(), time, precision, pattern); + return getFitTimeSpan(getNowString(), time, precision, pattern); } /** @@ -625,7 +625,7 @@ public static String getFitTimeSpanByNow(String time, int precision, String patt * @return 合适型与当前时间的差 */ public static String getFitTimeSpanByNow(Date date, int precision) { - return getFitTimeSpan(getNowTimeDate(), date, precision); + return getFitTimeSpan(getNowDate(), date, precision); } /** @@ -746,6 +746,350 @@ public static String getFriendlyTimeSpanByNow(long millis) { } } + /** + * 获取与给定时间等于时间差的时间戳 + * + * @param millis 给定时间 + * @param timeSpan 时间差的毫秒时间戳 + * @param unit 单位类型 + * + * @return 与给定时间等于时间差的时间戳 + */ + public static long getMillis(long millis, long timeSpan, @TimeConstants.Unit int unit) { + return millis + timeSpan2Millis(timeSpan, unit); + } + + /** + * 获取与给定时间等于时间差的时间戳 + * + * @param time 给定时间 + * @param timeSpan 时间差的毫秒时间戳 + * @param unit 单位类型 + * + * @return 与给定时间等于时间差的时间戳 + */ + public static long getMillis(String time, long timeSpan, @TimeConstants.Unit int unit) { + return getMillis(time, DEFAULT_PATTERN, timeSpan, unit); + } + + /** + * 获取与给定时间等于时间差的时间戳 + * + * @param time 给定时间 + * @param pattern 时间格式 + * @param timeSpan 时间差的毫秒时间戳 + * @param unit 单位类型 + * + * @return 与给定时间等于时间差的时间戳 + */ + public static long getMillis(String time, String pattern, long timeSpan, @TimeConstants.Unit int unit) { + return string2Millis(time, pattern) + timeSpan2Millis(timeSpan, unit); + } + + /** + * 获取与给定时间等于时间差的时间戳 + * + * @param date 给定时间 + * @param timeSpan 时间差的毫秒时间戳 + * @param unit 单位类型 + * + * @return 与给定时间等于时间差的时间戳 + */ + public static long getMillis(Date date, long timeSpan, @TimeConstants.Unit int unit) { + return date2Millis(date) + timeSpan2Millis(timeSpan, unit); + } + + /** + * 获取与给定时间等于时间差的时间字符串 + * + * @param millis 给定时间 + * @param timeSpan 时间差的毫秒时间戳 + * @param unit 单位类型 + * + * @return 与给定时间等于时间差的时间字符串 + */ + public static String getString(long millis, long timeSpan, @TimeConstants.Unit int unit) { + return getString(millis, DEFAULT_PATTERN, timeSpan, unit); + } + + /** + * 获取与给定时间等于时间差的时间字符串 + * + * @param millis 给定时间 + * @param pattern 时间格式 + * @param timeSpan 时间差的毫秒时间戳 + * @param unit 单位类型 + * + * @return 与给定时间等于时间差的时间字符串 + */ + public static String getString(long millis, String pattern, long timeSpan, @TimeConstants.Unit int unit) { + return millis2String(millis + timeSpan2Millis(timeSpan, unit), pattern); + } + + /** + * 获取与给定时间等于时间差的时间字符串 + * + * @param time 给定时间 + * @param timeSpan 时间差的毫秒时间戳 + * @param unit 单位类型 + * + * @return 与给定时间等于时间差的时间字符串 + */ + public static String getString(String time, long timeSpan, @TimeConstants.Unit int unit) { + return getString(time, DEFAULT_PATTERN, timeSpan, unit); + } + + /** + * 获取与给定时间等于时间差的时间字符串 + * + * @param time 给定时间 + * @param pattern 时间格式 + * @param timeSpan 时间差的毫秒时间戳 + * @param unit 单位类型 + * + * @return 与给定时间等于时间差的时间字符串 + */ + public static String getString(String time, String pattern, long timeSpan, @TimeConstants.Unit int unit) { + return millis2String(string2Millis(time, pattern) + timeSpan2Millis(timeSpan, unit), pattern); + } + + /** + * 获取与给定时间等于时间差的时间字符串 + * + * @param date 给定时间 + * @param timeSpan 时间差的毫秒时间戳 + * @param unit 单位类型 + * + * @return 与给定时间等于时间差的时间字符串 + */ + public static String getString(Date date, long timeSpan, @TimeConstants.Unit int unit) { + return getString(date, DEFAULT_PATTERN, timeSpan, unit); + } + + /** + * 获取与给定时间等于时间差的时间字符串 + * + * @param date 给定时间 + * @param pattern 时间格式 + * @param timeSpan 时间差的毫秒时间戳 + * @param unit 单位类型 + * + * @return 与给定时间等于时间差的时间字符串 + */ + public static String getString(Date date, String pattern, long timeSpan, @TimeConstants.Unit int unit) { + return millis2String(date2Millis(date) + timeSpan2Millis(timeSpan, unit), pattern); + } + + /** + * 获取与给定时间等于时间差的Date + * + * @param millis 给定时间 + * @param timeSpan 时间差的毫秒时间戳 + * @param unit 单位类型 + * + * @return 与给定时间等于时间差的Date + */ + public static Date getDate(long millis, long timeSpan, @TimeConstants.Unit int unit) { + return millis2Date(millis + timeSpan2Millis(timeSpan, unit)); + } + + /** + * 获取与给定时间等于时间差的Date + * + * @param time 给定时间 + * @param timeSpan 时间差的毫秒时间戳 + * @param unit 单位类型 + * + * @return 与给定时间等于时间差的Date + */ + public static Date getDate(String time, long timeSpan, @TimeConstants.Unit int unit) { + return getDate(time, DEFAULT_PATTERN, timeSpan, unit); + } + + /** + * 获取与给定时间等于时间差的Date + * + * @param time 给定时间 + * @param pattern 时间格式 + * @param timeSpan 时间差的毫秒时间戳 + * @param unit 单位类型 + * + * @return 与给定时间等于时间差的Date + */ + public static Date getDate(String time, String pattern, long timeSpan, @TimeConstants.Unit int unit) { + return millis2Date(string2Millis(time, pattern) + timeSpan2Millis(timeSpan, unit)); + } + + /** + * 获取与给定时间等于时间差的Date + * + * @param date 给定时间 + * @param timeSpan 时间差的毫秒时间戳 + * @param unit 单位类型 + * + * @return 与给定时间等于时间差的Date + */ + public static Date getDate(Date date, long timeSpan, @TimeConstants.Unit int unit) { + return millis2Date(date2Millis(date) + timeSpan2Millis(timeSpan, unit)); + } + + /** + * 获取与当前时间等于时间差的时间戳 + * + * @param timeSpan 时间差的毫秒时间戳 + * @param unit 单位类型 + * + * @return 与当前时间等于时间差的时间戳 + */ + public static long getMillisByNow(long timeSpan, @TimeConstants.Unit int unit) { + return getNowMills() + timeSpan2Millis(timeSpan, unit); + } + + /** + * 获取与当前时间等于时间差的时间字符串 + * + * @param timeSpan 时间差的毫秒时间戳 + * @param unit 单位类型 + * + * @return 与当前时间等于时间差的时间字符串 + */ + public static String getStringByNow(long timeSpan, @TimeConstants.Unit int unit) { + return getStringByNow(timeSpan, unit, DEFAULT_PATTERN); + } + + /** + * 获取与当前时间等于时间差的时间字符串 + * + * @param timeSpan 时间差的毫秒时间戳 + * @param unit 单位类型 + * + * @param pattern 时间格式 + * @return 与当前时间等于时间差的时间字符串 + */ + public static String getStringByNow(long timeSpan, @TimeConstants.Unit int unit, String pattern) { + return millis2String(getNowMills() + timeSpan2Millis(timeSpan, unit), pattern); + } + + /** + * 获取与当前时间等于时间差的Date + * + * @param timeSpan 时间差的毫秒时间戳 + * @param unit 单位类型 + * + * @return 与当前时间等于时间差的Date + */ + public static Date getDateByNow(long timeSpan, @TimeConstants.Unit int unit) { + return millis2Date(getNowMills() + timeSpan2Millis(timeSpan, unit)); + } + /** * 判断是否同一天 *

time格式为yyyy-MM-dd HH:mm:ss

@@ -1156,97 +1500,73 @@ public static String getZodiac(int month, int day) { : (month + 10) % 12]; } - /** - * 与给定时间间隔millis的日期 - * @param time 指定时间 - * @param millis 间隔的毫秒数 - * @return 默认格式的新日期 - */ - public static String getDateStringAfterTimeSpan(String time, long millis) { - return millis2String(string2Millis(time) + millis); - } - - /** - * 与给定时间间隔millis的日期 - * @param time 指定的原时间 - * @param pattern 时间格式 - * @param millis 间隔的毫秒数 - * @return 给定格式的日期字符串 - */ - public static String getDateStringAfterTimeSpan(String time, String pattern, long millis) { - return millis2String(string2Millis(time, pattern) + millis, pattern); - } /** - * 与给定时间指定间隔的日期 - * @param time 指定的原时间 - * @param pattern 时间格式 - * @param timeSpanNum 时间间隔数 - * @param unit 时间间隔单位 - * @return 计算后的新时间格式化后的字符串 - */ - public static String getDateStringAfterTimeSpan(String time, String pattern, long timeSpanNum, @TimeConstants.Unit int unit) { - return millis2String(getDateStringAfterTimeSpan(string2Millis(time, pattern), timeSpanNum, unit), pattern); - } - /** - * 与给定时间间隔millis的日期 - * @param timeMillis 指定的原时间的时间戳 - * @param timeSpanNum 时间间隔数 - * @param unit 时间间隔单位 - * @return 计算后的新时间的时间戳 - */ - private static long getDateStringAfterTimeSpan(long timeMillis, long timeSpanNum, @TimeConstants.Unit int unit) { - int unitMultiple = 1; - switch (unit) { - case TimeConstants.DAY: - unitMultiple = 1000 * 60 * 60 * 24; - break; - case TimeConstants.HOUR: - unitMultiple = 1000 * 60 * 60; - break; - case TimeConstants.MIN: - unitMultiple = 1000 * 6; - break; - case TimeConstants.SEC: - unitMultiple = 1000; - break; - case TimeConstants.MSEC: - unitMultiple = 1; - break; - } - return timeMillis + timeSpanNum * unitMultiple; - } - - /** - * 与给定时间间隔millis的日期 - * @param time 指定时间 - * @param millis 时间间隔 - * @return 新日期 + * 以unit为单位的时间长度转毫秒时间戳 + * + * @param timeSpan 毫秒时间戳 + * @param unit 单位类型 + * + * @return 毫秒时间戳 */ - public static Date getDateAfterTimeSpan(String time, long millis) { - return millis2Date(string2Millis(time) + millis); + private static long timeSpan2Millis(long timeSpan, @TimeConstants.Unit int unit) { + return timeSpan * unit; } /** - * 与给定时间间隔millis的日期 - * @param time 指定时间 - * @param pattern 时间格式 - * @param millis 时间间隔 - * @return 新日期 + * 毫秒时间戳转以unit为单位的时间长度 + * + * @param millis 毫秒时间戳 + * @param unit 单位类型 + * + * @return 以unit为单位的时间长度 */ - public static Date getDateAfterTimeSpan(String time, String pattern, long millis) { - return millis2Date(string2Millis(time, pattern) + millis); + private static long millis2TimeSpan(long millis, @TimeConstants.Unit int unit) { + return millis / unit; } /** - *与给定时间指定间隔的日期 - * @param time 原时间 - * @param pattern 时间格式 - * @param timeSpanNum 时间间隔数 - * @param unit 时间间隔单位 - * @return 计算后的新日期 + * 毫秒时间戳转合适时间长度 + * + * @param millis 毫秒时间戳 + *

小于等于0,返回null

+ * @param precision 精度 + * + * @return 合适时间长度 */ - public static Date getDateAfterTimeSpan(String time, String pattern, long timeSpanNum, @TimeConstants.Unit int unit) { - return millis2Date(getDateStringAfterTimeSpan(string2Millis(time, pattern), timeSpanNum, unit)); + @SuppressLint("DefaultLocale") + private static String millis2FitTimeSpan(long millis, int precision) { + if (millis <= 0 || precision <= 0) return null; + StringBuilder sb = new StringBuilder(); + String[] units = {"天", "小时", "分钟", "秒", "毫秒"}; + int[] unitLen = {86400000, 3600000, 60000, 1000, 1}; + precision = Math.min(precision, 5); + for (int i = 0; i < precision; i++) { + if (millis >= unitLen[i]) { + long mode = millis / unitLen[i]; + millis -= mode * unitLen[i]; + sb.append(mode).append(units[i]); + } + } + return sb.toString(); } } \ No newline at end of file diff --git a/utilcode/src/test/java/com/blankj/utilcode/util/EncryptUtilsTest.java b/utilcode/src/test/java/com/blankj/utilcode/util/EncryptUtilsTest.java index d2ad68a09a..52f0d66fdb 100644 --- a/utilcode/src/test/java/com/blankj/utilcode/util/EncryptUtilsTest.java +++ b/utilcode/src/test/java/com/blankj/utilcode/util/EncryptUtilsTest.java @@ -206,7 +206,7 @@ public void testDecryptAES() throws Exception { (bytesDataAES); } - String path = TestUtils.BASEPATH + "encrypt" + TestUtils.SEP; + String path = TestUtils.BASEPATH + "encrypt" + TestUtils.FILE_SEP; String md5 = "7F138A09169B250E9DCB378140907378"; @Test diff --git a/utilcode/src/test/java/com/blankj/utilcode/util/FileUtilsTest.java b/utilcode/src/test/java/com/blankj/utilcode/util/FileUtilsTest.java index da25d9a22c..5dc487b955 100644 --- a/utilcode/src/test/java/com/blankj/utilcode/util/FileUtilsTest.java +++ b/utilcode/src/test/java/com/blankj/utilcode/util/FileUtilsTest.java @@ -8,7 +8,7 @@ import static com.blankj.utilcode.util.FileUtils.*; import static com.blankj.utilcode.util.TestUtils.BASEPATH; -import static com.blankj.utilcode.util.TestUtils.SEP; +import static com.blankj.utilcode.util.TestUtils.FILE_SEP; import static com.google.common.truth.Truth.assertThat; /** @@ -22,7 +22,7 @@ public class FileUtilsTest { - String path = BASEPATH + "file" + SEP; + String path = BASEPATH + "file" + FILE_SEP; @Test public void testGetFileByPath() throws Exception { @@ -72,7 +72,7 @@ public void testCreateFileByDeleteOldFile() throws Exception { assertThat(createFileByDeleteOldFile(path)).isFalse(); } - String path1 = BASEPATH + "file1" + SEP; + String path1 = BASEPATH + "file1" + FILE_SEP; @Test public void testCopyDir() throws Exception { @@ -84,7 +84,7 @@ public void testCopyDir() throws Exception { @Test public void testCopyFile() throws Exception { assertThat(copyFile(path + "GBK.txt", path + "GBK.txt")).isFalse(); - assertThat(copyFile(path + "GBK.txt", path + "new Dir" + SEP + "GBK.txt")).isTrue(); + assertThat(copyFile(path + "GBK.txt", path + "new Dir" + FILE_SEP + "GBK.txt")).isTrue(); assertThat(copyFile(path + "GBK.txt", path1 + "GBK.txt")).isTrue(); } diff --git a/utilcode/src/test/java/com/blankj/utilcode/util/TestUtils.java b/utilcode/src/test/java/com/blankj/utilcode/util/TestUtils.java index 2918d3d075..88e61a450e 100644 --- a/utilcode/src/test/java/com/blankj/utilcode/util/TestUtils.java +++ b/utilcode/src/test/java/com/blankj/utilcode/util/TestUtils.java @@ -21,28 +21,35 @@ @Config(manifest = Config.NONE) public class TestUtils { - static final char SEP = File.separatorChar; + static final char FILE_SEP = File.separatorChar; - static final String BASEPATH = System.getProperty("user.dir") + SEP + "src" + SEP + "test" + SEP + "res" + SEP; + private static final String LINE_SEP = System.getProperty("line.separator"); + + static final String BASEPATH = System.getProperty("user.dir") + FILE_SEP + "src" + FILE_SEP + "test" + FILE_SEP + "res" + FILE_SEP; public static void init() { Utils.init(RuntimeEnvironment.application); } +// * ### Activity相关→[ActivityUtils.java][activity.java]→[Demo][activity.demo] @Test public void readme2Eng() throws Exception { formatCN(); - File readmeCN = new File(new File(System.getProperty("user.dir")).getAbsolutePath() + SEP + "README-CN.md"); - File readmeEng = new File(new File(System.getProperty("user.dir")).getAbsolutePath() + SEP + "README.md"); + File readmeCN = new File(new File(System.getProperty("user.dir")).getAbsolutePath() + FILE_SEP + "README-CN.md"); + File readmeEng = new File(new File(System.getProperty("user.dir")).getAbsolutePath() + FILE_SEP + "README.md"); List list = FileUtils.readFile2List(readmeCN, "UTF-8"); - StringBuilder sb = new StringBuilder("# Android developers should collect the following utils\r\n\r\n" + - "## [README of Chinese][readme-cn.md]\r\n\r\n" + - "Directory is shown below:\r\n\r\n"); + StringBuilder sb = new StringBuilder("# Android developers should collect the following utils" + LINE_SEP + LINE_SEP + + "## [README of Chinese][readme-cn.md]" + LINE_SEP + LINE_SEP + + "## API" + LINE_SEP + LINE_SEP); List lines = list.subList(6, list.size()); for (String line : lines) { - if (line.contains("> -") && line.contains("Utils")) { - String utilsName = line.substring(line.indexOf("[") + 1, line.indexOf("Utils")); - sb.append("> - **About ").append(utilsName).append(line.substring(line.indexOf("→"))); + if (line.contains("* ###")) { + if (line.contains("Utils")) { + String utilsName = line.substring(line.indexOf("[") + 1, line.indexOf("Utils")); + sb.append("* ### About ").append(utilsName).append(line.substring(line.indexOf("→"))); + } else { + sb.append("* ### About Log→[update_log.md][update_log.md]**"); + } } else if (line.contains(": ") && !line.contains("[")) { sb.append(line.substring(0, line.indexOf(':')).trim()); } else if (line.contains("* 做")) { @@ -52,35 +59,35 @@ public void readme2Eng() throws Exception { } else { sb.append(line); } - sb.append("\r\n"); + sb.append(LINE_SEP); } FileUtils.writeFileFromString(readmeEng, sb.toString(), false); } @Test public void formatCN() throws Exception { - File readmeCN = new File(new File(System.getProperty("user.dir")).getAbsolutePath() + SEP + "README-CN.md"); + File readmeCN = new File(new File(System.getProperty("user.dir")).getAbsolutePath() + FILE_SEP + "README-CN.md"); List list = FileUtils.readFile2List(readmeCN, "UTF-8"); StringBuilder sb = new StringBuilder(); for (int i = 0; i < 4; i++) { - sb.append(list.get(i)).append("\r\n"); + sb.append(list.get(i)).append(LINE_SEP); } String space = " "; for (int i = 4, len = list.size(); i < len; ++i) { String line = list.get(i); - if (line.contains("> -") && line.contains("Utils")) { - sb.append(line).append("\r\n"); + if (line.contains("* ###") && line.contains("Utils")) { + sb.append(line).append(LINE_SEP); int maxLen = 0; line = list.get(++i); // 获取需填充最大空格数 for (int j = i; !line.equals(""); line = list.get(++j)) { - if (line.equals(" ```")) continue; + if (line.equals("```")) continue; maxLen = Math.max(maxLen, line.replace(" ", "").replace(",", ", ").indexOf(':')); } line = list.get(i); for (; !line.equals(""); line = list.get(++i)) { - if (line.equals(" ```")) { - sb.append(" ```").append("\r\n"); + if (line.equals("```")) { + sb.append("```").append(LINE_SEP); continue; } String noSpaceLine = line.replace(" ", ""); @@ -89,13 +96,13 @@ public void formatCN() throws Exception { for (int j = 0; j < l; j++) { spaces += space; } - String temp = noSpaceLine.substring(0, noSpaceLine.indexOf(':')) + spaces + ": " + noSpaceLine.substring(noSpaceLine.indexOf(':') + 1) + "\r\n"; + String temp = noSpaceLine.substring(0, noSpaceLine.indexOf(':')) + spaces + ": " + noSpaceLine.substring(noSpaceLine.indexOf(':') + 1) + LINE_SEP; sb.append(temp.replace(",", ", ")); } } else { sb.append(line); } - sb.append("\r\n"); + sb.append(LINE_SEP); } FileUtils.writeFileFromString(readmeCN, sb.toString(), false); } diff --git a/utilcode/src/test/java/com/blankj/utilcode/util/TimeUtilsTest.java b/utilcode/src/test/java/com/blankj/utilcode/util/TimeUtilsTest.java index 4fa0b5c89f..43ec817cc7 100644 --- a/utilcode/src/test/java/com/blankj/utilcode/util/TimeUtilsTest.java +++ b/utilcode/src/test/java/com/blankj/utilcode/util/TimeUtilsTest.java @@ -73,14 +73,14 @@ public void testGetTimeSpan() throws Exception { @Test public void testGetCurTimeMills() throws Exception { - long interval = getNowTimeMills() - System.currentTimeMillis(); + long interval = getNowMills() - System.currentTimeMillis(); assertThat(interval).isLessThan(10L); } @Test public void testGetCurTimeString() throws Exception { - System.out.println(getNowTimeString()); - System.out.println(getNowTimeString(myPattern)); + System.out.println(getNowString()); + System.out.println(getNowString(myPattern)); } @Test diff --git a/utilcode/src/test/java/com/blankj/utilcode/util/ZipUtilsTest.java b/utilcode/src/test/java/com/blankj/utilcode/util/ZipUtilsTest.java index e1668e49c7..8b43ffccac 100644 --- a/utilcode/src/test/java/com/blankj/utilcode/util/ZipUtilsTest.java +++ b/utilcode/src/test/java/com/blankj/utilcode/util/ZipUtilsTest.java @@ -7,7 +7,7 @@ import java.util.List; import static com.blankj.utilcode.util.TestUtils.BASEPATH; -import static com.blankj.utilcode.util.TestUtils.SEP; +import static com.blankj.utilcode.util.TestUtils.FILE_SEP; import static com.blankj.utilcode.util.ZipUtils.*; import static com.google.common.truth.Truth.*; @@ -21,10 +21,10 @@ */ public class ZipUtilsTest { - String testZip = BASEPATH + "zip" + SEP + "testZip" + SEP; - String testZipFiles = BASEPATH + "zip" + SEP + "testZips.zip"; - String testZipFile = BASEPATH + "zip" + SEP + "testZip.zip"; - String unzipFile = BASEPATH + "zip" + SEP + "testUnzip"; + String testZip = BASEPATH + "zip" + FILE_SEP + "testZip" + FILE_SEP; + String testZipFiles = BASEPATH + "zip" + FILE_SEP + "testZips.zip"; + String testZipFile = BASEPATH + "zip" + FILE_SEP + "testZip.zip"; + String unzipFile = BASEPATH + "zip" + FILE_SEP + "testUnzip"; @Test public void testZipFiles() throws Exception {