Android 常用工具类
前言
在 Android 开发中,我们经常需要用到各种工具类,比如 SPUills,ListUtils,TimeUtils,StringUtils,ToastUtisl ,FragmentUtils 等等。今天,这篇博客主要介绍我平时在开发中常用到的工具类,希望能给大家带来一点点帮助,后续会不断更新,欢迎大家加入一起维护。
完全退出
写在基类 BaseActivity,然后每个Activity都去继承
public class BaseActivity extends AppCompatActivity {
public ActivityManagerUtil activityManagerUtil;
public Activity mActivity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutId() );
mActivity = this;
activityManagerUtil = ActivityManagerUtil.getInstance();
activityManagerUtil.pushOneActivity(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
//结束Activity&从栈中移除该Activity
activityManagerUtil.popOneActivity(this);
}
protected abstract int getLayoutId();
}
需要完全退出
activityManagerUtil.appExit();
全局异常捕获
只要在Application 初始化即可
public class AndroidUtilsApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//崩溃处理
CrashHandlerUtil crashHandlerUtil = CrashHandlerUtil.getInstance();
crashHandlerUtil.init(this);
crashHandlerUtil.setCrashTip("很抱歉,程序出现异常,即将退出!");
}
}
FragmentUtils
- addFragment
- hideAddFragment
- removeFragment
- replaceFragment
- popFragment
- showFragment
- dispatchBackPress
让 Fragment 处理 Back 事件,“高内聚,低耦合”,一直是我们追求的目标,而这完美地体现了这一点
Utils
- void init(@NonNull final Application app)
在 Application 初始化的时候调用
- Application getApp()
获取 Application 对象
该工具类的主要作用是为我们提供一个 Application 对象,而 Application 是 Context 的实现类。这样,我们在写很多工具类的时候,就不需要传入 Context 对象了。比如 ToastUtils,SPUtils 等,方便用快捷
SPUtils
- get
- put
- getLong
- getInt
- getString
- getFloat
- getShort
- putInt
- putString
在该工具里面,它依赖于 Utils getApp() 方法,因此,我们在调用相应方法的时候不需要每次都传入 Context 。方便又快捷
ToastUtils
- showLongSafe
- showShortSafe
- showShort
- showLong
showLongSafe 方法与 showLong 方法的区别在于 showLongSafe 是安全地,它可以直接在子线程中调用
IntentUtils
- Intent openFile(String filePath)
用来产生打开各种类型文件的 Intent,包括 图片,音频文件,视频文件,APK,ppt,xls,doc,chm,txt 等文件
DensityUtil
- dip2px
- px2dip
- px2sp
- sp2px
主要用来处理 dp 与 px 的互转,sp 与 px 的互转等。
AppUtil
- String getAppVersionName(Context context)
获取app版本名
- int getAppVersionCode(Context context)
获取app版本号
获取网络状态
NetStateUtils
- boolean is3G(Context context)
判断是否是 3G 网络
- isWifi(Context context)
判断是否是 wifi 网络
- is2G(Context context)
判断是否是 2G 网络
- boolean isWifiEnabled(Context context)
判断 WiFi 是否打开
- isNetworkConnected(Context context)
判断是否有网络连接
- boolean isMobileConnected(Context context)
判断当前是否是移动网络,并且网络是否可用
- getAPNType(Context context)
获取当前的网络状态:(该方法是自定义的) :没有网络-0:WIFI网络1:4G网络-4:3G网络-3:2G网络-2
- String getHostIp()
获取本地的 IP 地址
- boolean isGPSEnabled(Context context)
判断 GPS 是否开启
更多方法,请参考该类,这里不一一说明了。
监听网络变化
监听网络变化的,主要有三个广播
<action android:name="android.NET.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.Net.wifi.WIFI_STATE_CHANGED" />
<action android:name="android.net.wifi.STATE_CHANGE" />
需要注意的 android.NET.conn.CONNECTIVITY_CHANGE 这个广播,从 Android 7.0 开始,如果是静态注册的,将无法收到广播。
更多行为变更请查看官网地址
KeyBoardUtil
- KeyBoardUtil getInstance(Activity activity)
获取实例对象
- show()
显示输入法
- hide()
隐藏输入法
StringUtils
- isEmpty(CharSequence str)
判断是否是空字符串
- String getStr(String str,String defStr)
获取字符串的值,如果是 null,返回 defStr。当然你也可以调用 getStr(String str) 方法,为 null 的话,返回 ""。
好处:如果字符串为空,则会包空指针异常。调用该方法,我们可以不必每次判断字符串是否为空。
- length(CharSequence str)
获取字符串的长度。平时我们如果调用 String.length ,如果字符串为空,则会包空指针异常。调用该方法,我们可以不必每次判断字符串是否为空。
- String capitalizeFirstLetter(String str)
该方法是将字符串的首字母变为大小写
/**
* capitalize first letter
*
* <pre>
* capitalizeFirstLetter(null) = null;
* capitalizeFirstLetter("") = "";
* capitalizeFirstLetter("2ab") = "2ab"
* capitalizeFirstLetter("a") = "A"
* capitalizeFirstLetter("ab") = "Ab"
* capitalizeFirstLetter("Abc") = "Abc"
* </pre>
*
* @param str
* @return
*/
ListUtils
在 Android 开发中,对 List 的操作也是非常常见的。
- getSize(List<V> sourceList)
获取 List 的数量。该方法相比传统的方法,不需要每一次都去判空。
if(sourceList==null){
return 0;
}else{
sourceList.size();
}
// 或者 相当于以下代码
sourceList == null ? 0 : sourceList.size()
- isEmpty(List<V> sourceList)
判断 List 是否为空
- boolean isEquals(List<V> actual, List<V> expected)
判断两个链表是否相等
- addDistinctEntry(List<V> sourceList, V entry)
if entry already exist in sourceList, return false, else add it and return true.
- addDistinctList(List<V> sourceList, List<V> entryList)
add all distinct entry to list1 from list2
- distinctList(List<V> sourceList)
remove duplicate entries in list
- getNext(List<V> sourceList, V value)
ArrayUtils
ArrayUtils 里面的方法与 ListUtils 基本是一一对应的,这里就不再一一阐述了
RexUtils
- checkIdCard(String idCard)
验证身份证号码
- checkMobile(String mobile)
验证手机号码(支持国际格式,+86135xxxx...(中国内地),+00852137xxxx...(中国香港))
-
boolean checkPhone(String phone)
-
checkEmail
检验是否是电子邮箱。格式是数字,字母,下划线,但不含有 -。
- checkDigit
验证是否是整数
- checkDecimals
验证整数和浮点数
- checkBlankSpace
检验是否是空白字符
- checkChinese
检验是否是中文
- checkBirthday
验证日期(日期,格式:1992-09-03,或1992.09.03)
- 验证 URL 地址
格式:http://blog.csdn.net/gdutxiaoxu/article/details/71732642或 http://www.csdn.net:80
- checkIpAddress
匹配 IP 地址
- phoneNoHide
手机号码,中间4位星号替换
- cardIdHide
银行卡号,保留最后4位,其他星号替换
关于更多正则表达式的,可以参考我的这一篇博客。 Android 常用正则表达式
DateUtils
- String getCurrentDate()
获取当前的日期 ,格式为 yyyy-MM-dd
- String getWeekOfDate(Date date)
获取指定日期是星期几,参数为null时表示获取当前日期是星期日
- String getWeekOfDate(long timeMiss)
根据毫秒数获取当前是星期几
- getCurrentDateAndTime
获取当前时间和日期,yyyy-MM-dd HH:mm:ss。
FileUtils
- File getFileByPath(final String filePath)
- isFileExists
- rename
- isDir
- isFile
- createOrExistsDir
- createOrExistsFile
- copyOrMoveDir
ZipUtils
-
boolean zipFiles(final Collection<File> resFiles, final String zipFilePath)
throws IOException -
boolean zipFiles(final Collection<File> resFiles, final String zipFilePath, final String comment)
-
boolean unzipFiles(final Collection<File> zipFiles, final String destDirPath)
throws IOException
题外话
到目前为止,工具类的收集大概这么多,有一些本地还没同步的,后续会不断更新。
网友评论