在 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
解决方案是跳过在MainActivity类中实现它,而是使用Flutter包permission_handler并直接在Flutter中实现权限请求。 现在,这对于 SumUp 蓝牙设备(即扫描附近的设备、连接和位置)和通知来说效果很好。
如何在自定义代码的帮助下,在没有任何预定义库的帮助下,显示并连接我附近的所有蓝牙设备列表。我怎样才能在 Android 和 Ios 平台上做到这一点。