音乐服务不适用于专辑歌曲

Music service Not Working with Album songs

我开发音乐 app.so 我创建 音乐服务 在歌曲背景中播放,以便在我播放歌曲时完美运行。 但我的问题是我们需要为所有人提供不同的服务。 所以当我使用专辑的音乐服务来播放专辑歌曲时,它不起作用。

我不知道该怎么办 提前致谢

我的代码

package com.musicbox.google.musicboxlive.Musiclibrary;

import android.app.Notification;
import android.app.PendingIntent;
import android.app.Service;
import android.content.ContentUris;
import android.content.Intent;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Binder;
import android.os.IBinder;
import android.os.PowerManager;
import android.util.Log;

import com.musicbox.google.musicboxlive.Musiclibrary.Song.Songpojo;
import com.musicbox.google.musicboxlive.R;

import java.util.ArrayList;


/**
 * Created by Jiagr Fumakiya on 2/1/18.
 */

public class MusicService extends Service implements
        MediaPlayer.OnPreparedListener, MediaPlayer.OnErrorListener,
        MediaPlayer.OnCompletionListener {

    //media player
    private MediaPlayer player;
    //song list
    private ArrayList<Songpojo> songpojos;
    //current position
    private int songPosn;
    private final IBinder musicBind = new MusicBinder();

    String songtitile;

    @Override
    public IBinder onBind(Intent intent) {
        return musicBind;
    }

    @Override
    public void onCreate() {
        super.onCreate();

        songPosn = 0;
        //create player
        player = new MediaPlayer();

        initMusicPlayer();
    }

    public void initMusicPlayer() {
        //set player properties
        player.setWakeMode(getApplicationContext(),
                PowerManager.PARTIAL_WAKE_LOCK);
        player.setAudioStreamType(AudioManager.STREAM_MUSIC);

        player.setOnPreparedListener(this);
        player.setOnCompletionListener(this);
        player.setOnErrorListener(this);
    }


    public void setList(ArrayList<Songpojo> theSongpojos) {
        songpojos = theSongpojos;
    }

    public class MusicBinder extends Binder {
        public MusicService getService() {
            return MusicService.this;
        }
    }

    @Override
    public boolean onUnbind(Intent intent) {
        player.stop();
        player.release();
        return false;
    }

    public void playSong() {

        player.reset();

        //get song
        Songpojo playSongpojo = songpojos.get(songPosn);

         songtitile = playSongpojo.getTitle();
        //get id
        long currSong = playSongpojo.getID();
        //set uri
        Uri trackUri = ContentUris.withAppendedId
                (android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, currSong);
        try {
            player.setDataSource(getApplicationContext(), trackUri);
        } catch (Exception e) {
            Log.e("MUSIC SERVICE", "Error setting data source", e);
        }

        player.prepareAsync();

        //player.start();
    }


    public void nextsong() {
        if (songPosn < (songpojos.size() - 1)) {
            // play(currentSongIndex - 1);
            songPosn = songPosn + 1;
        } else {
            songPosn = 0;
        }
    }

    public void previousong() {
        if (songPosn > 0) {
            // play(currentSongIndex - 1);
            songPosn = songPosn - 1;
        } else {
            songPosn = songpojos.size() - 1;
        }
    }


    public void pause() {
        if (player.isPlaying()) {
            player.pause();
        }
    }

    public void resume() {
        int seek = player.getCurrentPosition();

        if (!player.isPlaying()) {
            player.seekTo(seek);
            player.start();
        }
    }

    public void isplaying() {

        if (player.isPlaying()) {
            player.reset();
        }
    }

    @Override
    public void onStart(Intent intent, int startId) {

        Log.d("musicid", String.valueOf(startId));

        super.onStart(intent, startId);
    }


    @Override
    public void onCompletion(MediaPlayer mp) {

    }

    @Override
    public boolean onError(MediaPlayer mp, int what, int extra) {
        return false;
    }

    @Override
    public void onPrepared(MediaPlayer mp) {
        //start playback
   /*     if (mp.isPlaying()) {
            mp.reset();
        } else {
            mp.start();
        }*/

        mp.start();
        Intent notIntent = new Intent(this, MusiclibraryHome.class);
        notIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent pendInt = PendingIntent.getActivity(this, 0,
                notIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        Notification.Builder builder = new Notification.Builder(this);

        builder.setContentIntent(pendInt)
                .setSmallIcon(R.drawable.play)
                .setTicker(songtitile)
                .setOngoing(true)
                .setContentTitle("Playing")
                .setContentText(songtitile);
        Notification not = builder.build();
        startForeground(1, not);
    }

    public void setSong(int songIndex) {
        songPosn = songIndex;
    }

}

是的.. 现在在网上找到很多之后,我知道你需要不同的方法来处理音乐播放器中的每个事件(如专辑、歌曲、流派),所有不同。

这是在 android 中明智地播放歌曲专辑的方法。

  public void playAlbum() {

    player.reset();

    //get Album song
    AlbumPojo albumPojo = albumPojos.get(albumPosn);

    id = albumPojo.getId();
    songName = albumPojo.getTitle();
    albumArt = albumPojo.getAlbumArt();
    albumName = albumPojo.getAlbum();
    artistName = albumPojo.getAlbum_artist();

    Intent intent = new Intent("MusicServiceInfo");
    intent.putExtra("songid", id);
    intent.putExtra("songtitile", songName);
    intent.putExtra("songimage", albumArt);
    intent.putExtra("albumname", albumName);
    intent.putExtra("artist", artistName);
    sendBroadcast(intent);

    Log.w("Albumart", "" + albumArt);
    //set uri
    Uri trackUri = ContentUris.withAppendedId
            (android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id);
    try {
        player.setDataSource(getApplicationContext(), trackUri);
    } catch (Exception e) {
        Log.e("MUSIC SERVICE", "Error setting data source", e);
    }
    player.prepareAsync();

}