栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

android定位到市

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

android定位到市

    
    
// 请求结果,返回一个map ,其中 key 为权限名称,value 为是否权限是否赋予
registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { it -> 
            //通过的权限
            val grantedList = it.filterValues { it }.mapNotNull { it.key } //是否所有权限都通过
            val allGranted = grantedList.size == it.size
            if(!allGranted) "请同意所需权限!".showShortToast() else location()
        }.launch(arrayOf(Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION))
    private fun location() {
        val locationManager = context?.getSystemService(Context.LOCATION_SERVICE) as LocationManager
        var providerName = ""
        val providerList = locationManager.getProviders(true)
        providerName = when {
            providerList.contains(LocationManager.NETWORK_PROVIDER) -> {
                LocationManager.NETWORK_PROVIDER
            }
            providerList.contains(LocationManager.GPS_PROVIDER) -> {
                LocationManager.GPS_PROVIDER
            }else -> {
                "provider 获取失败".showShortToast()
                return
            }
        }
        val location = if(context?.let { ActivityCompat.checkSelfPermission(it, Manifest.permission.ACCESS_FINE_LOCATION) } == PackageManager.PERMISSION_GRANTED && context?.let { ActivityCompat.checkSelfPermission(it, Manifest.permission.ACCESS_COARSE_LOCATION) } == PackageManager.PERMISSION_GRANTED) {
            locationManager.getLastKnownLocation(providerName)
        } else null
        if(location != null) {
            val longitude : Double = location.longitude // 经度
            val latitude : Double = location.latitude // 纬度
            // 因为这里 Geocoder对象的 getFromLocation 方法,源码说明中建议在工作线程执行 getFromLocation方法
            Thread {
                try {
                    val geocoder = Geocoder(context, Locale.getDefault())
                    val result = geocoder.getFromLocation(latitude, longitude, 1)[0].locality
                    //result="北京市"
                    activity?.runonUiThread {
                        viewModel.tvAddress.set(result)
                    }
                } catch(e : Exception) {
                    e.printStackTrace()
                }
            }.start()
        } else "定位失败".loge()
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/459652.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号