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