我正在尝试创建一个安卓应用程序,在该应用程序中过滤掉一种特定频率的蜂鸣声并使手机振动。
我从手机的MIC中获取输入,并使用MediaRecorder类,通过使用这个类,我可以记录、保存和播放输入。现在我需要我的手机在有蜂鸣声或任何声音时进行震动。
输入是通过线缆连接到手机的耳机插孔,所以我知道只有一个频率被输入。
我有一个按钮,点击它会开始录制。我的清单文件已经具有振动和录制权限。
record.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
isRecording=true;
myAudioRecorder.prepare();
myAudioRecorder.start();
...
}
我尝试在互联网上搜索,并发现了类似的问题在这里,但我无法找到任何正确的答案。
然而,我可以通过点击另一个按钮使手机振动,以下是代码片段:
Vibrator vibrate;
vibrate = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
Btn1.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
vibrate.vibrate(800);
}
}
我尝试在`recorder.start()`函数中调用振动器,但即使没有声音,这也会使手机振动。 我还试图从这个问题寻求帮助,因此当没有声音时,手机不应该振动,但我感到困惑,我有点理解应该有一个布尔值,在有声音时变为true并使手机振动,但我无法将这种逻辑放入代码中。请告诉我在这种情况下我该怎么做以及我应该朝哪个方向搜索?
更新:我找到了这个用于显示输入声音幅度的进度条的教程,它可以正常工作,并且我尝试让手机在缓冲区中有一些值时振动,现在它甚至在幅度为零时也会振动,我猜这是因为每次振动都会发出噪音,导致手机振动。 由于`java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()`,我无法通过TOAST检查该函数。是否有任何建议?