我创建了示例项目并想检查是否可以读取声音幅度。到目前为止,我已经从主要活动开始提供服务,在服务类中,我已经放了一些代码来读取声音幅度。根据教程它应该有用,但不知道为什么不工作。这是代码
public class MyService extends Service {
int sampleRate = 8000;
AudioRecord audioRecord;
int bufferSize;
double lastLevel;
@Override
public void onCreate() {
super.onCreate();
Log.d("TAG", "oncreate called of service");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d("TAG", "oncDestroy called of service");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d("TAG", "onstart command called of service");
try {
bufferSize = AudioRecord
.getMinBufferSize(sampleRate, AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT);
audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
sampleRate, AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT, bufferSize);
} catch (Exception e) {
android.util.Log.e("TrackingFlow", "Exception", e);
}
audioRecord.startRecording();
if (lastLevel > 0 && lastLevel <= 50) {
Log.d("TAG", "lastlevel is less then 50");
} else if (lastLevel > 50 && lastLevel <= 100) {
Log.d("TAG", "lastlevel is less then/equal 100");
} else if (lastLevel > 100 && lastLevel <= 170) {
Log.d("TAG", "lastlevel is less then/= 170");
}
if (lastLevel > 170) {
Log.d("TAG", "lastlevel is greater then 170");
}
return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent arg0) {
return null;
}
}
Here是教程链接。我也不熟悉服务,我希望我的服务类完全按照应有的方式。我能够第一次听到声音,但是在言语之后,声音的其余部分是无意义的。我的服务类不正确吗?或者我无法弄清楚audioRecorder的一些错误。我第一次工作时也已经弄清了它,但之后就没用了。