Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript IBM Worklight 6.1-无法使用Cordova播放本地媒体文件_Javascript_Android_Cordova_Ibm Mobilefirst - Fatal编程技术网

Javascript IBM Worklight 6.1-无法使用Cordova播放本地媒体文件

Javascript IBM Worklight 6.1-无法使用Cordova播放本地媒体文件,javascript,android,cordova,ibm-mobilefirst,Javascript,Android,Cordova,Ibm Mobilefirst,在Android模拟器中测试 我正在尝试使用Cordova Media API管理Worklight项目中本地存储的音频播放。最初我试图更新我的项目来完成这项任务,但没有成功,所以我决定使用ApacheCordova媒体API页面上记录的完整示例。我使用完整的示例来播放、暂停和停止音频文件。我所做的唯一更改是播放本地存储在worklight项目中的音频文件 然而,上述方法失败了 我在示例项目中创建了一个新文件夹“WavAudo”,其中包含要播放的音频的.mp3和.wav版本 启动应用程序时,我收

在Android模拟器中测试

我正在尝试使用Cordova Media API管理Worklight项目中本地存储的音频播放。最初我试图更新我的项目来完成这项任务,但没有成功,所以我决定使用ApacheCordova媒体API页面上记录的完整示例。我使用完整的示例来播放、暂停和停止音频文件。我所做的唯一更改是播放本地存储在worklight项目中的音频文件

然而,上述方法失败了

我在示例项目中创建了一个新文件夹“WavAudo”,其中包含要播放的音频的.mp3和.wav版本

启动应用程序时,我收到一个弹出警报,提示
错误.code
错误.message
未定义。使用Chrome调试器,我看到
deviceready
上未定义
Uncaught ReferenceError介质

我相信我已经尝试了所有可能的路径+文件组合来定位文件,但我一定错过了什么

      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
              "http://www.w3.org/TR/html4/strict.dtd">
<html>
  <head>
    <title>Media Example</title>

    <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
    <script type="text/javascript" charset="utf-8">

    // Wait for device API libraries to load
    //
    document.addEventListener("deviceready", onDeviceReady, false);

    // device APIs are available
    //
    function onDeviceReady() {
        playAudio("/android_asset/www/WavAudio/16300.mp3");
    }

    // Audio player
    //
    var my_media = null;
    var mediaTimer = null;

    // Play audio
    //
    function playAudio(src) {
        // Create Media object from src
        my_media = new Media(src, onSuccess, onError);

        // Play audio
        my_media.play();

        // Update my_media position every second
        if (mediaTimer == null) {
            mediaTimer = setInterval(function() {
                // get my_media position
                my_media.getCurrentPosition(
                    // success callback
                    function(position) {
                        if (position > -1) {
                            setAudioPosition((position) + " sec");
                        }
                    },
                    // error callback
                    function(e) {
                        console.log("Error getting pos=" + e);
                        setAudioPosition("Error: " + e);
                    }
                );
            }, 1000);
        }
    }

    // Pause audio
    //
    function pauseAudio() {
        if (my_media) {
            my_media.pause();
        }
    }

    // Stop audio
    //
    function stopAudio() {
        if (my_media) {
            my_media.stop();
        }
        clearInterval(mediaTimer);
        mediaTimer = null;
    }

    // onSuccess Callback
    //
    function onSuccess() {
        console.log("playAudio():Audio Success");
    }

    // onError Callback
    //
    function onError(error) {
        alert('code: '    + error.code    + '\n' +
              'message: ' + error.message + '\n');
    }

    // Set audio position
    //
    function setAudioPosition(position) {
        document.getElementById('audio_position').innerHTML = position;
    }

    </script>
  </head>
  <body>
    <a href="#" class="btn large" onclick="playAudio
    ('/android_asset/www/WavAudio/16300.mp3');">Play Audio</a>
    <a href="#" class="btn large" onclick="pauseAudio();">Pause Playing Audio</a>
    <a href="#" class="btn large" onclick="stopAudio();">Stop Playing Audio</a>
    <p id="audio_position"></p>
  </body>

