为 Android 12+ 设置附近设备的权限

问题描述 投票:0回答:2

在 Flutter 移动应用程序的 Android 部分,当我们尝试扫描可用的 SumUp 设备时,我们会遇到操作系统版本 >= 12 时发生应用程序崩溃的情况。虽然两者都需要权限

<uses-permission android:name="android.permission.BLUETOOTH_SCAN"
  android:usesPermissionFlags="neverForLocation"
  tools:targetApi="s" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

在 AndroidManifest.xml 中定义,“附近设备”权限(除了“位置”权限之外也是必不可少的)在设备上始终会被自动拒绝 - 手动将其设置为“允许”状态效果很好。 看来我们也必须在运行时请求这两个权限。这是我们的 Kotlin MainActivity 类:

import android.Manifest
import android.os.Build
import android.os.Bundle
import io.flutter.embedding.android.FlutterActivity


class MainActivity: FlutterActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
            requestMultiplePermissions.launch(arrayOf(
                Manifest.permission.BLUETOOTH_SCAN,
                Manifest.permission.BLUETOOTH_CONNECT))
        }
    }

    private val requestMultiplePermissions =
        registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions())
}

在本课程中,我们总是遇到有关

registerForActivityResult
ActivityResultContracts
的未解决的参考错误,并且我们不知道必须在哪里导入或更新正确的库才能使其正常工作。

如果有人有一个可用的 Kotlin 类并且可以告诉我们在哪里导入合适的库,我们将非常感激。 我们的 build.gradle 配置如下所示:

compileSdkVersion 33
minSdkVersion 21
targetSdkVersion 33
android flutter kotlin permissions sumup-payments
2个回答
0
投票

解决方案是跳过在MainActivity类中实现它,而是使用Flutter包permission_handler并直接在Flutter中实现权限请求。 现在,这对于 SumUp 蓝牙设备(即扫描附近的设备、连接和位置)和通知来说效果很好。


0
投票

如何在自定义代码的帮助下,在没有任何预定义库的帮助下,显示并连接我附近的所有蓝牙设备列表。我怎样才能在 Android 和 Ios 平台上做到这一点。

© www.soinside.com 2019 - 2024. All rights reserved.