When you stream music or watch videos over Bluetooth, the audio quality you hear is largely determined by the codec the phone and the headset negotiate. Android supports several codecs, such as SBC (the default, low‑bit‑rate), AAC (common on Apple devices), aptX/aptX HD (Qualcomm), and LDAC (Sony). Each codec offers a different balance of bitrate, latency, and power consumption. Selecting a higher‑quality codec can make a noticeable difference, especially for lossless or high‑resolution audio files.
Unfortunately, Android does not always expose the codec selector in the standard UI, and many manufacturers hide or lock the setting. The good news is that you can still influence the choice without rooting, using a combination of Developer Options and ADB commands. This tutorial walks you through the entire process, from preparation to verification, and covers common pitfalls.
adb installed. A standard USB‑C or micro‑USB cable is sufficient.C:\adb on Windows or ~/adb on macOS/Linux).cd path/to/adb
adb devices
You should see a device serial number listed under “device”. If you see “unauthorized”, check the phone for a prompt and tap “Allow”.
Android does not display the active codec in the UI, but you can query it via ADB. This step also gives you a baseline to revert to later.
adb shell dumpsys bluetooth_manager | grep "Codec"
Codec: SBC or Codec: aptX. Note the value.
Some OEM skins expose a codec selector directly in the Bluetooth settings. If you see it, this is the safest method.
adb shell dumpsys bluetooth_manager | grep "Codec" command to confirm the change.
If the dropdown is missing, proceed to the ADB‑based method.
Android stores the preferred codec in a system property. You can modify this property with the setprop command. The exact property name varies by Android version, but the most common ones are:
persist.bluetooth.a2dp.codec – integer value representing the codec.persist.bluetooth.a2dp.codec.priority – optional, to give the codec higher priority.Below is a safe, reversible workflow.
# Codec → Integer value
SBC = 0
AAC = 1
aptX = 2
aptX HD = 3
LDAC = 4
Note: Some devices swap values for aptX/LDAC; you can test by setting a value and checking the result in step 2.{CODE} with the integer from the table. For example, to force LDAC (value 4):
adb shell setprop persist.bluetooth.a2dp.codec 4
adb shell setprop persist.bluetooth.a2dp.codec.priority 1
adb shell service call bluetooth_manager 6
(The exact service call number may differ; toggling manually is reliable.)
dumpsys command from Step 2.
If the headset still reports SBC, double‑check that the device truly supports the target codec. You can also try a different integer value to see if the property is being read.
While ADB commands are accurate, a visual confirmation can be handy. Apps such as Bluetooth Codec Checker (available on the Play Store) display the current codec in real time. Install the app, open it while the headset is connected, and confirm that the displayed codec matches the one you forced.
If you ever want to let Android automatically select the best codec again, simply delete the custom properties:
adb shell setprop persist.bluetooth.a2dp.codec ""
adb shell setprop persist.bluetooth.a2dp.codec.priority ""
dumpsys query again to ensure the codec now reflects the automatic choice (often SBC unless a higher‑quality codec is negotiated).Because the properties are stored in the persist namespace, they survive a reboot. Deleting them restores the original, non‑persistent state.
2 for aptX, 3 for aptX HD, and 4 for LDAC one at a time, checking the result each time.setprop command after each toggle, or use a adb shell script that runs on boot (requires a small automation app like Tasker with ADB permission).If you cannot use a computer, there are still ways to influence codec selection:
android.bluetooth.BluetoothAdapter APIs. These apps require the WRITE_SECURE_SETTINGS permission, which is granted only on rooted devices, so they are not truly “no‑root”.adb shell dumpsys bluetooth_manager.dumpsys or a codec‑checker app.setprop values you used for future reference.Changing Bluetooth codec properties does not modify firmware, so it does not void warranties. However, an unsupported codec may cause temporary audio dropouts or increased battery drain. If you notice persistent issues, revert to the default settings using the steps in Step 6. Never use the setprop command to write arbitrary values to unrelated system properties, as that can destabilize the Bluetooth stack.
By following this guide you can take control of the Bluetooth audio codec on virtually any Android device without rooting. Whether you’re a hi‑fi enthusiast seeking LDAC’s 990 kbps bandwidth, a gamer who prefers low‑latency aptX, or simply want to verify that your phone isn’t stuck on the low‑quality SBC default, the combination of developer‑option UI, ADB commands, and simple verification tools gives you a reliable workflow.
Enjoy the richer sound, and remember that the same principles apply to future Bluetooth updates—just revisit the property values if Android introduces new codecs.