媒体示例
//等待加载设备API库
//
文件。添加的监听器(“deviceready”,OnDeviceraddy,false);
//设备API可用
//
函数ondevicerady(){
playAudio(“/android_asset/www/wavaAudio/16300.mp3”);
}
//音频播放器
//
var my_media=null;
var mediaTimer=null;
//播放音频
//
功能播放音频(src){
//从src创建媒体对象
my_media=新媒体(src、onSuccess、onError);
//播放音频
我的媒体播放();
//每秒更新我的媒体位置
如果(mediaTimer==null){
mediaTimer=setInterval(函数(){
//得到我的媒体职位
my_media.getCurrentPosition(
//成功回调
职能(职位){
如果(位置>-1){
设置音频位置((位置)+“秒”);
}
},
//错误回调
职能(e){
console.log(“获取位置时出错=”+e);
设置音频位置(“错误:+e”);
}
);
}, 1000);
}
}
//暂停音频
//
函数pauseAudio(){
如果(我的媒体){
我的媒体暂停();
}
}
//停止音频
//
函数stopAudio(){
如果(我的媒体){
我的媒体。停止();
}
clearInterval(mediaTimer);
mediaTimer=null;
}
//onSuccess回调
//
函数onSuccess(){
log(“playAudio():音频成功”);
}
//错误回调
//
函数onError(错误){
警报('code:'+error.code+'\n'+
'消息:'+error.message+'\n');
}
//设置音频位置
//
功能设置音频位置(位置){
document.getElementById('audio_position')。innerHTML=position;
}

我还将这些添加到Android清单中:

 <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" />   

科尔多瓦网站上提供的示例代码有效,但看起来他们指向的URL已被破坏。我已经做过了,然后成功了

至于播放本地媒体文件,您需要提供媒体文件在生成的Android项目中的位置的完整路径。例如,如果在Worklight应用程序中创建一个
common\audio
文件夹并在其中放置一个.mp3文件,则需要使用以下路径(在HTML或JavaScript中,或以您喜欢的方式…):


这是因为在Worklight中,每个应用程序都被视为“皮肤”。有一个“默认”皮肤,它在
www
文件夹中有自己的文件夹

样本项目:


另外,我不认为将示例从Cordova复制粘贴到Worklight项目是一种好做法

  • 没有可链接的cordova.js
  • 由于这是在内部处理的,因此收听
    devicerady
    是多余的。这样说:如果您已经到达了
    wlCommonInit()
    ,就可以开始了
  • 没有必要添加额外的权限,除非您想要这些权限提供的内容

你能转到你的
app\u文件夹\platforms\android\res\xml\config.xml
看看媒体插件的定义是否正确,例如:
我已经应用了提供的所有建议以获得成功。1) 已删除cordova.js脚本def 2)已删除设备就绪事件侦听器设置。作为最后一点希望,我将common下的audio文件夹重命名为“audio”,我使用了上面建议的文件路径/android_asset/www/default/audio/16300.mp3我构建,然后使用Chrome测试android。当我单击播放时,我会在“my_media=new media(src,onSuccess,onError)”上弹出警告弹出窗口,该弹出窗口的代码为:未定义,消息为:未定义。我在新的工作区中重新创建了此示例,但运气不佳。感谢所有的想法。我会继续在这里搜索。谢谢。您无法通过Worklight Console进行测试。您必须在Android Emulator或设备中进行测试。“chrome”是什么意思?我的Worklight中安装了Android sdk和AVD管理器。在我的项目中,我创建了common和Android env。我构建所有环境并部署到Worklight Dev服务器。(内部)。我使用Chrome指向开发服务器,点击Android预览眼,启动Android emulator,显示默认设备“Kindle Fire II”,然后选择播放音频按钮,弹出两个字段:error和msg“Undefined”。请让我知道我的构建/测试过程是否有缺陷。谢谢。这正是我刚才告诉你的-你不能使用Worklight控制台的MBS来收听使用android_作为音频文件
<a href="#" onclick="playAudio('/android_asset/www/default/audio/myMediaFile.mp3');">Play Audio</a>