2013-07-16 5 views
1

Я новичок в разработке устройств Bluetooth. Мой текущий проект нуждается в функции использования Bluetooth-гарнитуры для онлайн-чата. Когда пользователь хочет начать разговор, он должен нажать кнопку вызова один раз (одна кнопка на гарнитуре Bluetooth). Но, похоже, что объект BroadcastReceiver, который я создал, не мог получать какие-либо трансляции, когда я нажимаю кнопки на гарнитуре. Далее, как я инициализирован BroadcastReceiver:Не удается получить трансляцию с Bluetooth-гарнитуры

IntentFilter filter = new IntentFilter(BluetoothHeadset.ACTION_VENDOR_SPECIFIC_HEADSET_EVENT); 
BroadcastReceiver event_Receiver = new BroadcastReceiver(){String cmd=intent.getStringExtra(BluetoothHeadset.EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD);}; 
registerReceiver(event_Receiver, filter); 

однако, можно получить состояние соединения вещания путем установки IntentFilter с AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED.

Я прочитал несколько сообщений, в которых упоминается, что константа ACTION_VENDOR_SPECIFIC_HEADSET_EVENT не работает в Jelly Bean. Тогда вы, ребята, знаете другие способы захвата события нажатия кнопки с Bluetooth-гарнитуры?

UPDATE: Я прочитал исходный код приложения телефона с сайта source.google.com. В пакете com.android.phone.BluetoothHandsfree, я узнал этот метод: broadcastVendorSpecificEventIntent(). поэтому система транслирует намерение команды AT. но в моем приложении я все еще не могу получить такой вид трансляции, я предполагаю, что системный ресивер потребляет широковещательную передачу, которая отправляется объектом BLuetoothHandsfree. кто знает, как установить более высокий приоритет, чем системный ресивер, чтобы получить такой вид трансляции?

Кстати, я попробовал метод setPriority() в классе IntentFilter, установив Integer.Max_Value, однако это не сработало.

ответ

0

Мне пришлось добавить категорию для поставщика.

https://stackoverflow.com/a/31732154/2751981

Это, как я получил ACTION_VENDOR_SPECIFIC_HEADSET_EVENT работать должным образом.

+1

Хотя эта ссылка может ответить на вопрос, лучше включить основные части ответа здесь и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. –

+1

Ну, существенная часть - это добавить категорию для поставщика, но что касается кода. 'Filter.addCategory ("" BluetoothHeadset.VENDOR_SPECIFIC_HEADSET_EVENT_COMPANY_ID_CATEGORY + BluetoothAssignedNumbers.PLANTRONICS);' – francis