Невозможно использовать MediaRecorder на эмуляторе Android. Место хранения неверное?

Я пытаюсь записать звук с помощью эмулятора 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();
  }
}

person AlexAndro    schedule 31.10.2011    source источник


Ответы (1)


Попробуйте и посмотрите, работает ли это для Android 4.0. Я знаю, что у меня были некоторые проблемы с камерой в эмуляторе, в более ранней версии (ниже 4.0) он просто не распознавал веб-камеру моего ноутбука. Но когда я попробовал это на 4.0, когда AVD загружался, появилось всплывающее сообщение с вопросом, хочу ли я подключить веб-камеру к AVD, и как только я согласился, это сработало.

Другой постер в SO тоже задал этот вопрос о камере, и ему помогло изменение версии AVD на 4.0.

Возможно, то же самое и для записи звука, поскольку оба являются внешними устройствами для типичного ПК.

person Jong    schedule 31.10.2011
comment
спасибо, но мой эмулятор Android 4.0 не работает, не знаю почему, я обновил SDK, но при попытке запустить вылетает. Нужно ли обновлять Eclipse для работы с Android Emulator 4? - person AlexAndro; 01.11.2011
comment
Да, вам нужно обновить ADT. Перейдите в Eclipse, выберите меню «Справка» и выберите «Проверить наличие обновлений», затем обновите ADT. - person Jong; 01.11.2011
comment
SDK полностью обновлен, все функции Android 4.0 установлены, обновлений нет, но все еще ведет себя странно. Я все еще жду ответа от людей, чтобы узнать, что не так с местом хранения. Спасибо. - person AlexAndro; 01.11.2011
comment
Я купил новое устройство Nexus S, и приложение работает на нем. - person AlexAndro; 03.11.2011
comment
Что ты имеешь в виду? Сообщите подробности проблемы. - person Jong; 03.11.2011
comment
Проблема с поддержкой SDCard решилась, похоже мой эмулятор не всегда видит карту, Но как я уже сказал запустив приложение на реальном android-устройстве, Nexus S, работает нормально. - person AlexAndro; 09.11.2011