2015-10-25 3 views
2

Примечание: этот вопрос повторно отправляется, потому что по какой-то причине первоначальный плакат решил удалить его после того, как был предоставлен и принят ответ. Поэтому я добавляю его снова, чтобы сохранение знанийКак обрабатывать файлы с помощью Кордовы?


Оригинальный вопрос:

Im пытаясь используется Apache Cordova апи в Гибридный приложения, чтобы сохранить файл с локального хоста: 8080/имя файла. mp3 и загрузить его в приложение и открыть файл .mp3 локально в android.It не работает. Могу ли я помочь.

Вот код:

main.js

function wlCommonInit(){ 
//playAudio("http://audio.ibeat.org/content/p1rj1s/p1rj1s_-_rockGuitar.mp3"); 
} 

     //!! Assumes filePath is a valid path on the device 
     function DownloadAudio() { 

    var fileTransfer = new FileTransfer(); 
     var uri = encodeURI("http://192.168.1.2:8080/tail_toddle.mp3"); 

    fileTransfer.download(
uri, 
filePath, 
function(entry) { 
    console.log("download complete: " + entry.fullPath); 
}, 
function(error) { 
    console.log("download error source " + error.source); 
    console.log("download error target " + error.target); 
    console.log("upload error code" + error.code); 
} 
); 

    } 

    // 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(); 
`enter code here` } 
    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; 
     } 

index.html

 <!DOCTYPE HTML> 
    <html> 
     <head> 
     <meta charset="UTF-8"> 
     <title>index</title> 
       <meta name="viewport" content="width=device-width, initial- scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0"> 
     <link rel="shortcut icon" href="images/favicon.png"> 
     <link rel="apple-touch-icon" href="images/apple-touch-icon.png"> 
     <link rel="stylesheet" href="css/main.css"> 
     <script>window.$ = window.jQuery = WLJQ;</script> 
    </head> 
    <body style="display: none;"> 
     <!--application UI goes here--> 
     Hello Worklight - Cordova Media API<br/><br/> 

     <a href="#" class="btn large" onclick="DownloadAudio;">Download   Audio</a> - remote URL<br/> 
     <a href="#" class="btn large" onclick="playAudio('/android_asset/www/default/audio/tail_toddle.mp3');">Play Audio</a> - local asset<br/> 
     <a href="#" class="btn large" onclick="pauseAudio();">Pause Playing Audio</a><br/> 
     <a href="#" class="btn large" onclick="stopAudio();">Stop Playing Audio</a><br/> 
     <p id="audio_position"></p> 
     <script src="js/initOptions.js"></script> 
     <script src="js/main.js"></script> 
     <script src="js/messages.js"></script> 
    </body> 

Я добавил новую функцию удаления:

индекс. HTML:

<a href="#" class="btn large" onclick="deleteAudio();">Delete the local MP3 file</a><br/> 

main.js:

function deleteAudio() { 
    var entry= "file:///data/data/com.TestApp/files/4638.mp3"; 
    function success(entry) { 
    alert("Removal succeeded"); 
} 

    function fail(error) { 
    alert('Error removing file: ' + error.code); 
} 

// remove the file 
entry.remove(success, fail); 
} 

почему пытается удалить, не удаляя код. Я получаю эту ошибку:

10-11 09:54:14.419: E/NONE(1821): Uncaught Exception: Uncaught TypeError: Object file:///data/data/com.TestApp/files/4638.mp3 has no method 'remove' at (compiled_code):68 

Могу ли я помочь?

ответ

1

Следующий код работает для меня.
Испытано в MobileFirst Platform Foundation 7.1:

index.html

<button id="downloadMP3">Download MP3 file</button><br/> 
<button id="playMP3" disabled>Play MP3 file</button> 

main.js

var mediaFile; 

function wlCommonInit(){ 
    $("#downloadMP3").click(downloadMP3); 
    $("#playMP3").click(playMP3); 
} 

function downloadMP3() { 
    var fileTransfer = new FileTransfer(); 
    var remoteFilePath = encodeURI("http://www.noiseaddicts.com/samples_1w72b820/4638.mp3"); 
    var localDownloadPath = cordova.file.dataDirectory + '4638.mp3'; 

    alert ("Downloading..."); 
    fileTransfer.download(
     remoteFilePath, 
     localDownloadPath, 
     function(successResponse) { 
      mediaFile = successResponse.toURL(); 
      mediaFile = mediaFile.replace('file://',''); 
      $('#playMP3').prop('disabled', false); 
     }, 
     function(errorResponse) { 
      alert (JSON.stringify(errorResponse)); 
     } 
    ); 
} 

function playMP3() { 
    var media = new Media(
     mediaFile, 
     function() { 
      alert("Playing audio file."); 
     }, 
     function() { 
      alert("Failed playing audio file."); 
     } 
    ); 

    media.play(); 
}