如果我想使用蓝牙和 Target SDK 31 但我的最低 SDK 为 23,我在 Android 上需要什么权限?

Jkk*_*arr 5 android bluetooth android-permissions

问题:我想在 Android 上制作一个需要蓝牙功能的应用程序,但我不太确定需要什么权限。我将不再阅读此文档https://developer.android.com/guide/topics/connectivity/bluetooth/permissions,但措辞让我感到困惑。在我的应用程序 gradle 文件中,mytargetSdkcompileSdkmy 都设置为 31,这将是 Android 12。MyminSdk设置为 23,但这将是 Android 6.0。至少我知道我的应用程序需要能够扫描蓝牙设备、连接设备并与设备通信。我的应用程序不会从蓝牙扫描中获取位置。

我所需的权限至少如下所示:


<manifest>
    <!-- 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" />

    <!-- Needed only if your app looks for Bluetooth devices.
         If your app doesn't use Bluetooth scan results to derive physical
         location information, you can strongly assert that your app
         doesn't derive physical location. -->
    <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />

    <!-- Needed only if your app communicates with already-paired Bluetooth
         devices. -->
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

    ...
</manifest>
Run Code Online (Sandbox Code Playgroud)

这来自“目标 Android 12 或更高版本”下的链接网页,但我想知道我是否还需要遵守“目标 Android 11 或更低版本”部分,因为我的最低 Android SDK 是 Android 6.0。那么我是否适合遵循 Android 12 目标指令或 Android 11 或更低目标指令?

Var*_*rni 7

您可以使用蓝牙权限,如下targetSdk设置为 31 和minSdk23

    <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_CONNECT" />
    <uses-permission
        android:name="android.permission.BLUETOOTH_SCAN"
        android:usesPermissionFlags="neverForLocation"
        tools:targetApi="s" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Run Code Online (Sandbox Code Playgroud)

然后在请求权限时,

    private String[] getRequiredPermissions() {
        int targetSdkVersion = getApplicationInfo().targetSdkVersion;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && targetSdkVersion >= Build.VERSION_CODES.S) {
            return new String[]{Manifest.permission.BLUETOOTH_SCAN, Manifest.permission.BLUETOOTH_CONNECT};
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && targetSdkVersion >= Build.VERSION_CODES.Q) {
            return new String[]{Manifest.permission.ACCESS_FINE_LOCATION};
        } else return new String[]{Manifest.permission.ACCESS_COARSE_LOCATION};
    }
Run Code Online (Sandbox Code Playgroud)