Compose Multiplatform安卓端位置权限弹窗不显示问题求助
问题:Compose Multiplatform安卓端位置权限弹窗不弹出,高版本系统无权限选项
项目背景
我正在开发一套实时位置追踪系统,基于Compose Multiplatform。安卓端采用FusedLocationClient(结合GPS、Wifi、蓝牙提升定位精度),这套方案在原生Jetpack Compose项目中运行正常,无异常日志或报错。
核心代码模块包括:
- 权限处理Composable(表现层)
- LocationClient(核心定位逻辑层)
- ViewModel(表现层逻辑)
核心代码
权限处理Composable(依赖Accompanist-permissions)
@OptIn(ExperimentalPermissionsApi::class) @Composable fun LocationPermissionGate( content: @Composable () -> Unit ) { val permissionState = rememberPermissionState( ACCESS_FINE_LOCATION ) LaunchedEffect(Unit) { permissionState.launchPermissionRequest() } when { permissionState.status.isGranted -> content() else -> Text("Location permission required") } }
LocationClient实现
@Single(binds = [LocationClient::class]) class LocationClientImpl( private val fusedLocationClient : FusedLocationProviderClient ) : LocationClient{ private lateinit var locationCallback : LocationCallback override fun requestLocationUpdates(interval : Long) = callbackFlow<Location> { val locationRequest = LocationRequest.Builder( Priority.PRIORITY_HIGH_ACCURACY, interval ).build() locationCallback = object : LocationCallback() { override fun onLocationResult(result: LocationResult) { result.lastLocation?.let { lastLocation -> launch { send(lastLocation) } } } } fusedLocationClient.requestLocationUpdates( locationRequest, locationCallback, Looper.getMainLooper() ) awaitClose { fusedLocationClient.removeLocationUpdates(locationCallback) } } }
ViewModel代码
@KoinViewModel class MainViewModel( private val locationClient : LocationClient ) : ViewModel() { private val _currentLocation = MutableStateFlow<Location?>(null) val currentLocation = _currentLocation.asStateFlow() fun startTrackingLocation() { viewModelScope.launch { locationClient.requestLocationUpdates(2000L).collect { _currentLocation.value = it } } } fun stopTrackingLocation(){ viewModelScope.launch { locationClient.stopLocationUpdates() _currentLocation.value = null } } }
权限清单配置
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" />
问题现象
迁移到Compose Multiplatform项目后,安卓端出现以下问题:
- 位置权限弹窗始终不弹出,直接跳过用户选择步骤
- 尝试无外部依赖的权限实现,断点显示权限返回均为false,系统仿佛自动拒绝请求
- 系统设置中权限显示异常:
- 原生Jetpack Compose应用在所有安卓版本均显示位置权限选项
- Compose Multiplatform应用仅在Android 10中显示位置权限,更高版本无此选项
使用的版本信息
- composeMultiplatform: 1.9.3
- androidx-activity: 1.12.2
- androidx-core: 1.17.0
- androidx-lifecycle: 2.9.6
- accompanistPermissions: 0.37.3
- minSdk: 30
- compileSdk: 36
- targetSdk: 36
求各位帮忙分析问题根源并给出解决方案!
内容的提问来源于stack exchange,提问作者Matt M
相关产品推荐
相关产品推荐

