You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 12+ Flutter应用附近设备权限请求报错求助

解决Android 12+ Flutter应用扫描SumUp设备崩溃问题

问题根源

Android 12(API 31)及以上版本中,蓝牙扫描和连接权限属于「附近设备」权限组,必须通过运行时动态请求才能获得,仅在AndroidManifest.xml中静态声明会导致权限被自动拒绝,进而引发设备扫描崩溃。

1. 添加必要依赖

在app模块的build.gradle(或build.gradle.kts)的dependencies块中补充AndroidX Activity Result API依赖——这是解决registerForActivityResult和ActivityResultContracts未解析错误的核心:

dependencies {
    // 保留原有依赖,新增以下两行
    implementation 'androidx.activity:activity-ktx:1.8.0'
    implementation 'androidx.fragment:fragment-ktx:1.6.1'
}

版本可根据项目实际情况调整,确保与compileSdkVersion 33兼容即可。

2. 修正后的MainActivity代码

import android.Manifest
import android.os.Build
import android.os.Bundle
import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.result.ActivityResultCallback
import io.flutter.embedding.android.FlutterActivity

class MainActivity : FlutterActivity() {

    // 注册多权限请求回调
    private val requestMultiplePermissions = registerForActivityResult(
        ActivityResultContracts.RequestMultiplePermissions(),
        ActivityResultCallback<Map<String, Boolean>> { permissions ->
            // 处理权限请求结果
            permissions.forEach { (permission, isGranted) ->
                if (!isGranted) {
                    // 权限被拒绝时,可提示用户前往设置手动开启
                }
            }
        }
    )

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 仅在Android 12+发起权限请求
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
            requestMultiplePermissions.launch(
                arrayOf(
                    Manifest.permission.BLUETOOTH_SCAN,
                    Manifest.permission.BLUETOOTH_CONNECT
                )
            )
        }
    }
}

3. 重要注意事项

  • 保留原有AndroidManifest.xml中的权限声明,静态声明是运行时请求的前提;
  • 若用户拒绝权限后需要再次请求,可在回调中引导用户进入应用设置页面开启「附近设备」权限;
  • 测试时需确保测试设备为Android 12及以上版本,低版本无需处理这两个蓝牙权限的动态请求。

内容的提问来源于stack exchange,提问作者valley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 00:25:28