如何在 Kotlin API 33 中以编程方式更改蓝牙编解码器?

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

我想将蓝牙编解码器类型从 AAC 更改为 SBC。这是一个非常新的功能,文档还不完整。 BluetoothAdapter

我尝试了“setCodecConfigPreference”但现在不支持....

// Manifest
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
    <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
    <uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED" tools:ignore="ProtectedPermissions" />

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)


        // API 33+ ----------------------------------------------------//

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
            val permissions = arrayOf(
                android.Manifest.permission.BLUETOOTH,
                android.Manifest.permission.BLUETOOTH_PRIVILEGED,
                android.Manifest.permission.BLUETOOTH_ADMIN,
                android.Manifest.permission.BLUETOOTH_CONNECT,
                android.Manifest.permission.BLUETOOTH_SCAN
            )

            if (applicationContext.checkSelfPermission(android.Manifest.permission.BLUETOOTH) != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this, permissions,0)
            }
            
            val device = BluetoothDevice.DEVICE_TYPE_CLASSIC
            val codec = BluetoothCodecConfig.Builder()
                .setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC)
                .build()

            
            //   HOW DO I APPLY THIS ???
        }
}
kotlin bluetooth codec
2个回答
0
投票

您需要首先设置 SDK 以使用 Android 14 预览 SDK,如此处所述(请参阅文档了解完整详细信息):

android {
  compileSdkPreview "UpsideDownCake"
  ...
  defaultConfig {
    targetSdkPreview "UpsideDownCake"
  }
}

然后您应该可以访问 Android 14 的新 API,可以通过获取代理并根据连接的设备设置配置来使用它:

context.getSystemService(BluetoothManager::class.java)
  .adapter
  .getProfileProxy(
    context,
    object : BluetoothProfile.ServiceListener {
      override fun onServiceConnected(profile: Int, proxy: BluetoothProfile) {
        (proxy as BluetoothA2dp).setCodecConfigPreference(
          bluetoothDevice,
          BluetoothCodecConfig.Builder()
            .setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC)
            .build()
        )
      }

      override fun onServiceDisconnected(profile: Int) {}
    },
    BluetoothProfile.A2DP
  )

0
投票

不允许直接更改 API 33 中的编解码器 因为 setCodecConfigPreference 不是公共 API

为此,我推荐此演示,在此演示中提供简单的代码来更改蓝牙编解码器

https://github.com/matisiekpl/bluetooth-codec-change?tab=readme-ov-file

当你打开这个演示时,在 android studio 中找不到一些代码,例如未解析的参考,但不用担心

为此,请在您的 android SDK 文件夹中打开平台文件夹并按照以下步骤进行操作

  1. 首先为您当前的所有 SDK 版本创建备份
  2. 将所有 SDK 压缩并移至安全位置
  3. 清除平台文件夹并删除该文件夹中的所有内容
  4. 过去的所有 SDK https://drive.google.com/drive/folders/17oMwQ0xBcSGn159mgbqxcXXEcneUmnph
  5. 之后在您的平台文件夹中可用的 SDK 最多可达 30 个
  6. 在备份 zip 后,如果 android 33 SDK 可用,则将该 SDK 复制到此文件夹中
  7. 右键单击解压缩文件夹中 android 33 文件夹中的 android.jar 文件,打开打开蓝牙文件夹中的 android 文件夹,并在其中打开所有类文件
  8. 在下载 android 30 文件夹的同一位置复制所有类并复制到 android31>android>android>蓝牙
  9. 复制所有 make 后,按 pase 并跳过方法并替换蓝牙编解码器配置和 bluetootha2dp 类
  10. 完成此操作后,为 abdroid33>android> 中的所有可用文件制作 1 个 zip 文件
  11. 命名为 android.zip
  12. 将该 zip 移动到 android 33 文件夹
  13. 现在删除android.jar
  14. 将 android.zip 重命名为 android.jar
  15. 打开您的项目使您的项目支持目标 33 api 级别
  16. 你可以在你的android studio外部库中看到使用的是哪个版本的sdk
  17. 水槽项目完成后,效果很好

如果有任何疑问请告诉我

谢谢你。

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