Так выше ответ не совсем правильно.
Ниже показано, как она ломается:
HAL, это аппаратный уровень абстракции, который реализует фактические состояния машины Bluetooth в с/CPP код, как таковой, он контролирует различные государственные машины для A2DP, HFP, ГАТТ , SPP, AVRCP и т. Д. Каждая из этих служб также ссылается на файлы SMP и ATT для управления фактическими базами данных Bluetooth или клиентов, а также безопасность.
HCI, где выполняется фактическая работа. HAL не действительно do что-нибудь, он собирает сложные сообщения данных, которые отправляются по последовательному каналу tty (либо spi, или UART) в межсетевой подключенный чип на PCBA с помощью методов, используемых в слое HCI, который можно найти в слое «BTE» в каталоге/external/bluetooth/bluedroid/для андроида, скомпилирующей магистраль от AOSP 4.2.2 до текущего. - В настоящее время существует несколько производителей этих чипов, но в основном это все компоненты на базе Broadcom, упакованные в двойной или тройной пакет радиосвязи, в котором есть беспроводной интернет, Bluetooth 4.0 Smart и Bluetooth 4.0.
Возможно сделать то, что вы пытаетесь сделать, но вам нужно будет включить hardware.so и bluetooth_jni.so в пакет/проект NDK/JNI, который идет с вашими приложениями, и регистрируется через вызовы от .cpp-файлы для каждой из служб Bluetooth, найденные в «Пакеты/приложения/Bluetooth/jni», вы затем обрабатывали бы регистрацию в вашей библиотеке NDK «com_android_bluetooth_a2dp.cpp» и «com_android_bluetooth_avrcp.cpp», как их правильно набрали объекты.
Другой вопрос, вам нужно будет реализовать свой собственный стек пользовательского A2DP, поскольку стек Android Bluedroid только имеют БИТ и штучные портретируемые, Sink роли, реализованную в рамках, а роль A2DP имеет полное осуществление Источник роль. Кроме того, в зависимости от того, что вы на самом деле собираетесь делать с вашей реализацией Sink для A2DP, вам также понадобится реализовать AVRCP - как в Bluetooth SIG (группа специальных интересов), между устройствами Bluetooth существуют требования к соединению, что приведет к серьезным проблемам если вы реализуете роль приемника, без AVRCP «целевого устройства дистанционного управления» и «устройства управления дистанционным управлением», поскольку роли ATT-роли ATX от Bluetooth через A2DP (или любой сервис/профиль Bluetooth) выполняют определенные рукопожатия во время процесса обнаружения службы, когда связанный с ним шлюз (соединительное устройство), выполняет запрос возможностей, по которому ожидается, что служба A2DP будет реализовывать возможности ввода-вывода для команд «Старт-стоп» и, возможно, команды пропустить/отслеживать.
В дополнение ко всему этому при реализации A2DP вам нужно будет выбрать, будете ли вы обрабатывать потоки PCM или потоки AAC. Если вы обрабатываете потоки AAC (или DRM-защищенные потоки PCM, если что-то вроде Pandora, spotify и т. Д.), Вам необходимо реализовать SBC-кодировщик или декодер, соответствующий вашей реализации, иначе все, что у вас будет, - это куча зашифрованных данных. Кроме того, убедитесь, что вы используете битрейт с соответствующей скоростью для реализации вашего устройства AudioManager, некоторые телефоны используют 48 000 Гц, а некоторые из нас - 44,100 Гц, это важно, если вы хотите высококачественное аудио, как правило, большинство реализаций PCM A2DP, использующих Surround Sound 7.1 + потребуется 48 000 Гц, а также кодирование/декодирование AAC.
Надеюсь, это даст вам некоторое представление.
Возможный дубликат [устройства Android в качестве приемника для профиля A2DP] (http://stackoverflow.com/questions/27763756/android-device-as-a-receiver-for-a2dp-profile) – virtualxtc