Lavorando con PhoneGap mi sono imbattuto in un problema singolare: cercando di avviare l’esecuzione di un file .Mp3 locale utilizzando le API del framework, lo stesso codice funzionava correttamente su iOS ma non veniva eseguito su Android .

Il sorgente era una cosa del genere:

[sourcecode lang=”java”]

var audiosource = “/file.mp3”;

mp3file = new Media(audiosource,

function() {

alert(“playAudio():Audio Success”);

},

function(err) {

alert(err);

});

mp3file.play({numberOfLoops:1});

[/sourcecode]

Il problema sembra risiedere nel differente modo di interpretare i path sulle due piattaforme: iOS considera come root del progetto la cartella /assets/www/ , mentre con Android parte dalla root del progetto, rimappando la cartella /assets// in /android_assets// .

La soluzione è quindi quella di realizzare una semplice funzione che permetterà di trasportare il codice tra le due piattaforme senza modifiche:

[sourcecode lang=”java”]

function playAudio(filename) {

    var audiosource = filename;


    if (device.platform == "Android") {


        audiosource="/android_asset/www/" + filename;


    }


    mp3file = new Media(audiosource,


                        function() {


                        //alert("playAudio():Audio Success");


                        },


                        function(err) {


                        alert(err);


                        }


                        );


    mp3file.play({numberOfLoops:1});


}

[/sourcecode]

Semplicemente verifica la piattaforma sulla quale sta girando l’app e ‘rimappa’ i path di conseguenza.

L’utilizzo è semplicissimo: una volta copiato il file audio nella cartella /assets/www/ , lo si manda in play con:

[sourcecode lang=”java”]

playAudio("NOMEFILE.mp3");

[/sourcecode]