【问题标题】:How to generate multiple files with a media recorder?如何使用媒体记录器生成多个文件?
【发布时间】:2018-01-06 04:55:01
【问题描述】:

我的一些代码:

    outPutFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/recording.3gp";

    mediaRecorder = new MediaRecorder();
    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    mediaRecorder.setOutputFile(outPutFile);

用于显示文件的列表和适配器

    listRecord.addAll(Arrays.asList(outPutFile));
    listAdapter = new ArrayAdapter<String>(this, R.layout.support_simple_spinner_dropdown_item, listRecord);
    recordList.setAdapter(listAdapter);

outPutFile 是一个字符串。

【问题讨论】:

  • 我希望能够录制多个文件。
  • 记录一个文件。停止录制。记录第二个文件。停止录制。记录第三个文件。停止录制。以此类推。
  • 现在编写的代码在下次录制时替换旧文件的方式,如果我错了,请纠正我......
  • 您将创建一个新的MediaRecorder 实例,并将setOutputFile() 的新值指向您想要的文件。

标签: android audio-recording mediarecorder


【解决方案1】:

每次录制新文件时都必须更改文件名,因此可以在文件名中添加日期时间以创建唯一名称:

String dateTime = new SimpleDateFormat("dd-MM-yyyy hh-mm-ss aa",Locale.getDefault()).format(new Date());
outputFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Recordings/recording -" + dateTime + ".3gp";

为了显示项目,你必须创建一个数据库来保存文件名,并在你想显示记录列表时从数据库中获取文件名

String DIR_DATABASE = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Recordings";
String sqliteQuery= "CREATE  TABLE  IF NOT EXISTS Recordings (ID INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL  UNIQUE , fileName VARCHAR)"
SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(DIR_DATABASE + "db.sqlite", null);
database.execSQL(sqliteQuery);

以及将数据插入数据库使用:

SQLiteDatabase database = SQLiteDatabase.openDatabase(DIR_DATABASE + "db.sqlite", null, 0);
ContentValues values = new ContentValues();
                values.put("fileName", outputFile );
                database.insert("Recordings", "", values);

然后从数据库中读取文件名使用以下行:

Cursor cursor = database.rawQuery("SELECT fileName FROM Recordings", null);
ArrayList<String> fileNames = new ArrayList<>();
while (cursor.moveToNext()) {

     String fileName = cursor.getString(0);
     fileNames.add(fileName);
}
cursor.close();
database.close();

最后将它们添加到您的列表适配器中:

listRecord.addAll(fileNames);
listAdapter = new ArrayAdapter<String>(this, R.layout.support_simple_spinner_dropdown_item, listRecord);
recordList.setAdapter(listAdapter);

【讨论】:

  • 非常感谢!我有一个问题:文件名显示为“0”,我必须写 String fileName = cursor.getInt(0);作为字符串文件名 = String.valueOf(cursor.getInt(0));有什么想法吗?
  • 是的,我的代码出错了,你必须使用:fileName = cursor.getString(0);如果对你有帮助,请点赞
  • 这样做了吗,它给出了名称和路径...如何访问文件以使用 mediaplayer 类播放它们?假设我想在列表中使用 onclicklistener,使用 getposition?
  • 您可以在这里找到答案:stackoverflow.com/questions/7291731/…
  • 我可以找到我的答案,但首先我必须正确获取文件的名称,因为现在它给了我带有路径的名称,并且仍然在日期之前显示“0”.. .
猜你喜欢
  • 2013-12-12
  • 1970-01-01
  • 1970-01-01
  • 2017-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多