javascript - 媒体插件错误代码 : 1

标签 javascript android audio cordova

我无法使用 Cordova Media 插件播放本地声音。

我在我的 platforms\android\res\xml\config.xml 这里有正确的选项...

<content src="index.html" />
<access origin="*" />
<preference name="loglevel" value="DEBUG" />
<feature name="App">
    <param name="android-package" value="org.apache.cordova.App" />
</feature>
<feature name="Device">
    <param name="android-package" value="org.apache.cordova.device.Device" />
</feature>
<feature name="File">
    <param name="android-package" value="org.apache.cordova.file.FileUtils" />
</feature>
<feature name="Media">
    <param name="android-package" value="org.apache.cordova.media.AudioHandler" />
</feature>
<feature name="SplashScreen">
    <param name="android-package" value="org.apache.cordova.splashscreen.SplashScreen" />
</feature>

...以及我的 AndroidManifest.xml 中的权限选项...

<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

但是,当我尝试播放声音时,我什么也没得到:

enter image description here

注意:我使用的是 Apache Cordova 3.3.0

最佳答案

设法弄清楚最后你必须引用相对于 window.location.pathname 的文件路径,因为当通过 Apache Cordova 运行时根是 file:///android_asset/www/ 所以必须像这样引用声音 /android_asset/www/path/to/a/sound.mp3

这是我的完整解决方案:

var audio = {
    root: '',
    localPath: '/assets/sounds/',
    manifest: {
        bang: 'bang.mp3',
        boom: 'boom.mp3',
        splat: 'splat.mp3',
        splash: 'splash.mp3'
    },
    sounds: {},
    parse: function () {
        var p = window.location.pathname;
        this.root = p.substring(0, p.lastIndexOf('/')) + this.localPath;
        console.log(this.root);
        for (var sound in this.manifest) {
            var src = this.root + this.manifest[sound];
            console.log('Getting sound: ' + src);
            this.sounds[sound] = (typeof Media !== 'undefined') ? new Media(src) : new Audio(src);
            console.log('Created sound:');
        $('#sounds').append($('<li></li>').html(src));
        }
    }
};
audio.parse();

例如,我的 index.html 位于我的根目录中,从我的 Angular 来看,它本质上是 ./(www 文件夹)。

我所有的声音都在两个子文件夹 ./assets/sounds/ 中。

在我的 PC 上托管应用程序时 window.location.pathname 显示为 /:

enter image description here

但是,当托管在我的移动设备上时,它是:

enter image description here

关于javascript - 媒体插件错误代码 : 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21244052/

相关文章:

javascript - reducer - 添加新元素

android - 为动态创建的 ImageView 设置点击监听器

java - 通过 Java(可能还有 Linux)在 Windows 7 中启用 "Listen to this device"

javascript - 在 Loopback 中创建模型实例时,如何以编程方式填充字段?

javascript - Firebase Facebook 登录并重定向返回空电子邮件

android - 如何指定android自定义颜色资源: day/night/high contrast

android - 触摸窗口没有完成某些输入事件的处理(我经常崩溃。我完全不知道)

audio - ffmpeg - 将图像和音频组合成视频后,视频比音频长

python - ValueError:缓冲区大小必须是元素大小的倍数

javascript - AngularJS 检查条件并返回 true 或 false