所以我很难用Cordova Media Plugin来录制音频 我的代码:
var my_media = new Media("toto.3gp",
()=>onSuccess(),
(err)=>onError(err),
(status)=>mediaStatus(status)
);
console.log(my_media); // Media {id: "07053344-6274-09eb-62ca-d63f099f2a4b", src: "toto.3gp", _duration: -1, _position: -1}
my_media.startRecord();
console.log(my_media); // Media {id: "07053344-6274-09eb-62ca-d63f099f2a4b", src: "toto.3gp", _duration: -1, _position: -1}
我确保媒体对象已正确初始化并且确实如此。
在Android控制台上我得到了这个:07-10 19:59:20.019 31861-31917/com.phonegap.reacthotloadingtemplate E/MediaRecorder: start failed: -2147483648
07-10 19:59:20.019 31861-31917/com.phonegap.reacthotloadingtemplate E/PluginManager: Uncaught exception from plugin
java.lang.RuntimeException: start failed.
at android.media.MediaRecorder.start(Native Method)
at org.apache.cordova.media.AudioPlayer.startRecording(AudioPlayer.java:160)
at org.apache.cordova.media.AudioHandler.startRecordingAudio(AudioHandler.java:287)
at org.apache.cordova.media.AudioHandler.promptForRecord(AudioHandler.java:543)
at org.apache.cordova.media.AudioHandler.execute(AudioHandler.java:118)
at org.apache.cordova.CordovaPlugin.execute(CordovaPlugin.java:98)
at org.apache.cordova.PluginManager.exec(PluginManager.java:132)
at org.apache.cordova.CordovaBridge.jsExec(CordovaBridge.java:57)
at org.apache.cordova.engine.SystemExposedJsApi.exec(SystemExposedJsApi.java:41)
at org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
at org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:39)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.os.HandlerThread.run(HandlerThread.java:61)
媒体权限由插件(自动)正确设置:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
那么您认为问题是什么?
答案 0 :(得分:1)
当cordova-media-plugin开始录制时,它首先创建一个名为/storage/emulated/0/tmprecording-.3gp的文件 然后它将该文件重命名为您提供的任何名称,而不将其转换为任何其他格式,因此支持3gp,我意识到我的问题是由于android sdk 23及更高版本的权限更改,因此sdk 23引入了运行时权限。所以我刚刚将config.xml中的androidTargetSdk更改为22,它解决了我的问题。
答案 1 :(得分:0)
该错误表示正好在调用Android MediaRecorder start方法时发生错误。我不认为cordova-plugin-media支持3gp扩展。在插件中,我在源代码(AudioHandler.java)中找到了以下注释:
* Audio formats supported (tested):
* .mp3, .wav
但如果我没记错,我还设法用该插件记录.amr文件。