0
我能够成功记录音频并播放它。该文件正在存储在SD中,并具有如下所示的filePath:/storage/emulated/0/20160516_104008
。问题是我希望用户能够通过图库小部件访问它。无法在Android中的图库文件夹中显示新添加的媒体
我研究这个问题,并使用MediaScannerConnection
API,我已经实现了如下建议this后:
MediaScannerConnection.scanFile(_reactContext,
new String[] { audioFileName }, null,
new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
}
});
下面是相关代码:
private boolean prepareAudioRecorder() {
audioRecorder = new MediaRecorder();
audioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
audioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
audioFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
audioFileName += "/" + timeStamp;
audioRecorder.setOutputFile(audioFileName);
audioRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
try {
audioRecorder.prepare();
return true;
} catch (IOException e) {
Log.e(TAG, "prepare() failed");
return false;
}
}
public void stopAudioRecording(final Promise promise) {
if (audioRecorderPromise != null) {
audioFile = new File(audioFileName);
releaseAudioRecorder();
storeFile();
promise.resolve("finished recording");
} else {
promise.resolve("not recording");
}
private void releaseAudioRecorder() {
if (audioRecorder != null) {
audioRecorder.stop();
audioRecorder.release();
audioRecorder = null;
if (audioRecorderPromise != null) {
// audioRecorderPromise.resolve(Uri.fromFile(audioFile).toString());
audioRecorderPromise.resolve(audioFileName);
audioRecorderPromise = null;
}
}
}
private void storeFile() {
values = new ContentValues();
values.put(MediaStore.Audio.Media.TITLE, audioFileName);
values.put(MediaStore.Audio.Media.DATE_ADDED, System.currentTimeMillis());
values.put(MediaStore.Audio.Media.MIME_TYPE, "audio/3gpp");
values.put(MediaStore.Audio.Media.DATA, audioFileName);
ContentResolver cr = _reactContext.getContentResolver();
cr.insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, values);
Uri base = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Uri newUri = cr.insert(base, values);
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
intent.setData(Uri.fromFile(audioFile));
_reactContext.sendBroadcast(intent);
}
'audioFilename'被定义为'Environment.getExternalStorageDirectory()getAbsolutePath();',并且与时间戳串联。那不是绝对路径吗? – Frosty619
它应该是audioFile.getAbsolutePath() – John
我试过这个,但它没有工作:没有错误被抛出,我仍然能够播放该文件,但无法在画廊中看到它 – Frosty619