Я пытаюсь записать звук с помощью эмулятора Android. Я знаю, что этот вопрос популярен в Интернете, я проверил много сообщений, кажется, что это удалось только одному человеку: Может ли эмулятор Android записывать и воспроизводить звук с помощью оборудования ПК?. (кажется, он использовал
Файл fTmFile; вместо String fTmpFile;
что я тоже пробовал). И следуя совету Филиппа и руководству на официальном сайте http://developer.android.com/guide/topics/media/audio-capture.html, а также другие ресурсы, я пока не могу записать. Мое приложение выдает исключение в строке:
fMediaRecorder.prepare();
точнее, это то, что я сначала получаю:
W/System.err(1042): java.io.FileNotFoundException: /mnt/sdcard/audiorecordtest.3gp (отказано в доступе)
что заставляет меня думать, что что-то не так с местом хранения, потому что даже я добавил свойство «Поддержка SD-карты» для эмулятора размером 256 МБ, я не могу получить к нему доступ, кроме того, я вижу в эмуляторе сообщение: " В вашем телефоне не вставлена SD-карта», когда я захожу в «Музыку».
Я добавил разрешения на аудиозапись и внешнее хранилище в AndroidManifest.xml и аппаратные настройки аудио (запись + воспроизведение) в эмулятор 2.3.3 на Win 7. Что-то не так в моем приложении, способ хранения файла или что-то еще? ? Пожалуйста, если у кого-то есть какие-либо идеи, не стесняйтесь поделиться, это будет оценено.
Вот полный исходный код:
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();
}
}