kotlin写的高德定位

前期步骤与java一样不再赘述。这里只贴kotlin代码.

build.gradle 添加

//权限相关
implementation 'com.guolindev.permissionx:permissionx:1.6.1'

需要定位的界面的逻辑代码

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    initPermission()
    }
}
override fun onResume() {
    super.onResume()
    //获取定位服务
    getLocationService()
}
//权限
private fun initPermission() {

    PermissionX.init(this)
            .permissions(
                    Manifest.permission.ACCESS_FINE_LOCATION,
                    Manifest.permission.ACCESS_COARSE_LOCATION,
            )
            .onExplainRequestReason { scope, deniedList ->
                val message = "APP需要您同意以下权限才能正常使用"
                scope.showRequestReasonDialog(deniedList, message, "允许", "取消")
            }
            .onForwardToSettings { scope, deniedList ->
                scope.showForwardToSettingsDialog(deniedList, "您需要去应用程序设置当中手动开启权限", "去设置", "退出")
            }
            .request { allGranted, _, deniedList ->
                if (allGranted) {
                    haveLocationPermission = true
                } else {
                    haveLocationPermission = false
                    Toast.makeText(this, "您拒绝了如下权限:$deniedList", Toast.LENGTH_SHORT).show()
                    System.exit(0)
                }
            }
}

private var haveLocationPermission = false
private fun getLocationService() {
    if (haveLocationPermission) {
        //判断是否开启服务getSaveResponse
        var locationManager = this@HomeActivity.getSystemService(Context.LOCATION_SERVICE) as LocationManager
        if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            BLogUtils.e(TAG, "用户打开定位服务")
            getLocation()
        } else {
            BLogUtils.e(TAG, "用户关闭定位服务")
            MaterialAlertDialogBuilder(this@HomeActivity)
                    .setMessage("请打开位置服务开关,否则可能无法正常使用")
                    .setCancelable(false)
                    .setPositiveButton("去打开") { _, _ ->
                        val intent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)
                        //startActivityForResult(intent, 1)
                        startActivity(intent)
                    }
                    .setNegativeButton("退出") { _, _ -> System.exit(0) }
                    .show()
        }
    }
}
private fun getLocation() {
    AMapLocationClient.updatePrivacyShow(this, true, true);
    AMapLocationClient.updatePrivacyAgree(this, true);
    //声明AMapLocationClient类对象
    var mLocationClient = AMapLocationClient(applicationContext)
    //声明定位回调监听器
    //val mLocationListener = AMapLocationListener() {}

    var mLocationOption = AMapLocationClientOption();
    mLocationOption.setLocationPurpose(AMapLocationClientOption.AMapLocationPurpose.SignIn)

    mLocationClient.setLocationOption(mLocationOption);
    //设置场景模式后最好调用一次stop,再调用start以保证场景模式生效
    mLocationClient.stopLocation();
    mLocationClient.startLocation();
    //设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。
    mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
    //设置是否返回地址信息(默认返回地址信息)
    mLocationOption.setNeedAddress(true);
    //设置是否允许模拟位置,默认为true,允许模拟位置
    mLocationOption.setMockEnable(true);
    //单位是毫秒,默认30000毫秒,建议超时时间不要低于8000毫秒。
    mLocationOption.setHttpTimeOut(20000);
    //关闭缓存机制
    mLocationOption.setLocationCacheEnable(false);
    //给定位客户端对象设置定位参数
    mLocationClient.setLocationOption(mLocationOption);
    //启动定位
    mLocationClient.startLocation()
    //设置定位回调监听
    mLocationClient.setLocationListener(MyLocationListener())
}

inner class MyLocationListener : AMapLocationListener {
    override fun onLocationChanged(p0: AMapLocation) {
        when (p0.getErrorCode()) {
            0 -> {
                Log.e("AmapError", "location Error, ErrCode:"
                        + p0.getErrorCode() + ", errInfo:"
                        + p0.getErrorInfo());
            }
        }

        var locationStr = p0.getCity() + p0.getDistrict() + p0.getStreet()
        BLogUtils.e("locationStr", locationStr)
}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值