Howto disable A2DP on the iPhone


UPDATE [October 4, 2009]: I have created a utility that prevents the manual labour and can be installed via Cydia.

UPDATE [August 20, 2009]: The previous post described a method that didn’t work well. Shawn Porter pointed out the problem, so I have updated the post and now it works fine.

I have an iPhone 3G and use it in my car as a music player. I have installed an GROM audio adapter for the iPhone, so I can connect it to my Mazda 6 car stereo. The GROM adapter even allows to use the controls on the steering wheel. Everything worked just fine, until iPhone OS 3.0 came along.

iPhone OS 3.0 includes support for A2DP, which is capable of stream audio via BlueTooth to another device. Unfortunately, there is no way to disable A2DP and it will always select the A2DP source when it is available. You can switch back to the dock connector, but you need to do this each time you start your car.

Apple should make an option to select which BlueTooth profiles should be enabled for a certain connection, but this is not possible with the current firmware. I decided to jailbreak my iPhone and try to find a solution.

The interesting directory is /var/mobile/Library/Preferences, where the iPhone stores the BlueTooth settings. These settings are stored in the PLIST format, so you need a PLIST editor (Mac or PC) or you need to convert them by hand. Transfer the com.apple.MobileBluetooth.services.plist to your computer (refer to Simon’s blog to find out how to do this). You can also use iFile to edit the file on your iPhone directly (thanks to Richard van den Berg for pointing it out).

Open the com.apple.MobileBluetooth.services.plist in your PLIST editor and make sure you edit the A2DPService section and store the devices you don’t want to use A2DP in the UnauthorizeList (without the letter “d”). This dictionary will probably not exist yet, so you need to add it by hand. You need to know the MAC address, but it is probably listed already in this file.

<key>A2DPService</key>
<dict>
  <key>State</key>
  <true/>
  <key>UnauthorizeList</key>
  <dict>
    <key>00:10:60:D0:91:D0</key>        <!-- This is the MAC address -->
    <date>2009-08-08T01:00:00Z</date>   <!-- Timestamp -->
  </dict>
</dict>

Transfer the PLIST file back to your iPhone and reboot the device. Once it gets back on, then the A2DP service should be disabled.

