我们可以使用Android NDK访问我的Android手机的麦克风驱动程序吗?如果有,那我该怎么办?
我可以将驱动程序设置为禁用一段时间吗?
我可以检测使用手机麦克风的手机的应用程序名称吗?
根据Android多媒体框架,MediaServer负责打开设备,基于Java的音频应用程序将其作为客户端连接.数据传输发生在Binder上.因此,只有一个进程可以打开音频设备.现在我想知道如何从MediaServer获取信息?任何人都知道这个或任何其他想法,找到哪个应用程序正在使用我的手机麦克风,我不能使用root权限.
从您通过startActivityForResult()调用它之前,Google语音搜索会显着延迟,直到显示其对话框,准备好发表演讲.
这要求用户在说话之前始终查看屏幕,等待显示对话框.
所以我想通过实现RecognitionListener并在onReadyForSpeech()中发出DTMF音来生成声音信号而不是对话框,如下面的代码片段所示:
@Override
public void onReadyForSpeech(Bundle params) {
Log.d(LCTAG, "Called when the endpointer is ready for the user to start speaking.");
mToneGenerator.startTone(ToneGenerator.TONE_DTMF_1);
try {
Thread.sleep(50);
} catch (InterruptedException e) {
Log.e(LCTAG, "InterruptedException while in Thread.sleep(50).");
e.printStackTrace();
} // SystemClock.sleep(50);
mToneGenerator.stopTone();
}
Run Code Online (Sandbox Code Playgroud)
音调听起来很漂亮但是......它也被麦克风"听到",到达语音识别服务并始终产生识别错误ERROR_NO_MATCH.
有办法解决这个问题吗?
我在这里找不到任何相关的帖子(但是互联网上的其他小帖子),所以这里是:
AudioManager.setMicrophoneMute(boolean)在我测试的某些特定设备上没有做任何事情:谷歌Nexus S,三星Galaxy S和摩托罗拉Milestone.在任何其他设备上它运作良好.
它甚至保持其"状态"并返回一个布尔值,好像它被静音\取消静音,但它没有静音 - 麦克风继续记录 - 在GSM通话和AudioRecord编程录音中.没有指示性日志消息.
我也搞乱了权限(android.permission.MODIFY_AUDIO_SETTINGS,android.permission.RECORD_AUDIO),这里没什么新东西.
还有其他人遇到过吗?有没有人有解决方法或神奇的解决方案?如果我使用AudioRecord,我只是为这些设备实现自己的"静音" - 我不会传递录制的缓冲区.但它无法帮助我在GSM呼叫中静音麦克风,这是我需要的.
谢谢
----------------更新----------------
见下文.