我正在尝试通过Android上的电话发送音频流。
例如,创建一个应用程序,可以播放一些自定义的暂停音乐,或接听电话并播放录音/音频文件。我知道可以让应用程序自动接听电话,但是它可以将音频发送给来电者吗?
如果有可能,请告诉我哪些课程/职能处理此问题。
答案 0 :(得分:16)
可以写入电话呼叫流 IS ,但不能从股票(非根)电话上的应用级别写入。
当启动电话呼叫时,麦克风“通常”(实际上取决于特定电话)直接路由到基带,即完全跳过主处理器。
对于传出音频:mic->编解码器 - >基带 对于传入音频:基带 - >编解码器 - >扬声器
如果始终路由:mic-> codec-> mainprocessor-> codec-> baseband
如果Android API(框架)支持访问它,那么该流将“大概”可用。
我之所以说这是可能的原因是因为音频(现在几乎所有智能手机都通过SlimBus连接)这样可以动态更改音频路径。然而,它通过生成在ALSA中的编解码器驱动程序在内核中完成。
所以....你是如此激励,你可以获得手机的Linux内核的源代码并修改编解码器/ ALSA驱动程序,以允许你改变设置呼叫音频路径时发生的事情。
当然,你会在新路径上产生延迟,打破呼叫/延迟标准AT& T设置(Audience帮助他们写...),基带芯片可能会拒绝你的音频,因为它不及时。
最后,您需要修改Android源代码(框架)以扩展API以支持将音频注入到该流中。 (你需要为mediaserver制作大型mod,尤其是audioflinger ......)
这很复杂,但有你的答案。干杯,: - )
答案 1 :(得分:0)
捕获远程子混音音频需要CAPTURE_AUDIO_OUTPUT权限。此权限保留供系统组件使用,不可用于第三方应用程序:(
答案 2 :(得分:0)
要获得音频数据是非常可能的,但要将音频写入上游频道,这是不可能的
答案 3 :(得分:0)
这必须可行,因为电话将允许蓝牙通过麦克风发送音频。
因为我需要解决这个问题,所以我有一个主意是从本质上向蓝牙发送一个“隐身”的蓝牙信号作为麦克风输入。
另一个想法(如果不好意思,很抱歉)是将扬声器换成麦克风。由于扬声器似乎可以使用所需的硬件,因此可能有一种方法可以注入音频数据流。
由于我对使用SDK进行Android编程尚不陌生,请原谅这篇文章的最初内容,随着我/我们的发现,我将进行更新。
答案 4 :(得分:0)
我知道apps已经向手机all
发送了earpiece
系统音频,甚至包括您在未经root或任何其他特殊许可的情况下在媒体播放器中播放的歌曲。
经过研究,我发现可以使用Audio Manager
类来完成。例如
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
audioManager.setSpeakerphoneOn(false);
为什么不将默认输出扬声器设置为设备听筒,然后使用MediaPlayer
类播放音频?
答案 5 :(得分:-3)
不能写入电话呼叫流,抱歉。