Android - 从 Intent 设置录音机 mime 类型

Android - set Sound Recorder mime type from Intent

我正在使用 Cordova 构建我的移动应用程序,我需要录制声音。
我正在使用媒体捕获插件,它在此函数中启动默认的 android 录音机应用程序:

private void captureAudio() {
        Intent intent = new Intent(android.provider.MediaStore.Audio.Media.RECORD_SOUND_ACTION);

        this.cordova.startActivityForResult((CordovaPlugin) this, intent, CAPTURE_AUDIO);
}

问题是,在我获取文件路径并尝试 getAudioVideoData(其中包含 "duration" 等信息)之后,录音格式(默认为 .amr)似乎无法使用已解析并抛出异常。

private JSONObject getAudioVideoData(String filePath, JSONObject obj, boolean video) throws JSONException {
        MediaPlayer player = new MediaPlayer();
        try {
            player.setDataSource(filePath);
            player.prepare();
            obj.put("duration", player.getDuration() / 1000);
            if (video) {
                obj.put("height", player.getVideoHeight());
                obj.put("width", player.getVideoWidth());
            }
        } catch (IOException e) {
            Log.d(LOG_TAG, "Error: loading video file");
        }
        return obj;
}

我知道问题出在媒体格式上,因为在我的旧 Android 设备上,4.4.4 录音机应用程序有设置,我可以从那里更改文件类型,如果我将它设置为 .wav ,比 getAudioVideoData 有效!

我尝试在 captureAudio() 之前添加以下内容 startActivityForResult():

intent.putExtra(android.provider.MediaStore.Audio.Media.ENTRY_CONTENT_TYPE, "audio/aac");
intent.putExtra(android.provider.MediaStore.Audio.Media.MIME_TYPE, "audio/aac");
intent.putExtra(android.provider.MediaStore.Audio.Media.CONTENT_TYPE, "audio/aac");

..但没有成功。

我找不到通过意图影响录音机应用程序输出的方法,但我解决了主要问题,即我无法读取录制的音频文件的元数据(持续时间 属性) .

已修复此 PR:https://github.com/apache/cordova-plugin-media-capture/pull/50