1

我的应用程序需要以编程方式接听来电(这是一个允许通过办公室拨号的企业电话应用程序)。直到 Android 4.4,我都在使用Headset Hook 方法

不幸的是,在 5.0 和 6.0 中,这似乎不再起作用了。我尝试过使用 KeyEvent.ACTION_DOWN 和 ACTION_UP,无论是否有 android.permission.CALL_PRIVILEGED 权限。我还尝试将 KeyEvent.KeyCODE_HEADSETHOOK 换成 KeyEvent.KEYCODE_CALL 无济于事,以及触发耳机插头。在我的 Nexus 6P 上没有任何动作。发送“input keyevent 79”也不做任何事情。

作为一个企业电话应用程序,它需要在各种无根设备上运行,因此呼叫服务以及任何需要 android.permission.MODIFY_PHONE_STATE 的设备都无法使用。

我知道这是可能的,因为我的手机上有另一个电话应用程序可以做到这一点,而无需任何特殊权限。

4

1 回答 1

1

我设法对一个应用程序进行了逆向工程。这是如何完成它..

请注意,该代码适用于 Xamarin,但我确信您可以将其恢复为 Java 格式;)

Instrumentation inst = new Instrumentation();
inst.SendKeySync(new KeyEvent(KeyEventActions.Down, Keycode.Headsethook));
inst.SendKeySync(new KeyEvent(KeyEventActions.Up, Keycode.Headsethook));

希望这可以帮助某人节省一些时间..

于 2016-06-14T13:24:07.507 回答