如何以编程方式接听电话?

时间:2010-04-09 20:10:33

标签: android android-intent

我想接听电话。我找到了意图android.intent.action.ANSWER,但似乎我获得的唯一效果是ActivityNotFoundException。为什么?这是一个弃用的意图吗?我怎样才能达到答案?我也听说过“telnet技术”。那是什么?

由于

8 个答案:

答案 0 :(得分:6)

你也可以发送呼叫密钥转发来接听电话 但设备需要植根

接听电话:

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();
}

答案 1 :(得分:4)

这是不可能的,请查看this主题以获取更多信息。

答案 2 :(得分:3)

可以接听来电。看看这个:here

答案 3 :(得分:2)

此事件不起作用。 你应该使用:

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);

模仿按键的行为。

答案 4 :(得分:2)

这适用于Android 2.2到4.0,现在将try catch添加到最后一行后,它适用于4.1.2和4.2坦率地说不知道它是如何工作的,但它对我有用。

    Log.d(tag, "InSecond Method Ans Call");
    // 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_HEADSETHOOK));
    sendOrderedBroadcast(buttonUp, "android.permission.CALL_PRIVILEGED");

    Intent headSetUnPluggedintent = new Intent(Intent.ACTION_HEADSET_PLUG);
    headSetUnPluggedintent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
    headSetUnPluggedintent.putExtra("state", 0);
    headSetUnPluggedintent.putExtra("name", "Headset");
    try {
        sendOrderedBroadcast(headSetUnPluggedintent, null);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

这对我在Android 4.1.2中工作以及我在4.2上测试过 这仍然是一个处理的例外。

答案 5 :(得分:1)

模拟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"); 

你也可以通过adb或Runtime.exec发送Shell命令“input keyevent 5”来做到这一点,但在我的情况下并不适用于所有设备

答案 6 :(得分:0)

应将答案意图发送到InCallScreen。

adb shell am start -n com.android.phone/.InCallScreen -a android.intent.action.ANSWER

答案 7 :(得分:0)

try {
Runtime.getRuntime().exec("input keyevent"+Integer.toString(KeyEvent.KEYCODE_HEADSETHOOK));
} catch (IOException e) {
   //handle error here
}