Ответ 1
Прием вызова через Bluetooth-гарнитуру
Добавив свой ответ оттуда и сюда.
Эти события обрабатываются внутри устройства HeadsetStateMachine (в пакетах/приложениях/Bluetooth).
Эти события отправляются на интерфейс IBluetoothHeadsetPhone. Единственное приложение, которому переадресовываются все события, определяется во время выполнения, используя следующий код привязки в HeadsetStateMachine.java. Это позволяет производителям телефонов пересылать их в обычное телефонное приложение, а не по умолчанию, в случае, если по умолчанию он не используется.
Intent intent = new Intent(IBluetoothHeadsetPhone.class.getName());
intent.setComponent(intent.resolveSystemService(context.getPackageManager(), 0));
if (intent.getComponent() == null || !context.bindService(intent, mConnection, 0)) {
Log.e(TAG, "Could not bind to Bluetooth Headset Phone Service");
}
Чтобы события пересылались в ваше приложение вместо стандартного телефонного приложения, вам придется изменить код ASP. Вам нужно будет перехватить события в одном из профайлов HeadsetStateMachine, BluetoothHeadsetPhone или в приложении телефона.
К сожалению, то, что вы ищете, в настоящее время невозможно без изменения кода ASP. Некоторые гарнитуры, такие как Plantronics, имеют пользовательские события BT, которые перенаправляются во все приложения - некоторые из существующих VoIP-приложений поддерживают эти пользовательские намерения для поддержки, как минимум, для вызовов некоторых гарнитур.