繁体   English   中英

Jetpack compose 中未显示运行时蓝牙权限

[英]Runtime Bluetooth permission not showing in jetpack compose

我想请求运行时权限。 但它只显示一个请求。 有人可以指导我如何在 jetpack compose 中实现这一点。 我正在使用 compose 1.1.1并使用0.23.1版本的伴奏权限 我根据这个官方文档在我的清单中声明了许可..

清单.xml

    <uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>
    <!-- Request legacy Bluetooth permissions on older devices. -->
    <uses-permission
        android:name="android.permission.BLUETOOTH"
        android:maxSdkVersion="30" />
    <uses-permission
        android:name="android.permission.BLUETOOTH_ADMIN"
        android:maxSdkVersion="30" />
    <uses-permission
        android:name="android.permission.BLUETOOTH_SCAN"
        android:usesPermissionFlags="neverForLocation"
        tools:targetApi="s" />
    <!-- Needed only if your app makes the device discoverable to Bluetooth devices. -->
    <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
    <!-- Needed only if your app communicates with already-paired Bluetooth devices. -->
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
    <uses-feature android:name="android.hardware.bluetooth" android:required="true"/>

我试过这段代码

蓝牙请求活动.kt

class BluetoothRequestActivity : BaseActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            Theme {
                val multiplePermissionsState = rememberMultiplePermissionsState(
                    listOf(
                        Manifest.permission.BLUETOOTH,
                        Manifest.permission.BLUETOOTH_SCAN,
                        Manifest.permission.BLUETOOTH_CONNECT,
                        Manifest.permission.BLUETOOTH_ADVERTISE,
                        Manifest.permission.BLUETOOTH_ADMIN
                    )
                )
                AppBarScaffold(abc = true) {
                    BluetoothRequest(multiplePermissionsState, onCancelClick = {
                        finish()
                    })
                }
            }
        }
    }
}

另一个组成 function

蓝牙请求

@Composable
fun BluetoothRequest(
    multiplePermissionsState: MultiplePermissionsState,
    onCancelClick: () -> Unit
) {
    Column {
        BluetoothRequestItem()
        BluetoothRequestContinue(multiplePermissionsState)
        BluetoothRequestCancel(onCancelClick)
    }
}

蓝牙请求继续

@Composable
fun BluetoothRequestContinue(multiplePermissionsState: MultiplePermissionsState) {
    MaterialButton(
        text = stringResource(R.string.continue_text),
        spacerHeight = dimensionResource(10.dp)
    ) {
        multiplePermissionsState.launchMultiplePermissionRequest()
    }
}

我只得到这样的单一请求权限

在此处输入图像描述

无论您提到什么说您想要这些权限,都在显示的对话框中逐字逐句地涵盖了。

您说“扫描、配对和数据传输”,对话框显示查找(扫描)、连接到(配对和数据传输),并找到附近设备的相关 position(额外功能)。 尝试从数组中删除一些权限,看看对话框文本是如何变化的。 用户不应该知道底层操作系统的技术细节(管理员、广告)。 这就是为什么它被抽象成一个简单的文本对话框,向用户清楚地说明一切。 你的代码很好,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM