程序化地在没有根目录或系统应用程序的情况下接听来电铃声/棉花糖

问题描述:

我的应用程序需要以编程方式接听来电(这是一个允许通过办公室拨号的企业电话应用程序)。 直到Android 4.4,我使用的是Headset Hook method程序化地在没有根目录或系统应用程序的情况下接听来电铃声/棉花糖

不幸的是,在5.0和6.0中似乎不再有效。我尝试过试验KeyEvent.ACTION_DOWN和ACTION_UP,没有和没有android.permission.CALL_PRIVILEGED权限。我也尝试换用KeyEvent.KEYCODE_CALL的KeyEvent.KeyCODE_HEADSETHOOK来无效,并且触发耳机插头。所有这一切都没有在我的Nexus 6P上移动。发送“输入keyevent 79”也不会做任何事情。

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

我知道这是可能的,因为我的手机上有另一个电话应用程序,可以在不需要任何特殊许可的情况下执行此操作。

我设法对其工作的应用程序进行逆向工程。以下是如何把它做..

注意,代码是Xamarin,但我敢肯定,你可以把它带回的Java格式)

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

希望这会帮助别人节省一些时间。 。