问题描述
Hej,我目前正在尝试让 AudioRecord 工作.因为我在一个更大的项目中需要它.但是好像乱七八糟的.我一直在尝试很多东西,所以当我追踪这个错误时,我回到了基本.我使用我的三星 Galaxy S 作为我的调试设备.
Hej, im currently trying to get AudioRecord to work. Because I need it in a bigger project. But it seems to mess up a lot.I have been trying alot of things, so I went back to basic when I traced this bug.I am using my Samsung Galaxy S as my debugdevice.
我的问题是,第一次在我的设备重启后,我可以毫无问题地初始化我创建的 AudioRecord 对象.但是第二次运行它时,它不会初始化 AudioRecord 对象.我试过几个频率,仅供参考.
My problem is, first time after a reboot of my device I can initialize the AudioRecord object I create without problems.But the second time I run it, it won't initialize the AudioRecord object.I have tried several frequencies, fyi.
这是我的代码:
package android.audiorecordtest;
import android.app.Activity;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class AudioRecordTest extends Activity {
int frequency;
AudioRecord audRec;
TextView txtVw;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
txtVw = (TextView) findViewById(R.id.txtVw);
frequency=8000;
int bufferSize=(AudioRecord.getMinBufferSize(frequency, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT))*2;
if (bufferSize>0) {
audRec = new AudioRecord(MediaRecorder.AudioSource.MIC, frequency, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize);
int status = audRec.getState();
if (status == AudioRecord.STATE_INITIALIZED) {
txtVw.setText("Initialized" + frequency);
} else {
txtVw.setText("Not Initialized i=" + frequency);
}
}
在查看 logcat 信息几个小时后,我发现了这个事件
After a few hours of looking through logcat information i found this event
02-28 10:46:37.048: DEBUG/dalvikvm(4477): GC_EXPLICIT freed 1801 objects / 98944 bytes in 97ms
02-28 10:46:37.048: VERBOSE/AudioRecord(4477): stop
这似乎释放了对 AudioRecord 的本地保留.所以我尝试用我的 Audiorecord object.release() 覆盖 finalize.但这不起作用..有人知道吗?
Which seems to "release the native hold on the AudioRecord.So i tried doing an override of finalize with my Audiorecord object.release(). This didnt work though.. Anyone have any idea?
推荐答案
我能够重现您的问题(在三星手机上).我添加了一个释放记录的 onDestroy() 方法:
I was able to reproduce your problem (on a Samsung phone). I added an onDestroy() method releasing the record:
@Override
public void onDestroy() {
super.onDestroy();
System.out.println("OnDestroy");
audRec.release();
}
添加此项后,每次活动启动时,audioRecord 似乎都会正确初始化.
After adding this, the audioRecord seems to initialize correctly every time the activity is started.
这篇关于Android AudioRecord - 不会初始化第二次的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!