【问题标题】:Can not use MediaRecorder on Android Emulator. Is the storage location wrong?无法在 Android 模拟器上使用 MediaRecorder。存储位置是否错误?
【发布时间】: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


    【解决方案1】:

    试试看它是否适用于 Android 4.0。我知道我在模拟器中的摄像头有一些问题,在较低版本(低于 4.0)中,它无法识别我的笔记本电脑网络摄像头。但是当我在 4.0 上尝试它时,当 AVD 正在加载一个弹出消息并询问我是否要将网络摄像头连接到 AVD 时,一旦我同意它就可以了。

    SO 中的另一位发帖人也问了这个问题,关于相机,将 AVD 版本更改为 4.0 确实对他有所帮助。

    音频录制可能也是如此,因为两者都是典型 PC 的外部硬件。

    【讨论】:

    • 谢谢,但是我的 4.0Android 模拟器不工作,我不知道为什么,我已经更新了 SDK,但是当我尝试启动它时,崩溃了。是否需要更新 Eclipse 才能与 Android Emulator 4 一起使用?
    • 是的,您需要更新 ADT。转到 Eclipse,选择菜单“帮助”并选择“检查更新”,然后更新 ADT。
    • SDK已全面更新,Android4.0的所有功能都已安装,没有可用的更新,但它仍然有奇怪的行为。我还在等待人们的回复,看看有什么问题与存储位置。谢谢。
    • 我购买了一台新的 Nexus S 设备,该应用程序在它上面运行良好。
    • 什么意思?详细说明问题。
    猜你喜欢
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多