# BaseToolsLibrary
**Repository Path**: VeiZhang/BaseToolsLibrary
## Basic Information
- **Project Name**: BaseToolsLibrary
- **Description**: Android通用适配器和常用的工具类
- **Primary Language**: Android
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: https://github.com/VeiZhang/BaseToolsLibrary
- **GVP Project**: No
## Statistics
- **Stars**: 10
- **Forks**: 0
- **Created**: 2017-02-28
- **Last Updated**: 2025-07-21
## Categories & Tags
**Categories**: android-modules
**Tags**: None
## README
# Android通用适配器和常用的工具类
* Android通用的Adapter for ListView,GridView,RecyclerView等,支持多种ItemType布局
* Android常用的工具类集合
```
allprojects {
repositories {
/** Github packages **/
maven {
url = "https://maven.pkg.github.com/VeiZhang/GitHubPackages-Android"
credentials {
// 输入自己的账号和个人令牌(需要 read packages权限)
// 可放项目根目录的gradle.properties 或者 local.properties中
username = getPropertyValue("GITHUB_USER") ?: project.properties['GITHUB_USER']
password = getPropertyValue("GITHUB_READ_TOKEN") ?: project.properties['GITHUB_READ_TOKEN']
}
}
}
}
```
~~[![Download][icon_download]][download]~~
## 目录
* [使用](#使用)
* [CommonAdapter](#CommonAdapter)
* [通用适配器](#通用适配器)
* [多布局通用适配器](#多布局通用适配器)
* [CommonBindingAdapter](#CommonBindingAdapter)
* [DataBinding通用适配器](#DataBinding通用适配器)
* [DataBinding多布局通用适配器](#DataBinding多布局通用适配器)
* [BaseRecyclerAdapter](#BaseRecyclerAdapter)
* [RecyclerView通用适配器](#RecyclerView通用适配器)
* [RecyclerView多布局通用适配器](#RecyclerView多布局通用适配器)
* [BaseRecyclerBindingAdapter](#BaseRecyclerBindingAdapter)
* [DataBinding RecyclerView通用适配器](#DataBindingRecyclerView通用适配器)
* [DataBinding RecyclerView多布局通用适配器](#DataBindingRecyclerView多布局通用适配器)
* [BasePagerAdapter](#BasePagerAdapter)
* [ViewPager通用适配器](#ViewPager通用适配器)
* [Utils](#Utils)
* [权限](#权限)
* [常用工具类](#常用工具类)
* [Assist](#Assist)
* [版本更新](#版本更新)
* [感谢](#感谢)
## 导入Android Studio
添加jCenter远程依赖到module里的build.gradle:
```
dependencies {
compile 'com.excellence:basetools:_latestVersion'
}
```
或者直接添加本地Library依赖
```
compile project(':basetoolslibrary')
```
**注意**
在使用DataBinding通用适配器时,记得开启配置
```
android {
dataBinding {
enabled true
}
}
```
**大家来找茬**
![icon_adapter][icon_adapter]
![icon_common_adapter][icon_common_adapter]
![icon_multi_adapter][icon_multi_adapter]
## CommonAdapter
### ListView,GridView的通用适配器
示例:[CommonAdapterActivity][CommonAdapterActivity]
```java
// 创建adapter类继承CommonAdapter
private class AppGridAdapter extends CommonAdapter
{
public AppGridAdapter(List data, int layoutId)
{
super(data, layoutId);
}
@Override
public void convert(ViewHolder viewHolder, ResolveInfo item, int position)
{
ImageView iconView = viewHolder.getView(android.R.id.icon);
iconView.setImageDrawable(item.loadIcon(mPackageManager));
viewHolder.setText(android.R.id.text1, item.loadLabel(mPackageManager).toString());
}
}
```
```java
// ViewHolder辅助方法
public T getView(int viewId); // 用于获取Item内的子控件,参数为控件的id
public ViewHolder setText(int viewId, int strId); // 用于设置文本,参数控件id、字符串id
public ViewHolder setBackgroundResource(int viewId, int resId); // 用于设置背景图片,参数控件id、图片id
public ViewHolder setImageResource(int viewId, int resId); // 用于设置ImageView图片资源,参数控件id、图片id
public ViewHolder setOnClickListener(int viewId, View.OnClickListener listener); // 用于点击事件监听
*
*
*
// 可拓展其他方法
```
```java
// 刷新适配器
adapter.notifyNewData(data);
```
### ListView,GridView的多布局通用适配器
示例:[MultiItemAdapterActivity][MultiItemAdapterActivity]
```java
// 多布局适配器
private class ChatAdapter extends MultiItemTypeAdapter
{
public ChatAdapter(List messages)
{
super(messages);
addItemViewDelegate(new ComputerDelegate());
addItemViewDelegate(new BlueDelegate());
addItemViewDelegate(new PurpleDelegate());
}
}
// 不同的布局视图
private class ComputerDelegate implements ItemViewDelegate
{
@Override
public int getItemViewLayoutId()
{
return R.layout.item_computer;
}
@Override
public boolean isForViewType(People item, int position)
{
return item instanceof ComputerData;
}
@Override
public void convert(ViewHolder viewHolder, People item, int position)
{
viewHolder.setText(R.id.computer_text, item.getMsg());
}
}
```
## CommonBindingAdapter
### 开启DataBinding,ListView、GridView通用适配器
示例:[CommonBindingAdapterActivity][CommonBindingAdapterActivity]
```java
// 直接创建CommonBindingAdapter
CommonBindingAdapter adapter = new CommonBindingAdapter<>(mFlowers, R.layout.item_flower, BR.flower);
// 设置适配器,等同于ListView.setAdapter()、GridView.setAdapter()
mBinding.setAdapter(adapter);
```
### 开启DataBinding,ListView,GridView的多布局通用适配器
示例:[MultiItemTypeBindingAdapterActivity][MultiItemTypeBindingAdapterActivity]
```java
// 使用方式同上,主要实现ViewDelegate布局视图接口
MultiItemTypeBindingAdapter adapter = new MultiItemTypeBindingAdapter<>(mFlowers);
adapter.addItemViewDelegate(new RoseViewDelegate());
adapter.addItemViewDelegate(new TulipViewDelegate());
mBinding.setAdapter(adapter);
```
## BaseRecyclerAdapter
### RecyclerView的通用适配器
示例:[RecyclerAdapterActivity][RecyclerAdapterActivity]
```java
// 创建adapter类继承BaseRecyclerAdapter
private class AppRecyclerAdapter extends BaseRecyclerAdapter
{
private PackageManager mPackageManager = null;
public AppRecyclerAdapter(List data, int layoutId)
{
super(data, layoutId);
mPackageManager = getPackageManager();
}
@Override
public void convert(RecyclerViewHolder viewHolder, ResolveInfo item, int position)
{
viewHolder.setText(android.R.id.text1, item.loadLabel(mPackageManager));
viewHolder.setImageDrawable(android.R.id.icon, item.loadIcon(mPackageManager));
}
}
```
```java
// RecyclerViewHolder辅助方法类同ViewHolder辅助方法
*
*
*
```
### RecyclerView的多布局通用适配器
示例:[MultiItemRecyclerAdapterActivity][MultiItemRecyclerAdapterActivity]
```java
// 多布局适配器
private class WarAdapter extends MultiItemTypeRecyclerAdapter
{
public WarAdapter(List data)
{
super(data);
addItemViewDelegate(new ComputerRecyclerDelegate());
addItemViewDelegate(new BlueRecyclerDelegate());
addItemViewDelegate(new PurpleRecyclerDelegate());
}
}
// 不同的布局视图
private class ComputerRecyclerDelegate implements ItemViewDelegate
{
@Override
public int getItemViewLayoutId()
{
return R.layout.item_computer;
}
@Override
public boolean isForViewType(People item, int position)
{
return item instanceof ComputerData;
}
@Override
public void convert(RecyclerViewHolder viewHolder, People item, int position)
{
viewHolder.setText(R.id.computer_text, item.getMsg());
}
}
```
## BaseRecyclerBindingAdapter
### 开启DataBinding,RecyclerView的通用适配器
示例:[BaseRecyclerBindingAdapterActivity][BaseRecyclerBindingAdapterActivity]
```java
// 直接创建BaseRecyclerBindingAdapter
BaseRecyclerBindingAdapter adapter = new BaseRecyclerBindingAdapter<>(mFlowers, R.layout.item_flower, BR.flower);
// 设置适配器,等同于RecyclerView.setAdapter()
mBinding.setAdapter(adapter);
// 注意设置LayoutManager,等同于RecyclerView.setLayoutManager()
mBinding.setLayoutManager(new LinearLayoutManager(this));
```
### 开启DataBinding,RecyclerView的多布局通用适配器
示例:[MultiItemTypeBindingRecyclerAdapterActivity][MultiItemTypeBindingRecyclerAdapterActivity]
```java
// 使用方式同上,主要实现ViewDelegate布局视图接口
MultiItemTypeBindingRecyclerAdapter adapter = new MultiItemTypeBindingRecyclerAdapter<>(mFlowers);
adapter.addItemViewDelegate(new RoseViewDelegate());
adapter.addItemViewDelegate(new TulipViewDelegate());
mBinding.setAdapter(adapter);
mBinding.setLayoutManager(new LinearLayoutManager(this));
```
## BasePagerAdapter
### ViewPager通用适配器
示例:[ViewPagerAdapterActivity][ViewPagerAdapterActivity]
```java
private class NumAdapter extends BasePagerAdapter
{
public NumAdapter(int pageCount)
{
super(pageCount);
}
@Override
protected View loadView(Context context, int pageIndex)
{
// 加载每页
TextView textView = new TextView(context);
textView.setText(String.valueOf(pageIndex * mNumScale));
textView.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
mNumScale *= 10;
mPageCount += 1;
// 刷新每页
mAdapter.notifyNewData(mPageCount);
}
});
return textView;
}
}
```
## Utils
### 权限
```
```
### 常用工具类
> - **Activity相关→[ActivityUtils.kt][ActivityUtils]**
```
startAnotherActivity : Activity跳转
setActivityWindowAlpha : 设置Activity窗口透明值
isActivityTopStack : 判断Activity是否在栈顶
getLauncherActivity : 获取某应用入口Activity
```
> - **算法相关→[AlgorithmUtils.java][AlgorithmUtils]**
```
getMD5 : 生成MD5
checkMD5 : 检测MD5
```
> - **AlphaUtils相关→[AlphaUtils.kt][AlphaUtils]**
```
setAlpha : 设置Window透明度
setAlpha : 设置Activity的Window透明度
setAlpha : 设置Dialog的Window透明度
setAlpha : 设置DialogFragment的Window透明度
```
> - **补间动画相关→[AnimationUtils.kt][AnimationUtils]**
```
scaleView : 放大缩小动画
translateView : 平移动画
alphaView : 透明度动画
```
> - **属性动画相关→[AnimatorUtils.kt][AnimatorUtils]**
```
marginLeftTranslateIn : 相邻View联动
marginLeftTranslateOut : 相邻View联动
marginUpTranslateIn : 相邻View联动
marginUpTranslateOut : 相邻View联动
marginTranslateIn : 相邻View联动
marginTranslateOut : 相邻View联动
marginByLayout : 在原基础上,移动View的外边距
marginToLayout : 设置View的外边距
heightToLayout : 变化View的高度动画
scaleView : 放大缩小动画
translateView : 平移动画
alphaView : 透明度动画
```
> - **应用相关→[AppUtils.kt][AppUtils]**
```
getInstalledApps : 获取安装的全部应用
getSystemInstalledApps : 获取安装的系统应用
getUserInstalledApps : 获取安装的第三方应用
getRunningApps : 获取正在运行的应用
getPermissionList : 获取某应用的所有权限
checkPermission : 检测某应用是否有某权限
getAppVersionName : 获取当前应用版本名
getAppVersionCode : 获取当前应用版本号
getAppSize : 获取当前应用大小
getAppTime : 获取当前应用安装时间
getAppPath : 获取当前应用路径
getAPKFileSignature : 获取apk文件的签名
getPackageSignature : 获取某安装应用的签名
isAppExist : 判断应用是否存在
isAppDebug : 判断当前应用是否是Debug版本
getMaxMemory : 当前应用分配的最大内存
getTotalMemory : 当前应用分配的总内存
getFreeMemory : 当前应用分配的剩余内存
```
> - **音频相关→[AudioUtils.kt][AudioUtils]**
```
getMaxVolume : 获取最大音量
getMinVolume : 获取最小音量
getVolume : 获取音量
setVolume : 设置音量
adjustVolume : 调整音量
```
> - **广播相关→[BroadcastUtils.kt][BroadcastUtils]**
```
registerMountAction : USB广播
registerScreenAction : 屏幕熄亮广播
registerPackageAction : 安装卸载广播
registerNetworkStateAction : 网络状态广播
registerBootAction : 开机广播
```
> - **关闭相关→[CloseUtils.kt][CloseUtils]**
```
closeIO : 关闭IO
closeIOQuietly : 安静关闭IO
```
> - **关闭相关→[CollectionUtils.kt][CollectionUtils]**
```
removeEmptyElement : 清除集合里的空元素
listEquals : 比较两个列表元素对象是否一致
listContentEquals : 比较两个列表元素内容是否一致
```
> - **转换相关→[ConvertUtils.kt][ConvertUtils]**
```
bytes2Short : byte转short
shortToByte : short转byte
byte2BinStr : byte转二进制
byte2BinStr : byte数组转二进制
str2BinStr : 字符串转二进制字符串
bytes2HexString : byte数组转16进制字符串
hexString2Bytes : 16进制字符串转byte数组
string2HexString : 字符串转16进制字符串
hexString2String : 16进制字符串转字符串
string2Bytes : 字符串转byte数组
bytes2String : byte数组转字符串
byte2Int : byte数组转有符号int
int2Byte : int转4位byte数组
unintbyte2long : 四字节byte数组转无符号long
inputStream2OutputStream : inputStream转outPutStream
inputStream2Bytes : inputStream转bytes
inputStream2String : inputStream转字符串
inputStream2StringBuilder : inputStream转StringBuilder
```
> - **配置存储相关→[DBUtils.kt][DBUtils]**
```
init : 初始化,设置存储文件名
contains : 判断键值是否存在
setSetting : 存储配置
getString : 读取字符串配置
getBoolean : 读取Boolean配置
getInt : 读取int配置
getLong : 读取long配置
getFloat : 读取float配置
getStringSet : 读取Set配置
remove : 删除配置
clear : 清空配置
```
> - **分辨率相关→[DensityUtils.kt][DensityUtils]**
```
getDensity : 获取当前屏幕分辨率
getScaleDensity : 获取当前文字分辨率
getScreenWidth : 获取屏幕宽度
getScreenHeight : 获取屏幕高度
getScreenSize : 获取屏幕宽、高
dp2px : dp转px
px2dp : px转dp
sp2px : sp转px
px2sp : px转sp
```
> - **设备相关→[DeviceUtils.kt][DeviceUtils]**
```
getIMEI : 获取IMEI
getIMSI : 获取IMSI
getPhone : 获取手机号
getSIM : 获取SIM卡序列号
getSimCountry : 获取SIM卡国家
getSimOperator : 获取SIM卡运营商
getSimOperatorName : 获取SIM卡运营商名字
getSimState : 获取SIM卡状态
```
> - **判断空相关→[EmptyUtils.kt][EmptyUtils]**
```
isEmpty : 判断对象是否为空
isNotEmpty : 判断对象是否非空
```
> - **加密解密相关→[EncryptUtils.java][EncryptUtils]**
```
hashTemplate : 散列加密算法
encryptMD5 : MD5加密
encryptMD5HexString : MD5加密转16进制字符串
symmetricTemplate : 对称加密算法
encryptDES : DES加密
encryptDES2HexString : DES加密转16进制字符串
decryptDES : DES解密
decryptHexStringDES : 16进制字符串DES解密
encrypt3DES : 3DES加密
encrypt3DES2HexString : 3DES加密转16进制字符串
decrypt3DES : 3DES解密
decryptHexString3DES : 16进制字符串3DES解密
encryptAES : AES加密
encryptAES2HexString : AES加密转16进制字符串
decryptAES : AES解密
decryptHexStringAES : 16进制字符串AES解密
rsaTemplate : 非对称加密算法
encryptRSA : RSA加密
encryptRSA2HexString : RSA加密转16进制
decryptRSA : RSA解密
decryptHexStringRSA : 16进制字符串RSA解密
```
> - **异常相关→[ExceptionUtils.kt][ExceptionUtils]**
```
printException : 打印异常信息字符串
```
> - **文件流相关→[FileIOUtils.kt][FileIOUtils]**
```
writeFile : 将字符串、字节数组、输入流写入文件
readFile2Bytes : 读取文件、输入流为字节数组
readFile2String : 读取文件、输入流为字符串
copyFile : 拷贝文件
```
> - **文件相关→[FileUtils.kt][FileUtils]**
```
createNewFile : 创建文件
deleteFile : 删除文件
mkDir : 创建目录
deleteDir : 删除目录
deletePostfixFiles : 删除目录下的某后缀文件
formatFileSize : 格式化文件大小
getAvailableSize : 获取文件已用大小
getTotalSize : 获取文件总大小
getFilesSize : 遍历目录、获取文件大小
getFileSize : 获取文件大小
getDirSize : 遍历目录大小
getDirFreeSpace : 获取目录剩余空间
getDirTotalSpace : 获取目录总空间
getDirUsableSpace : 获取目录可用空间
chmod : 修改目录、文件权限
isFileExists : 判断文件或目录是否存在
getFileLastModified : 读取文件最后的修改时间
getFileMd5 : 读取文件MD5值
```
> - **Handler相关→[HandlerUtils.java][HandlerUtils]**
```
HandlerHolder : 使用必读
```
> - **HTTP相关→[HttpUtils.kt][HttpUtils]**
```
checkURL : 检测有效的URL
checkHttpURL : 检测Http、Https,没有则增加前缀http://
appendURLPath : 拼接url
isUrlExists : 通过访问的方式检查链接是否有效
convertHttpUrl : 转换链接中中文字符
convertInputStream : 通过类型转换流
setConnectParam : 设置请求头信息
printHeader : 打印全部请求头信息
getHeader : 获取具体的请求头信息
```
> - **Image相关→[ImageUtils.kt][ImageUtils]**
```
resource2Drawable : 资源转Drawable
resource2Bitmap : 资源转Bitmap
drawable2Bitmap : drawable转bitmap
bitmap2Drawable : bitmap转drawable
view2Bitmap : view转Bitmap
shotActivity : Activity截图
createBitmap : 创建空白Bitmap
addBitmapShadows : 增加遮罩
zoomImg : 图片等比缩小
setRendScriptCacheDir : 高斯模糊配置,Android7.0上却会导致应用 crash
```
> - **常见的Intent相关→[IntentUtils.kt][IntentUtils]**
```
isIntentAvailable : 判断Intent是否存在
startIntent : Intent跳转
getSettingIntent : 跳转Settings
getWiFiIntent : 隐式开启WiFi
getDirectWiFiIntent : 直接开启WiFi
getRoamingIntent : 跳转到移动网络设置
getPermissionIntent : 开启权限设置
getLocationIntent : 开启定位设置
getBluetoothIntent : 开启蓝牙设置
getLocaleIntent : 开启语言设置
getAppIntent : 跳转应用程序列表界面
getAllAppIntent : 跳转到应用程序界面(所有的)
getInstalledAppIntent : 跳转到应用程序界面(已安装的)
getStorageIntent : 开启存储设置
getAccessibilityIntent : 开启辅助设置
getSearchIntent : 跳转到搜索设置
getInputMethodIntent : 跳转输入法设置
getInstallIntent : 安装应用
getUninstallIntent : 卸载应用
getShareTextIntent : 分享文本
getShareImageIntent : 分享图片
getDialIntent : 跳转拨号界面
getCallIntent : 拨打电话
getSmsIntent : 跳转短信界面
getSendSmsIntent : 发送短信
getEmailIntent : 发送邮件
getCaptureIntent : 打开相机
getVideoIntent : 播放本地视频
getNetVideoIntent : 播放网络视频
getAudioIntent : 播放本地音乐
```
> - **键盘相关→[KeyboardUtils.kt][KeyboardUtils]**
```
hideSoftInput : 隐藏软键盘
showSoftInput : 打开软键盘
toggleSoftInput : 如果输入法在窗口上已经显示,则隐藏,反之则显示
clickBlankArea2HideSoftInput : 击屏幕空白区域隐藏软键盘
```
> - **按键速度相关→[KeyController.kt][KeyController]**
```
dispatchKeyEvent : 控制按键速度
```
> - **按键相关→[KeyEventUtils.kt][KeyEventUtils]**
```
listKeyUp : 向上循环
listKeyDown : 向下循环
listKeyLeft : 向左循环
listKeyRight : 向右循环
listPageUp : 上翻页循环
listPageDown : 下翻页循环
```
> - **LiveData相关→[LiveDataUtils.kt][LiveDataUtils]**
```
TIMESTAMP_LIVE_DATA : 秒级时间戳
MILL_TIMESTAMP_LIVE_DATA : 毫秒级时间戳
timer : 定时器
```
> - **数学函数相关→[MathUtils.kt][MathUtils]**
```
gcd : 求最大公约数
fraction : 约分
```
> - **多媒体相关→[MediaUtils.kt][MediaUtils]**
```
getKey : 读取多媒体信息的键
getAlbum : 读取多媒体信息的专辑
getArtist : 读取多媒体信息的艺术家
getAuthor : 读取多媒体信息的作者
getComposer : 读取多媒体信息的作曲家
getDate : 读取多媒体信息的日期
getGenre : 读取多媒体信息的分类
getTitle : 读取多媒体信息的名称
getYear : 读取多媒体信息的年份
getDuration : 读取多媒体信息的时长
getMimeType : 读取多媒体信息的类型
getHasAudio : 读取多媒体信息是否有音频
getHasVideo : 读取多媒体信息是否有视频
getWidth : 读取多媒体信息的宽度
getHeight : 读取多媒体信息的高度
getBitrate : 读取多媒体信息的码率
```
> - **网络相关→[NetworkUtils.kt][NetworkUtils]**
```
getActiveNetworkInfo : 获取活动的网络信息
isConnected : 检查网络是否连接
isAvailableByPing : 判断网络是否可用
isMobileDataEnabled : 判断移动数据是否打开
setMobileDataEnabled : 打开或关闭移动数据(舍弃不可用)
is4G : 判断是否是4G网络
isWiFiEnabled : 判断是否打开WiFi
setWiFiEnabled : 打开或关闭WiFi
isEthConnected : 判断以太网是否连接
isEthAvailable : 判断以太网是否可用
isWiFiConnected : 判断WiFi是否连接
isWiFiAvailable : 判断WiFi是否可用
isWiFiAvailableByPing : 通过ping的方式判断WiFi是否可用
getNetworkOperatorName : 获取网络运营商名称
getNetworkType : 获取当前网络类型
getIPAddress : 获取网络IP地址
getDomainAddress : 根据域名获取ip
readMac : 读取Mac地址:优先获取Eth的MAC,当Eth为空,接着获取WiFi的MAC
getMac : 获取Mac地址:使用Eth时读取Eth的MAC,否则读取WiFi的MAC
getWiredMac : 获取有线Mac地址
getWirelessMac : 获取无线Mac地址
formatTcpSpeed : 格式化比特率
formatNetSpeed : 格式化网速
```
> - **解析字段值相关→[ParseUtils.kt][ParseUtils]**
```
number : 数值/评分解析
timestamp : 文本时间解析
year : 文本时间解析出年份
```
> - **路径相关→[PathUtils.kt][PathUtils]**
```
getRootPath : 获取根路径
getDataPath : 获取数据路径
getDownloadCachePath : 获取下载缓存路径
getInternalAppDataPath : 获取内存应用数据路径
getInternalAppCodeCacheDir : 获取内存应用代码缓存路径
getInternalAppCachePath : 获取内存应用缓存路径
getInternalAppDbsPath : 获取内存应用数据库路径
getInternalAppDbPath : 获取内存应用数据库路径
getInternalAppFilesPath : 获取内存应用文件路径
getInternalAppSpPath : 获取内存应用 SP 路径
getInternalAppNoBackupFilesPath : 获取内存应用未备份文件路径
getExternalStoragePath : 获取外存路径
getExternalMusicPath : 获取外存音乐路径
getExternalPodcastsPath : 获取外存播客路径
getExternalRingtonesPath : 获取外存铃声路径
getExternalAlarmsPath : 获取外存闹铃路径
getExternalNotificationsPath : 获取外存通知路径
getExternalPicturesPath : 获取外存图片路径
getExternalMoviesPath : 获取外存影片路径
getExternalDownloadsPath : 获取外存下载路径
getExternalDcimPath : 获取外存数码相机图片路径
getExternalDocumentsPath : 获取外存文档路径
getExternalAppDataPath : 获取外存应用数据路径
getExternalAppCachePath : 获取外存应用缓存路径
getExternalAppFilesPath : 获取外存应用文件路径
getExternalAppMusicPath : 获取外存应用音乐路径
getExternalAppPodcastsPath : 获取外存应用播客路径
getExternalAppRingtonesPath : 获取外存应用铃声路径
getExternalAppAlarmsPath : 获取外存应用闹铃路径
getExternalAppNotificationsPath : 获取外存应用通知路径
getExternalAppPicturesPath : 获取外存应用图片路径
getExternalAppMoviesPath : 获取外存应用影片路径
getExternalAppDownloadPath : 获取外存应用下载路径
getExternalAppDcimPath : 获取外存应用数码相机图片路径
getExternalAppDocumentsPath : 获取外存应用文档路径
getExternalAppObbPath : 获取外存应用 OBB 路径
```
> - **拼音相关→[PinyinUtils.java][PinyinUtils]**
```
ccs2Pinyin : 中文转拼音
getPinyinHeadChar : 获取中文首字母
getPinyinHeadChars : 获取所有中文首字母
isAllHanzi : 判断是否全是汉字
```
> - **反射相关→[ReflectUtils.kt][ReflectUtils]**
```
getDeclaredFields : 获取类中所有成员,能访问类中所有的字段,与public、private、protect无关,不能访问从其它类继承来的方法
getFields : 获取类中所有的公有成员,只能访问类中声明为公有的字段,私有的字段它无法访问,能访问从其它类继承来的公有方法
setFieldValue : 设置类中指定成员变量的值,一般是设置私有成员变量值
getFieldValue : 获取类中指定成员变量的值,一般是获取私有成员变量值
getDeclaredMethods : 获取类中所有方法,能访问类中所有的方法,与public、private、protect无关,不能访问从其它类继承来的方法
getMetods : 获取类中所有的公有方法,只能访问类中声明为公有的方法,私有的方法它无法访问,能访问从其它类继承来的公有方法
invokeDeclaredMethod : 调用类中指定的方法,能访问类中所有的方法,与public、private、protect无关,不能访问从其它类继承来的方法
invokeMethod : 调用类中指定的公有方法,只能访问类中声明为公有的方法,私有的方法它无法访问,能访问从其它类继承来的公有方法
newInstance : 创建带参数的构造函数,返回类对象
isInstance : 判断是否为某个类的实例
getAnnotation : 获取存在的、指定类型的注解
getAnnotations : 获取类中存在的所有注解
getDeclaredAnnotation : 获取存在的、指定类型的注解,不包括继承的注解
getDeclaredAnnotations : 获取类中存在的所有注解,不包括继承的注解
```
> - **正则表达式相关→[RegexUtils.kt][RegexUtils]**
```
isMAC : 验证MAC地址
isMobileSimple : 验证手机号(简单)
isMobileExact : 验证手机号(精确)
isTel : 验证电话号码
isIDCard15 : 验证身份证号码15位
isIDCard18 : 验证身份证号码18位
isEmail : 验证邮箱
isURL : 验证URL
isZh : 验证汉字
isUsername : 验证用户名
isDate : 验证yyyy-MM-dd格式的日期校验,已考虑平闰年
isIP : 验证IP地址
isMatch : 判断是否匹配正则
getMatch : 获取第一个正则匹配的部分
getMatches : 获取正则匹配的部分
getSplits : 获取正则匹配分组
getReplaceFirst : 替换正则匹配的第一部分
getReplaceAll : 替换所有正则匹配的部分
```
> - **资源相关→[ResourceUtils.kt][ResourceUtils]**
```
getName : 解析资源的全名
getEntryName : 解析资源名
getTypeName : 解析资源类型名
getPackageName : 解析资源的包名
getIdentifier : 获取资源Id
getIdentifiers : 遍历读取资源Id
copyFileFromAssets : 拷贝assets文件到指定目录
copyFileFromRaw : 拷贝raw资源到指定目录文件
readAsset : 读取asset文件转字符串
getLocal : 获取当前系统语言
getLanguage : 获取当前系统语言
getCountry : 获取当前系统语言国家
getIdentifier : 跨APP,读取其他应用的资源
```
> - **RxJava相关→[RxJavaUtils.kt][RxJavaUtils]**
```
dispose : 销毁订阅
```
> - **命令相关→[ShellUtils.kt][ShellUtils]**
```
execProcessBuilderCommand : 执行命令
execRuntimeCommand : 执行命令
```
> - **按键快捷键相关→[ShortcutTrigger.kt][ShortcutTrigger]**
```
inputKey : 连续的按键生成快捷键,如四位数字键快捷键 0000
```
> - **SD、TF等存储相关→[StorageUtils.kt][StorageUtils]**
```
getStorageList : 获取所有的内置、外置存储设备
getStorageVolumeList : 获取存储卷的相关信息
```
> - **字符串相关→[StringUtils.kt][StringUtils]**
```
isEmpty : 判断字符串是否为空
checkNULL : 判断字符串是否为空,是否是"NULL"字符串
equals : 比较字符串是否相等
equalsIgnoreCase : 比较字符串是否相等,忽略大小写
contains : 判断字符一是否包含字符串二
containsIgnoreCase : 判断字符一是否包含字符串二,忽略大小写
```
> - **SurfaceView相关→[SurfaceViewUtils.kt][SurfaceViewUtils]**
```
clearSurfaceView : 清除SurfaceView的最后一帧画面
```
> - **系统属性相关→[SystemPropertyUtils.java][SystemPropertyUtils]**
```
get : 获取String类型系统属性
getBoolean : 获取Boolean类型系统属性
getInt : 获取int类型系统属性
getLong : 获取long类型系统属性
set : 设置系统属性
getLinuxKernelVersion : 读取kernel版本
```
> - **时间相关→[TimeUtils.java][TimeUtils]**
```
millisec2String : 毫秒时间戳转时间字符串
sec2String : 秒时间戳转时间字符串
string2Date : 时间字符串转Date类型
string2Millisec : 时间字符串转毫秒时间戳
date2String : Date转时间字符串
getTimeSpan : 获取两个时间差
getNowTimeMillis : 获取当前毫秒时间戳
getNowTimeDate : 获取当前Date时间
getNowTimeString : 获取当前时间字符串
getTimeSpanByNow : 获取某时间与当前时间的差
isSameDay : 判断时间是否是同一天
isToday : 判断时间是否是今天
getTodayZero : 获取当天零点
isLeapYear : 判断是否是闰年
getWeek : 获取星期几
getWeekOfMonth : 获取月份中第几周
getWeekOfYear : 获取年份中的第几周
getChineseZodiac : 获取生肖
getZodiac : 获取星座
is24HoursFormat : 判断当前时间制是否是24h
seconds2String : 秒转 分:秒 字符串
milliSeconds2String : 毫秒转 分:秒 字符串
seconds2HourString : 秒转 时:分:秒 字符串
milliSeconds2HourString : 毫秒转 时:分:秒 字符串
createSimpleDateFormat : 创建时间格式化
```
> - **View相关→[ViewUtils.kt][ViewUtils]**
```
observeViewLayout : 监听绘制完成
observeViewLayoutForever : 监听绘制完成
```
> - **WebView相关→[WebViewUtils.java][WebViewUtils]**
```
callOnWebviewThread : 发送js指令
callJavaScript : 发送js指令
hookWebView : 系统应用绕过UID 是 root 检测
```
## Assist
> - **WeakHandler转载→[WeakHandler.java][WeakHandler]**
```
WeakHandler : 使用描述,性能优化,避免内存泄漏
```
> - **HanziToPinyin转载→[HanziToPinyin.java][HanziToPinyin]**
```
HanziToPinyin : Android汉字转拼音类
```
## 版本更新
| 版本 | 描述 |
|------------------------- | -------------------------------------------------------------- |
| [1.3.1][BaseToolsV1.3.1] | 新增工具类 & 方法 **2022-05-27** |
| [1.3.0][BaseToolsV1.3.0] | 转换Kotlin **2022-04-15** |
| [1.2.9][BaseToolsV1.2.9] | 新增ListAdapter,补充一些工具方法 **2020-08-24** |
| [1.2.8][BaseToolsV1.2.8] | 兼容AndroidX **2020-04-09** |
| [1.2.7][BaseToolsV1.2.7] | 新增工具类 **2019-10-15** |
| [1.2.6][BaseToolsV1.2.6] | 新增工具方法,优化Adapter **2018-9-13** |
| [1.2.5][BaseToolsV1.2.5] | 优化RecyclerView的监听事件,修复多布局管理器bug **2018-3-7** |
| [1.2.4][BaseToolsV1.2.4] | 新增:开启DataBinding,ListView、GridView、RecyclerView通用适配器,一些辅助方法 **2017-10-18** |
| [1.2.3][BaseToolsV1.2.3] | 新增ViewPager通用适配器;拓展工具类:文件、资源、反射、键盘等 **2017-7-21** |
| [1.2.2][BaseToolsV1.2.2] | 拓展配置文件存储 **2017-5-12** |
| [1.2.1][BaseToolsV1.2.1] | 支持通用适配器中的多种布局 **2017-4-20** |
| [1.2.0][BaseToolsV1.2.0] | 新增网络、拼音、异常打印等工具类 **2017-4-13** |
| [1.1.0][BaseToolsV1.1.0] | Utils增加一些常用的工具类:应用、数据库、分辨率、文件、正则表达式、命令、时间等 **2017-2-23** |
| [1.0.0][BaseToolsV1.0.0] | 创建ListView、GridView、RecyclerView的通用适配器,一些辅助方法 **2016-12-20** |
## 感谢
> - [张鸿洋][ZhangHongYang]
> - [布兰柯基][Blankj]
> - [马天宇][litesuits]
> - [LeBron_Six][smuyyh]
[返回目录](#目录)
[download]:https://bintray.com/veizhang/maven/basetools/_latestVersion "Latest version"
[issues]:https://github.com/VeiZhang/BaseToolsLibrary/issues
[forks]:https://github.com/VeiZhang/BaseToolsLibrary/network/members
[stars]:https://github.com/VeiZhang/BaseToolsLibrary/stargazers
[icon_download]:https://api.bintray.com/packages/veizhang/maven/basetools/images/download.svg
[icon_issues]:https://img.shields.io/github/issues/VeiZhang/BaseToolsLibrary.svg
[icon_forks]:https://img.shields.io/github/forks/VeiZhang/BaseToolsLibrary.svg?style=social
[icon_stars]:https://img.shields.io/github/stars/VeiZhang/BaseToolsLibrary.svg?style=social
[icon_adapter]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/images/adapter.png "适配器列表"
[icon_common_adapter]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/images/common_adapter.png "通用适配器"
[icon_multi_adapter]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/images/multi_adapter.png "多布局适配器"
[BaseToolsV1.3.1]:https://bintray.com/veizhang/maven/basetools/1.3.1
[BaseToolsV1.3.0]:https://bintray.com/veizhang/maven/basetools/1.3.0
[BaseToolsV1.2.9]:https://bintray.com/veizhang/maven/basetools/1.2.9
[BaseToolsV1.2.8]:https://bintray.com/veizhang/maven/basetools/1.2.8
[BaseToolsV1.2.7]:https://bintray.com/veizhang/maven/basetools/1.2.7
[BaseToolsV1.2.6]:https://bintray.com/veizhang/maven/basetools/1.2.6
[BaseToolsV1.2.5]:https://bintray.com/veizhang/maven/basetools/1.2.5
[BaseToolsV1.2.4]:https://bintray.com/veizhang/maven/basetools/1.2.4
[BaseToolsV1.2.3]:https://bintray.com/veizhang/maven/basetools/1.2.3
[BaseToolsV1.2.2]:https://bintray.com/veizhang/maven/basetools/1.2.2
[BaseToolsV1.2.1]:https://bintray.com/veizhang/maven/basetools/1.2.1
[BaseToolsV1.2.0]:https://bintray.com/veizhang/maven/basetools/1.2.0
[BaseToolsV1.1.0]:https://bintray.com/veizhang/maven/basetools/1.1.0
[BaseToolsV1.0.0]:https://bintray.com/veizhang/maven/basetools/1.0.0
[ZhangHongYang]:https://github.com/hongyangAndroid/baseAdapter "通用适配器"
[Blankj]:https://github.com/Blankj/AndroidUtilCode "常用工具类"
[litesuits]:https://github.com/litesuits/android-common "通用类、辅助类、工具类"
[smuyyh]:https://github.com/smuyyh/EasyAdapter "通用适配器"
[CommonAdapterActivity]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/tooldemo/src/main/java/com/excellence/tooldemo/CommonAdapterActivity.kt
[RecyclerAdapterActivity]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/tooldemo/src/main/java/com/excellence/tooldemo/RecyclerAdapterActivity.kt
[MultiItemAdapterActivity]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/tooldemo/src/main/java/com/excellence/tooldemo/MultiItemAdapterActivity.kt
[MultiItemRecyclerAdapterActivity]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/tooldemo/src/main/java/com/excellence/tooldemo/MultiItemRecyclerAdapterActivity.kt
[ViewPagerAdapterActivity]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/tooldemo/src/main/java/com/excellence/tooldemo/ViewPagerAdapterActivity.kt
[CommonBindingAdapterActivity]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/tooldemo/src/main/java/com/excellence/tooldemo/databinding/CommonBindingAdapterActivity.kt
[MultiItemTypeBindingAdapterActivity]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/databinding/MultiItemTypeBindingAdapter.kt
[BaseRecyclerBindingAdapterActivity]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/databinding/BaseRecyclerBindingAdapter.kt
[MultiItemTypeBindingRecyclerAdapterActivity]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/databinding/MultiItemTypeBindingRecyclerAdapter.kt
[ActivityUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/ActivityUtils.kt
[AlgorithmUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/AlgorithmUtils.java
[AlphaUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/AlphaUtils.kt
[AnimationUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/AnimationUtils.kt
[AnimatorUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/AnimatorUtils.kt
[AudioUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/AudioUtils.kt
[BroadcastUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/BroadcastUtils.kt
[AppUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/AppUtils.kt
[CloseUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/CloseUtils.kt
[CollectionUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/CollectionUtils.kt
[ConvertUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/ConvertUtils.kt
[DBUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/DBUtils.kt
[DensityUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/DensityUtils.kt
[DeviceUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/DeviceUtils.kt
[EmptyUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/EmptyUtils.kt
[EncryptUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/EncryptUtils.java
[ExceptionUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/ExceptionUtils.kt
[FileIOUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/FileIOUtils.kt
[FileUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/FileUtils.kt
[HandlerUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/HandlerUtils.java
[HttpUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/HttpUtils.kt
[ImageUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/ImageUtils.kt
[IntentUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/IntentUtils.kt
[KeyboardUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/KeyboardUtils.kt
[KeyController]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/KeyController.kt
[KeyEventUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/KeyEventUtils.kt
[LiveDataUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/LiveDataUtils.kt
[MathUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/MathUtils.kt
[MediaUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/MediaUtils.kt
[NetworkUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/NetworkUtils.kt
[ParseUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/ParseUtils.kt
[PathUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/PathUtils.kt
[PinyinUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/PinyinUtils.java
[ReflectUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/ReflectUtils.kt
[RegexUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/RegexUtils.kt
[ResourceUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/ResourceUtils.kt
[RxJavaUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/RxJavaUtils.kt
[ShellUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/ShellUtils.kt
[ShortcutTrigger]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/ShortcutTrigger.kt
[StorageUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/StorageUtils.kt
[StringUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/StringUtils.kt
[SurfaceViewUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/SurfaceViewUtils.kt
[SystemPropertyUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/SystemPropertyUtils.java
[TimeUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/TimeUtils.java
[ViewUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/ViewUtils.kt
[WebViewUtils]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/utils/WebViewUtils.java
[WeakHandler]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/assist/WeakHandler.java
[HanziToPinyin]:https://github.com/VeiZhang/BaseToolsLibrary/blob/master/basetoolslibrary/src/main/java/com/excellence/basetoolslibrary/assist/HanziToPinyin.java