Android日常开发工具集

167 阅读2分钟

平时在开发过程中,总会遇到一些这种情况:之前用过的功能或者方法,现在想要用的时候,却忘记了。于是在多个项目中盲找,浪费时间。最终还是决定随手记录一下吧,仅供参考。

1、比较版本

比较版本号versionCode就不用说了,直接比较大小就可以了。如果是比较版本名versionName,比如1.0.1,可以用字符串分割成数组,然后按从左到右依次比较的思路来判断。代码如下:

/**
 * 版本比较
 * @param netVersion 远程版本
 * @param localVersion 本地版本
 */
fun versionComparison(netVersion: String, localVersion: String): Boolean {
    if (TextUtils.isEmpty(netVersion) || TextUtils.isEmpty(localVersion)) {
        return false
    }
    val netVersionSplit = netVersion.split("\\.".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
    val localVersionSplit = localVersion.split("\\.".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
    val maxLen = if (netVersionSplit.size > localVersionSplit.size) netVersionSplit.size else localVersionSplit.size
    for (i in 0 until maxLen) {
        val netVersionNumber = (if (i < netVersionSplit.size) netVersionSplit[i] else "0").toInt()
        val localVersionNumber = (if (i < localVersionSplit.size) localVersionSplit[i] else "0").toInt()
        if (netVersionNumber > localVersionNumber) {
            return true
        } else if (netVersionNumber < localVersionNumber) {
            return false
        }
    }
    return false
}

2、手机号码正则表达式检测

/***
 * 手机号码检测
 * @param number 手机号码
 */
fun checkPhoneNumber(number: String): Boolean{
    val regExp = "^((13[0-9])|(15[^4])|(18[0-9])|(17[0-8])|(14[5-9])|(166)|(19[8,9])|)\\d{8}$"
    val pattern = Pattern.compile(regExp)
    val matcher = pattern.matcher(number)
    return matcher.matches()
}

3、判断手机是否开启位置服务

/**
 * 手机是否开启位置服务,如果没有开启那么所有app将不能使用定位功能
 */
private fun isLocServiceEnable(context: Context): Boolean {
    val mLocationManager: LocationManager? = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager?
    val gps: Boolean? = mLocationManager?.isProviderEnabled(LocationManager.GPS_PROVIDER)
    val network: Boolean? = mLocationManager?.isProviderEnabled(LocationManager.NETWORK_PROVIDER)
    if (gps!! || network!!) {
        return true
    }
    return false
}

4、将经纬度转换为度分秒格式

/**
     * 将经纬度转换为度分秒格式
     *
     * @param du 经纬度 116.418847 40.0897315
     * @return 116°25'7.85" 40°5'23.03"
     *
     * 参考
     * Java实现经纬度格式转化度分秒
     * https://blog.csdn.net/q32421/article/details/130220888
     * Java 度分秒转经纬度,经纬度转度分秒,度分转经纬度,经纬度转度分
     * https://blog.csdn.net/qq_40985985/article/details/124448314
     */
     fun latLng2Dfm(du: Double): String {
        val du1 = du.toInt()
        val tp = (du - du1) * 60
        val fen = tp.toInt()
//        val miao = String.format("%.2f", abs((tp - fen) * 60))
        return du1.toString() + "°" + abs(fen) + "'" //+ miao + "\""
    }