【发布时间】:2016-02-22 13:28:20
【问题描述】:
我正在尝试创建一个 android 应用程序,在其中过滤一个特定频率的哔哔声并让手机振动。
我从手机的 MIC 中获取输入并使用 MediaRecorder 类,通过使用这个类,我可以记录、保存和播放输入。现在我需要我的手机在发出哔哔声/或任何声音时振动。
输入是通过一根电线连接到手机的耳机插孔,所以我知道只有一个频率在输入。
我有一个按钮,点击它开始录制。 我已经在我的清单文件中获得了振动和录音的权限。
record.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
isRecording=true;
myAudioRecorder.prepare();
myAudioRecorder.start();
...
}
我也尝试在互联网上搜索并找到类似的问题here,但我找不到任何正确答案。
但是,我可以让手机在单击另一个按钮时振动,这是代码片段,
Vibrator vibrate;
vibrate = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
Btn1.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
vibrate.vibrate(800);
}
}
我尝试在 recorder.start(); 中调用 Vibrator;功能,但这会使手机即使在没有声音的情况下也会振动。 我也尝试从this question 获得帮助,所以每当有静音时,手机不应该振动,但我很困惑,我不知何故明白应该有一个布尔值,当有声音并让手机振动时,它会变为真,但是我无法将此逻辑放入代码中。 请让我知道在这种情况下我可以做什么以及我应该朝哪个方向搜索?
更新 我发现this toturial 用于显示带有输入声音幅度的进度条,它工作正常,我试图让手机在缓冲区中有一些值时振动,现在即使幅度为零它也会振动,我猜那是因为事实上,每次振动都会产生噪音,从而导致手机振动。我无法通过 TOAST 检查函数,因为 java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()。有什么建议吗?
【问题讨论】:
标签: android audio mediarecorder vibration android-vibration