, ,

  1. #1 by scott on August 22, 2009 - 23:14

    This didn’t work for me so I must have done something wrong.

    What MAC address is entered there? I assume you would want to add the stereo’s MAC address and not the phone’s. I am not sure what I added since I just cut and paste from a MAC listed in the file as you mention above. Can you let me know what devices’ MAC should go there?

    I assume the timestamp doesn’t matter. Please let me know if this is not the case.

    Ultimately I was expecting that even if I wanted to stream music over bluetooth, that the mod above would prevent me from doing so. I am still able to stream over bluetooth (and the phone still defaults to this) so I don’t think I did it correctly.

    I used iFile to directly edit the file, and then I rebooted.

  2. #2 by Ramon on August 22, 2009 - 23:29

    It is the MAC address of your stereo. If you just copied my MAC address, then you told your phone that my carkit should never use A2DP with your phone. I guess that won’t happen anyway :) . The MAC address is listed in the other sections too if your stereo is also supporting handsfree operation. Make sure you use that address.

    I downloaded the PLIST file to my computer and renamed the ‘DeviceHistory’ key to ‘UnauthorizeList’. This method makes sure you don’t have any typing errors and you have a correct timestamp (if it is used at all). If you can’t get it to work, then please send me your PLIST file via email (mail [at] ramondeklein [dot] nl). Maybe I can take a look at what’s wrong.

  3. #3 by scott on August 22, 2009 - 23:38

    Sorry, I didn’t mean I copied your MAC. I copied one already in my file. :)

    Ok, now I just need to figure out how to find the MAC address of the Ford Sync system I have. Thanks for the help! Will let you know how it goes.

  4. #4 by Ramon on August 23, 2009 - 00:03

    If your Ford system connected to your phone, then the settings should be in the A2DP service’s devicelist.

  5. #5 by scott on August 23, 2009 - 00:14

    Yup, I got it from there and as it turns out I grabbed the correct MAC. But it didn’t work. I am still debugging.

    Curiously I thought I could edit the com.apple.MobileBluetooth.devices.plist instead. Under the A2DP section for Sync I changed the value to unsupported. This didn’t work either. Weird. Anyway, I will continue to debug.

  6. #6 by Ramon on August 23, 2009 - 00:17

    The com.apple.MobileBluetooth.devices.plist file is updated each time your phone reconnects. I tried to disable A2DP there too, but it failed.

    Btw… I restarted my iPhone after unauthorizing the carkit. Did you do this as well?

  7. #7 by scott on August 23, 2009 - 02:53

    Cool it works now. I am not sure but I think I just had a typo initially. I am thinking I typed “UnauthorizedList” instead of “UnauthorizeList”. (had an extra “d” in there).

    Thanks for this cool tip!

  8. #8 by end on August 25, 2009 - 12:08

    This works great, thanks for following up with me Ramon!

  9. #9 by Tomasz on August 27, 2009 - 05:11

    I tried to use your mod with iPhone and Dension BT1500(add on to Gateway 500), which has both A2DP and handsfree functions.
    Unfortunately, it disables both A2DP and phone functionality. After the mod the phone just stops connecting, and I have to pair again.

  10. #10 by Ramon on August 27, 2009 - 07:35

    @Tomasz: Maybe your carkit is confused that A2DP is gone. You might try to pair your phone again.

  11. #11 by Mbln on August 28, 2009 - 11:21

    end :
    This works great, thanks for following up with me Ramon!

    works indeed great. Just what I needed. Now we wait for Cydia. May be they will devellop a toggle.

  12. #12 by scott on August 30, 2009 - 07:24

    Actually while this does prevent the iPhone from automatically starting, I have now an equally annoying problem.

    If I do not plug in my iPhone to the USB, start my car, and then turn it off, it immediately fires up a random song on the iPhone.

    If I plug my phone into the USB, start my car, turn it off, then everything is fine.

    I really wish I could figure this out. I even changed the services.plist file so that A2DP was Unsupported for Sync. I marked the file read only, but the iphone is still able to overwrite this file. I can’t figure out how to stop this behavior.

    So while this method does cure the problem of streaming over bluetooth, it seems to have created another issue where my iPhone fires up music as soon as I turn my car off.

  13. #13 by Ray on September 1, 2009 - 05:03

    Ramon, you are AMAZING :-)

    I’ve been searching to disable the A2DP on my iPhone 3Gs for my Jabra BT8040. The instruction is very easy. And it works on the first try.

    THANK YOU SO MUCH!

  14. #14 by Michael on September 8, 2009 - 05:35

    While this trick may work for some devices, it will wreak havoc with the Ford Sync system, which is what I really wanted it for. My 2010 Fusion and iPhone 3.0 don’t really get along very well, but this made it much worse.

    After applying this hack, it is true that AD2P audio does not work and that no audio will come through the car’s stereo system. However, it will trigger the device to start playing through its built in speakers instead… but not when it’s connected to “Bluetooth Audio Source” … it will trigger the iPod functions to start playing music when using AM/FM/Sirius radio, or when using voice commands.

    I guess if you’re willing to live with having your iPhone randomly playing music in your pocket, then it works OK. I was really excited that this would solve my issues, but it did not, it just created more.

    What iPhone 3.1+ needs is a built in ability to prevent Bluetooth devices from accessing iPod functionality. Turn it on by default for those who won’t really care, but make it easily accessible for everyone else. It would make a lot of frustrations for a lot of people go away very quickly.

  15. #15 by Ramon on September 8, 2009 - 08:05

    I agree that iPhone 3.1 should have such an option, but we won’t know until it will be released. You could check the beta versions for this switch, but I haven’t heard about it, so I guess it won’t be there.

    I haven’t tested this hack with a lot of devices. It works for my Parrot carkit, so I was happy. I cannot do any further testing, because my iPhone broke down. :(

    Don’t worry. It fell on a concrete floor. It has nothing to do with this hack :)

  16. #16 by NONO on October 6, 2009 - 08:44

    Ramon, your program (Bluetooth Profile Selector), would enable the RSAP (Remote sim access profile)?

    [MODBREAK] Please leave your comments about Bluetooth Profile Selector here.

  17. #17 by Ramon on October 6, 2009 - 12:05

    @Michael: Try my new Bluetooth Profile Selector (available through Cydia) and disable the Remote profile. Maybe this will help you…

  18. #18 by Lucy on November 21, 2009 - 02:29

    Hey! i am trying to disable the a2dp on my iphone and i followed the instructions but i am getting an error message. I am using iFile. Am i suppose to replace what is written under A2DP Service with what you have posted?

  19. #19 by Ramon on November 29, 2009 - 14:48

    Lucy :

    Hey! i am trying to disable the a2dp on my iphone and i followed the instructions but i am getting an error message. I am using iFile. Am i suppose to replace what is written under A2DP Service with what you have posted?

    Use the BlueTooth Profile selector that I have created. It is much easier to use. If you don’t like the additional icon on your springboard, then you can remove the program after you disabled A2DP.

  20. #20 by Brian on December 21, 2009 - 17:45

    Wow! Thanks for this tutorial. This thing was driving me so crazy in my car that I had to jailbreak my iphone today. Luckily, jailbreaking is easy and adding this was just as easy. Got done in about 15 minutes and now bluetooth audio is disabled in my car. Now when I plug my Iphone into my car, I just have to tell it to go to USB and it starts working right away. Very nice. I will have to see if there is some kind of sync setting to default to USB automatically when something is plugged into it.

    Thanks again!

  21. #21 by Jake Savin on April 1, 2010 - 11:34

    Thank you, thank you! I’ve been searching for days for this. Apple should have implemented these options themselves, but I guess they’re worried about user confusion. :-\

    I’m not beyond editing plists myself by hand, but your app makes it super easy.

    Thanks again!

  22. #22 by marc on June 29, 2010 - 02:17

    Hi,

    Thanks for the utility I have been using it for month, happily.
    but I now updated my phone to iOS4 (iPhone 3G), and while the utility still appear to work fine, my car keeps trying to connect to the A2DP, even when it is disabled in your utility.
    Any idea of what was changed with iOS4 ?

    thanks

    marc

  23. #23 by Paul Napran on August 22, 2010 - 21:39

    After upgrading to iOS4 I too ran into the same problem as everyone else apparently. The Bluetooth Profile Selector no longer functions as it did is iOS3. Is there going to be an update to fix this as it is a real pain in the tail with my Alpine car stereo as it always takes the A2DP instead of the speaker. Drives me nuts and no one will fix this problem. Apple should at least provide a way to disable A2DP in the Bluetooth settings.

(will not be published)