Решил попробовать написать программку под сабж, которая сама бы отвечала на звонки при подключенной гарнитуре (знаю, что такие уже есть, но они не совсем меня устраивают). Долгим ковырянием в гугле выяснил, что единственный способ ответить на звонок программно — эмулировать нажатие кнопки на гарнитуре (ACTION_MEDIA_BUTTON + KEYCODE_HEADSETHOOK). В принципе, оно работает. То есть, на звонок отвечает.
Но тут всплыла другая проблема: по этой же кнопке запускается аудиоплеер. И прибить его не вижу пока никакой возможности. Пробовал задавать разные привилегии при эмуляции нажатия — все равно запускается, гад.
Видел где-то примеры с использованием внутренних классов телефонии (Phone и т.п.), но они, похоже, отсутствуют в 2.х.
Может, кто-нибудь знает, как с этим бороться, или предложит альтернативный способ ответа на входящий звонок?
После того, как написал, решил на дурака попробовать еще один финт. Дело в том, что плееру достаточно получить сообщение ACTION_DOWN, чтобы запуститься. А отвечалка у меня срабатывала только после ACTION_UP. Решил убрать ACTION_DOWN и, похоже, это решило проблему. Пробовал пока только в эмуляторе, но надеюсь, что и на железе это сработает.
И еще апдейт. Похоже, если полылать оба события (нажатие и отпускание) как ordered broadcast, то на эмуляторе плеер запускается, а на железе — нет. Странно, но помогает.