0

因此,正如主题所述,我需要能够在 HTC OneX 上的 Android 4.0.3 中以编程方式接听电话。我已经阅读了几个地方的MODIFY_PHONE_STATE许可已被谷歌撤销,所以要完成这项任务,你需要解决这个问题。

到目前为止,我已经研究了两种途径:

(1) 关注 Guy 的帖子使用 BroadcastReceiver

(2) 使用下面的代码尝试通过shell命令点击一个按键事件。

final Runtime r = Runtime.getRuntime();
    try {
        Process process = r.exec("input keyevent 5");
        InputStream stream = process.getErrorStream();
        log.v("Process Error Stream: " +stream.toString());
        log.v("Sending shell command to Answer Call");
    } catch (Exception e) {
        log.v("Stack Trace: " + e.getStackTrace().toString());
        e.printStackTrace();
    } 

我使用它是因为 keyevent 5 是根据 Google 的 KeyEvent.CALL 并且它在 adb 中使用

adb shell input keyevent 5

我的问题是,我做错了什么?因为从逻辑上讲,这两种方法都是有意义的,但它们都不起作用,甚至都不会产生任何类型的运行时错误。

干杯

4

3 回答 3

6

经过几天的研究,我发现同时使用广播接收器路由和runtime.exec()路由在 Android 4.0.3 中使用 Android API 根本不可能接听电话。

adb对于那些仍然想知道的人,我确实找到了一些有用的信息...您可以通过使用命令来接听电话adb shell input keyevent 55 是通话按钮的键码,在 Android 中它是KEYEVENT_CALL

于 2012-11-10T15:58:25.383 回答
4

这适用于 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-25T14:51:13.037 回答
1

这里有几个有用的链接,检查它们:

  1. 自动接听来电
  2. 如何以编程方式自动接听电话
  3. 自动应答
于 2012-10-09T18:22:50.273 回答