【发布时间】:2011-11-01 20:48:35
【问题描述】:
我正在尝试使用 Android 模拟器录制声音。我知道这个问题在网上很流行,我查了很多帖子,似乎只有一个人成功了:Can the Android emulator record and play back audio using pc hardware?。 (它认为他使用了
文件 fTmFile;而不是字符串 fTmpFile;
我也试过了)。并且按照 Philip 的建议和官方网站教程http://developer.android.com/guide/topics/media/audio-capture.html 以及其他资源,我仍然无法记录。我的应用程序在以下行抛出异常:
fMediaRecorder.prepare();
更确切地说,这是我第一次得到的:
W/System.err(1042): java.io.FileNotFoundException: /mnt/sdcard/audiorecordtest.3gp(权限被拒绝)
这让我觉得存储位置有问题,因为即使我为大小为 256 MiB 的模拟器添加了“SD 卡支持”属性,我也无法访问它,而且我可以在模拟器中看到当我转到音乐时,消息:“您的手机没有插入 SD 卡”。
我在 AndroidManifest.xml 中添加了音频记录和外部存储权限,并在 Win 7 上的模拟器 2.3.3 中添加了音频(记录+播放)硬件设置。我的应用程序中有什么问题,我存储文件的方式或者是其他东西?请,如果有人有任何想法,请随时分享,将不胜感激。
这里是完整的源代码:
import java.io.File;
import java.io.FileDescriptor;
import java.io.IOException;
import android.app.Activity;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class RecordSoundActivity extends Activity {
private MediaRecorder fMediaRecorder = null;
private Button btnrecord;
private Button btnstop;
String fTmpFile;
public RecordSoundActivity() {
fTmpFile = Environment.getExternalStorageDirectory().getPath();
fTmpFile += "/audiorecordtest.3gp";
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnrecord = (Button) findViewById(R.id.button1);
btnstop = (Button) findViewById(R.id.button2);
btnrecord.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(RecordSoundActivity.this, "Recording...", Toast.LENGTH_LONG).show();
Recording();
}
});
btnstop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
fMediaRecorder.stop();
fMediaRecorder.release();
}
});
}
public void Recording() {
fMediaRecorder = new MediaRecorder();
fMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
fMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
fMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
fMediaRecorder.setAudioChannels(1);
fMediaRecorder.setAudioSamplingRate(8000);
fMediaRecorder.setOutputFile(fTmpFile);
try {
fMediaRecorder.prepare();
} catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
}
try {
fMediaRecorder.start();
} catch (IllegalStateException e) {
// TODO: handle exception
e.printStackTrace();
}
//fMediaRecorder.stop();
//fMediaRecorder.release();
}
}
【问题讨论】:
标签: android android-emulator mediarecorder