Saya menggunakan Ionic Framework dengan AngularJS dan Plugin Media ngCordova: http://ngcordova.com/docs/plugins/media/
Saat ini saya memiliki dua fungsi di pengontrol saya;
Putar - fungsi ini memutar media src yang dipilih
$scope.play = function(src) { media = $cordovaMedia2.newMedia(src, null, null, mediaStatusCallback); media.play(); $scope.isPlaying = true; $ionicLoading.hide(); } }
Lagu Berikutnya - fungsi ini mendapatkan src lagu berikutnya dalam daftar dengan mencari indeks objek lagu saat ini dan memilih objek berikutnya dalam daftar.
$scope.nextSong = function (song_id) { var index = $scope.allsongs.indexOf(song_id); if(index >= 0 && index < $scope.allsongs.length - 1) { $scope.nextsongid = $scope.allsongs[index + 1] $scope.playMusic($scope.nextsongid); //the playMusic function just looks up the src of the song and parses to the play function } }
Berikut adalah fungsi playMusic yang dipanggil di atas:
$scope.playMusic = function(music_id)
{
myService.getSongInfo(music_id)
.then(function(data){
$scope.cursong = data.results;
$scope.play($scope.cursong.src);
});
};
Dan di template saya, tombol berikutnya hanya memanggil fungsi nextSong seperti dengan ID lagu saat ini:
<div class="next" ng-click="nextSong('{{cursong.id}}')"></div>
Masalah yang saya hadapi adalah ketika saya menekan tombol berikutnya untuk pertama kalinya, lagu berikutnya diputar, tetapi ketika saya menekannya lagi, lagu yang sama diputar lagi. Tampaknya nilai 'currsong' tidak diperbarui.
Seperti inilah tampilan array 'allsongs':
["1631922", "1502059", "1365874", "1607940", "1251204", "1233296", "1151847", "1119737", "1086438", "1078140", "1068172", "1065312", "845339", "799161", "316293", "306073", "299817", "1603940"]
Pembaruan: Saya mencoba menggunakan interval
Saya memiliki fungsi interval yang melompat ke lagu berikutnya ketika waktunya telah mencapai durasinya. Saya memanggil fungsi lagu berikutnya di sana dan berfungsi dengan sempurna.
$scope.Timer = $interval(function () {
$scope.cursongduration = $scope.cursong.duration;
$scope.cursongid = $scope.cursong.id;
if($scope.currduration >= $scope.cursongduration){
$scope.nextSong($scope.cursongid);
}, 1000);
};
Jadi pertanyaan saya adalah mengapa memanggil nextSong melalui tombol template juga berfungsi? Bagi saya sepertinya cursong.id tidak diperbarui di template setelah 1 kali karena alasan yang aneh. Saya juga telah mencoba menggunakan variabel cursongid yang diatur dalam interval di tombol templat tetapi tidak berhasil:
<div class="next" ng-click="nextSong('{{cursongid}}')"></div>