媒体插件错误代码:1

Jos*_*ett 8 javascript audio android 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>
Run Code Online (Sandbox Code Playgroud)

...和我的权限选项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" />
Run Code Online (Sandbox Code Playgroud)

然而,当我尝试播放声音时,我什么也得不到:

在此输入图像描述

注意:我正在使用Apache Cordova 3.3.0

Jos*_*ett 17

管理最终弄清楚你必须引用相对于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();
Run Code Online (Sandbox Code Playgroud)

所以例如我index.html在我的根目录中,这主要是./从我的角度来看(www文件夹).

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

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

在此输入图像描述

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

在此输入图像描述


Jos*_*ett 5

在做了一些关于Media插件是如何通过Android的MediaPlayer天真地播放音频之后,我看到由于某种未知的原因,需要以下权限\platforms\androidAndroidManifest.xml.

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
Run Code Online (Sandbox Code Playgroud)

Internet权限 - 如果您使用MediaPlayer流式传输基于网络的内容,则您的应用程序必须请求网络访问权限.

我只能猜测,因为您尝试通过WebView流式传输本地媒体,它需要此权限才能正常运行.

然而,获得比undefined可能类似的更好的错误消息会更好.

code: 1
message: Missing Android permission
Run Code Online (Sandbox Code Playgroud)

Apache Cordova应该在安装插件时自动添加此权限.

编辑:实际上这只是访问远程音频文件的部分修复我还没有得到本地文件的工作.