媒体插件错误代码:1

时间:2014-01-20 21:00:27

标签: 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

4 个答案:

答案 0 :(得分:17)

管理最终弄清楚你必须引用相对于window.location.pathname的文件路径,因为当运行Apache Cordova时,根是file:///android_asset/www/所以声音必须像{{1}那样被引用1}}。

这是我的完整解决方案:

/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./文件夹)。

我的所有声音都在两个子文件夹www内。

在我的电脑上托管该应用时./assets/sounds/显示为window.location.pathname

enter image description here

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

enter image description here

答案 1 :(得分:5)

在通过Android MediaPlayer进行了一些关于Media插件如何通过Android {{3}}天真地播放音频之后,我发现由于某些未知原因,\platforms\androidAndroidManifest.xml中需要以下权限。

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

互联网权限 - 如果您使用MediaPlayer传输基于网络的内容,则您的应用必须请求网络访问。

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

然而,获得比undefined更好的错误消息会更好。

code: 1
message: Missing Android permission

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

编辑:实际上这只是访问远程音频文件的部分修复方法,我还没有让本地文件正常工作。

答案 2 :(得分:3)

这是我的代码,它有效。确保安装device plugin

if(selectedSoundOption === "Coins"){
        var coin180Url = getMediaURL("sounds/coin180.mp3");
        var coin180 = new Media(coin180Url, null, mediaError);
        var coin360Url = getMediaURL("sounds/coin360.wav");
        var coin360 = new Media(coin360Url, null, mediaError);
        if(rotation.indexOf("360") > -1){
            coin180.play();
        }else{
            coin360.play();
        }
    }
}

function mediaError(e) {
    alert('Media error '+e);
}

function getMediaURL(s) {
    if(device.platform.toLowerCase() === "android") return "/android_asset/www/" + s;
    return s;
}

答案 3 :(得分:0)

在android \ platforms \ androidAndroidManifest.xml中添加以下行后,会播放声音。

<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WAKE_LOCK" />

感谢约书亚,你的解决方案适合我。