2

我在 Android 技术领域工作了 1 年。目前我想在 Android 4.0.3 中开发一个应用程序来电自动应答,但在这个版本中我没有得到任何解决方案或找不到任何 api (ITelephony.aidl)。请给我建议。

4

3 回答 3

2

它的工作代码。首先使用Phone状态Broadcast Receiver找出它的来电。

    filter.addAction("android.intent.action.PHONE_STATE");
    mContext.registerReceiver(myCallReceiver, filter);

然后在 onReceive(Context context, Intent intent) 调用 answerPhoneHeadsethook() 函数。

private void answerPhoneHeadsethook(Context context) {
    // Simulate a press of the headset button to pick up the call
    Intent buttonDown = new Intent(Intent.ACTION_MEDIA_BUTTON);
    buttonDown.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(
            KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_HEADSETHOOK));
    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_HEADSETHOOK));
    context.sendOrderedBroadcast(buttonUp,
            "android.permission.CALL_PRIVILEGED");
}
于 2012-11-29T16:05:42.240 回答
0

为了接听或拒绝电话,需要 MODIFY_PHONE_STATE 权限。不幸的是,自 2.3 起,它仅适用于系统应用程序。(更多信息在这里

接听电话的解决方法(最初来自此处):

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);         
于 2012-07-30T13:46:36.703 回答
0

这适用于 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 上进行了测试。这仍然会给出一个已处理的异常。

于 2013-04-25T13:18:03.237 回答