8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

在最新的 Android 15 中获取位置的正确方法

Craftbeergal 2月前

61 0

我在 Android 应用中无法准确检索用户位置,尤其是在较新的 Android 版本中。我根据 Stack Overflow 上的答案实施了一个解决方案,但是...

我在 Android 应用中无法准确检索用户位置,尤其是在较新的 Android 版本中。我根据 Stack Overflow 答案 ,但效果不如预期。

我不确定问题的根本原因。是由于最近的 Android 版本中位置权限处理方式的变更、我的代码中的权限实现不正确,还是 Stack Overflow 解决方案本身存在潜在问题?

您能否指导我解决此问题应采取的具体步骤,包括检查与权限相关的问题、验证位置服务和调试我的代码?

我特别感兴趣的是了解如何在较新的 Android 版本上正确处理位置权限以及任何可能解决兼容性问题的方法。

帖子版权声明 1、本帖标题:在最新的 Android 15 中获取位置的正确方法
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Craftbeergal在本站《android》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 以下是我们在撰写时可以做到的方法

    val cameraPermissionState = rememberPermissionState(Manifest.permission.ACCESS_FINE_LOCATION)
    val requestPermissionLauncher = rememberLauncherForActivityResult(
        ActivityResultContracts.RequestPermission()
    ) { isGranted ->
        if (isGranted) {
            // Permission granted
            viewModel.fetchLocation()
        } else {
            // Handle permission denial
    
        }
    }
    LaunchedEffect(cameraPermissionState) {
        if (!cameraPermissionState.status.isGranted && cameraPermissionState.status.shouldShowRationale) {
            //Show rational dialog explaining why app want this permission
        } else {
            requestPermissionLauncher.launch(Manifest.permission.ACCESS_FINE_LOCATION)
        }
    }
    

    当然,我们必须像下面这样在清单中添加权限,否则它在这里也不会起作用。

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    

    以下是在 kotlin 中获取位置的主要逻辑

    fun fetchLocation(context: Context) {
        Log.d(TAG, "onLocationResult:TestLocation>>Searching")
        val fusedLocationClient = LocationServices.getFusedLocationProviderClient(context as Activity)
    
        val locationRequest = LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 10000)
            .setWaitForAccurateLocation(true)
            .setMinUpdateIntervalMillis(5000)
            .setMaxUpdateDelayMillis(15000)
            .build()
    
        var locationCallback: LocationCallback? = null
    
        locationCallback = object : LocationCallback() {
            override fun onLocationResult(locationResult: LocationResult) {
                for (location in locationResult.locations) {
                    // Handle the received location object
                    val latitude = location.latitude
                    val longitude = location.longitude
    
                    Log.d(TAG, "onLocationResult:TestLocation>>$latitude,$longitude")
                    locationCallback?.let {
                        fusedLocationClient.removeLocationUpdates(it)
                    }
                    // ... use the location data
                }
            }
        }
        fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper())
    }
    

    与旧式 xml java 相比,在 kotlin compose 中,它变得非常简单

返回
作者最近主题: