Как программно ответить на звонок? - PullRequest
7 голосов
/ 10 апреля 2010

Я хочу ответить на телефонный звонок. Я нашел намерение android.intent.action.ANSWER, но, похоже, единственный полученный мной эффект - это ActivityNotFoundException Зачем? Это осуждаемое намерение? Как я могу добиться ответа? Я также слышал о "технике Telnet". Что это?

Спасибо

Ответы [ 8 ]

6 голосов
/ 19 июня 2012

Вы также можете отправить вызов вызова для ответа на вызовы но устройство должно быть рутировано

отвечать на звонки:

try {
    Thread.sleep(800); 
    Process process = Runtime.getRuntime().exec(new String[]{ "su","-c","input keyevent 5"});
    process.waitFor();

}catch (Exception e) {
    e.printStackTrace();
}

Конечные звонки:

try {
    Thread.sleep(800); 
    Process process = Runtime.getRuntime().exec(new String[]{ "su","-c","input keyevent 6"});
    process.waitFor();

}catch (Exception e) {
    e.printStackTrace();
}
4 голосов
/ 10 апреля 2010

Это невозможно, проверьте эту ветку для получения дополнительной информации.

3 голосов
/ 23 июня 2011

Можно ответить на входящий телефонный звонок. Проверьте это: здесь

2 голосов
/ 26 апреля 2013

Это работает с Android 2.2 до 4.0, и теперь, после добавления try catch к последней строке, оно работает для 4.1.2 и 4.2 Честно говоря, не знаю, как это работает, но оно работает для меня.* Это работает для меня в Android 4.1.2, а также я тестировал на 4.2 Это все еще дает исключение, которое обрабатывается.

2 голосов
/ 02 июня 2010

это событие не работает. Вы должны использовать:

Intent i = new Intent(Intent.ACTION_MEDIA_BUTTON);
KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_HEADSETHOOK);
i.putExtra(Intent.EXTRA_KEY_EVENT, event );
context.sendOrderedBroadcast(i, null);

, имитирующие поведение нажатой клавиши.

1 голос
/ 18 октября 2012

Подход, используемый при моделировании трубки BT, не работает со всеми версиями Android и со всеми устройствами, так как обработка BT может отличаться.

Наилучший подход, проверенный во многих устройствах и версиях Android, заключается в эмуляции нажатия и отпускания кнопки вызова в программе набора номера:

Intent buttonDown = new Intent(Intent.ACTION_MEDIA_BUTTON);
buttonDown.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN,
KeyEvent.KEYCODE_CALL));
context.sendOrderedBroadcast(buttonDown, "android.permission.CALL_PRIVILEGED");

// froyo and beyond trigger on buttonUp instead of buttonDown
Intent buttonUp = new Intent(Intent.ACTION_MEDIA_BUTTON);
buttonUp.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP,
KeyEvent.KEYCODE_CALL));
context.sendOrderedBroadcast(buttonUp, "android.permission.CALL_PRIVILEGED"); 

Вы также можете сделать это, отправив команду Shell «input keyevent 5» через adb или через Runtime.exec, но в моем случае это не работает для всех устройств

0 голосов
/ 16 сентября 2016
try {
Runtime.getRuntime().exec("input keyevent"+Integer.toString(KeyEvent.KEYCODE_HEADSETHOOK));
} catch (IOException e) {
   //handle error here
}
0 голосов
/ 16 апреля 2012

Цель ответа должна быть отправлена ​​на InCallScreen.

adb shell am start -n com.android.phone/.InCallScreen -a android.intent.action.ANSWER
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...