这个是最底层的核心依赖库,主要用来放support库和通用的帮助类
- 1、涉及的support依赖
- 2、日志类PrintLog
- 3、网络状态类NetworkManager
- 4、加密相关
- 5、线程池ThreadPoolManager
- 6、各种通用工具类
- 7、缓存Cache
- 8、通知帮助类NotificationUtils
- 8、状态栏帮助类StatusBarUtil
- 扩展
该库引用了下方这些support库,如果您的app有重复引用可以选择去掉顶层引用或者保证版本一致
dependencies {
api 'androidx.appcompat:appcompat:1.2.0'
api 'com.google.android.material:material:1.3.0'
api 'androidx.recyclerview:recyclerview:1.2.0'
api 'androidx.cardview:cardview:1.0.0'
api 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
api 'androidx.annotation:annotation:1.2.0'
api 'androidx.constraintlayout:constraintlayout:2.0.4'
}
PrintLog主要封装了日志的打印开关,小伙伴可以在app里的build.gradle文件里添加日志开关的变量,如下所示:
android {
....
def LOG_DEBUG = "LOG_DEBUG"
defaultConfig {
buildConfigField "boolean", LOG_DEBUG, "true"
}
buildTypes {
debug {
.....
}
release {
buildConfigField "boolean", LOG_DEBUG, "false"
.....
}
}
}
在application的初始化中可以配置该变量,起到开关日志的效果
PrintLog.setPrint(BuildConfig.LOG_DEBUG)
网络管理采用单例模式,需要在application里初始化该类,如下所示
NetworkManager.get().init(Context);
在退出应用的时候释放资源并且清除添加的网络状态回调监听器
NetworkManager.get().release(Context);
NetworkManager.get().clearNetworkListener();
如果你需要监听网络状态变化,可以增加一个监听器,如下所示:
NetworkManager.get().addNetworkListener(NetworkManager.NetworkListener);
如果不需要再使用了可以移除掉这个监听器,你可以选择用完就立刻移除,也可以选择在退出app时统一移除
NetworkManager.get().removeNetworkListener(NetworkManager.NetworkListener);
以下为常用方法,具体可以参见代码注释
NetworkManager.get().isNetworkAvailable()
NetworkManager.get().isWifi()
NetworkManager.get().getNetType()
NetworkManager.get().getSimOperator()
NetworkManager.get().getOperatorInfo()
记得加入下面两个权限,确保功能正常使用
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
目前只收入了3个加密相关类,后续如果有用到其他的或者小伙伴们有需要会再陆续补充
- AES
- MD5
- SHA1
1)我为大家准备了3个优先级的线程池(高、中、低),当执行该线程池时才会创建对应的线程池对象,调用方法分别如下:
ThreadPoolManager.get().executeHighest(Runnable);
ThreadPoolManager.get().executeNormal(Runnable);
ThreadPoolManager.get().executeLowest(Runnable);
2)如果希望订制线程池的配置,可以使用下面的方法()
ThreadPoolManager.get().newBuilder()
.setAwaitTime(50)// 设置线程结束等待时间
.setAwaitTimeUnit(TimeUnit.MILLISECONDS)// 设置线程结束等待时间单位
.setKeepAliveTime(1)// 设置线程数空闲时间
.setKeepAliveTimeUnit(TimeUnit.SECONDS)// 设置线程数空闲时间单位
.setCorePoolSize(4)// 设置线程数
.setMaximumPoolSize(8)// 设置最大线程数
.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy())// 设置拒绝策略
.build();
- AlbumUtils 系统相册工具类,你可以通过里面的方法获取系统相册的图片和图片的文件夹信息
- AnimUtils 动画帮助类,可传入anim资源来对view进行动画控制
- AppUtils 应用帮助类,可获取应用的名称、版本号等信息
- DateUtils 时间格式化帮助类,可以将毫秒时间戳格式化为时间字符串,反之亦然
- DensityUtils 单位转换类,dp、px、sp之间的相互转换
- DeviceUtils 设备帮助类,可获取手机的IMEI、IMESI、UA信息,获取前请注意动态获取权限
- FileUtils 文件操作帮助类,封装了对文件操作相关的方法
- KeyBoardUtils 软键盘控制类,可帮助你显隐键盘
- NumberFormatUtils 数字格式化帮助类,可将数字格式化为你需要的小数样式
- ReflectUtils 反射帮助类,封装了反射相关的方法,已在内部进行trycatch,小伙伴对返回的参数记得判空
- ScreenUtils 屏幕信息帮助类,获取屏幕的宽高
- SnackbarUtils Snackbar帮助类,定制简单的Snackbar提示
- StorageUtils 存储帮助类,可获取存储路径和存储大小
- StringUtils 字符串帮助类,可以对字符串进行UTF-8编码,根据分隔符把字符串转为list
- ToastUtils Toast帮助类,可以显示简单的toast提示,也可以自定义Toast提示
- UiHandler 把runnable post到UI线程执行的工具类,在app退出时调用UiHandler.destroy()释放资源
- VibratorUtil 手机震动帮助类
- BitmapUtils 图片处理帮助类,压缩转码等等
- IdCardUtils 身份证校验类
- ArrayUtils 数组列表帮助类
- AssetsUtils 获取Assets资源的工具类
- DrawableUtils 创建Drawable帮助类
- SelectorUtils 按钮和文字Selector状态帮助类
- SettingUtils 系统设置帮助类
缓存这块引用了ACache来做,我封装了ACacheUtils方便小伙伴进行缓存的配置和使用。
- 在你APP启动的位置对ACacheUtils进行配置,如下代码:
ACacheUtils.get().newBuilder()
.setCacheDir(dirPath)// 设置缓存路径,不设置则使用默认路径
.setMaxSize(maxSize)// 自定义缓存大小,不设置则使用默认大小
.setMaxCount(maxCount)// 自定义缓存数量,不设置则使用默认数量
.build(this);// 完成构建
// 如果你均使用默认配置,那么请这么写
ACacheUtils.get().newBuilder().build(this);
- 如果你要保存一个String数据,你可以这么使用
ACacheUtils.get().create().put("data", "萌萌哒");
- 当然,你可以为你的数据设置缓存时间,类似下面这样
ACacheUtils.get().create().put("data", "萌萌哒", 10);//保存10秒,如果超过10秒去获取这个key,将为null
ACacheUtils.get().create().put("data", "萌萌哒", 2 * ACache.TIME_DAY);//保存两天,如果超过两天去获取这个key,将为null
- 如果你想获取一个String数据你可以这么使用
ACacheUtils.get().create().getAsString("data")
- 如果你想清空缓存数据,可以调用下面的方法
ACacheUtils.get().create().clear();
- 如果你想删除某个key对应的缓存,你可以这么干
ACacheUtils.get().create().remove("data");
在Android8.0里发送通知需要指定该通知的频道id。
<1> 如果你的targetSdkVersion小于26,那么在创建Notification的时候,频道id可以传null来避开适配问题
<2> 如果你的targetSdkVersion大于等于26,那么你在创建Notification的时候必须指定频道id,否则发送时会抛出异常,无法正常显示通知
- 创建一个通知组,设置该通知组的groupId和groupName,只要在改APP里设置过一次以后就无需再重复设置
NotificationChannelGroup group = new NotificationChannelGroup(groupId, groupName);
NotificationUtils.create(getContext()).createNotificationChannelGroup(group);// 设置通知组
- 创建一个通知频道,设置该频道的channelId和channelName,只要在改APP里设置过一次以后就无需再重复设置.
- 通知频道内有许多参数可以设置,大家可以根据自己的需要配置参数
- 一个组里可以有多个频道,通过setGroup(groupId)方法,将该频道配置进id对应的组里
NotificationChannel channel = new NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_DEFAULT);
channel.enableLights(true);// 开启指示灯,如果设备有的话。
channel.setLightColor(Color.GREEN);// 设置指示灯颜色
channel.setDescription("应用主通知频道");// 通道描述
channel.enableVibration(true);// 开启震动
channel.setVibrationPattern(new long[]{100, 200, 400, 300, 100});// 设置震动频率
channel.setGroup(groupId);
channel.canBypassDnd();// 检测是否绕过免打扰模式
channel.setBypassDnd(true);// 设置绕过免打扰模式
channel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
channel.canShowBadge();// 检测是否显示角标
channel.setShowBadge(true);// 设置是否显示角标
NotificationUtils.create(getContext()).createNotificationChannel(channel);// 设置频道
通过NotificationCompat.Builder方法来构建你的通知内容,在获得Notification后可以传入NotificationUtils里的send()方法来发送通知
// channelId的设置方法请参考第一点
NotificationCompat.Builder builder = new NotificationCompat.Builder(getContext(), channelId);
......
Notification notification = builder.build();//构建通知
NotificationUtils.create(getContext()).send(notification);
NotificationUtils.create(getContext()).send(notifiId, notification);
- 如果你希望随机生成id来发送,你可以在send()方法里直接传入Notification
- 如果你希望指定id来发送,你可以在send()方法里传入id和Notification
我这里直接使用了laobie的StatusBarUtil,主要是对状态栏的颜色进行控制。 有兴趣了解的小伙伴可以直接到他的github里围观。