音乐服务不使用专辑歌曲

时间:2018-01-21 09:18:53

标签: android-fragments audio-player android-music-player

我开发音乐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;
    }

}

1 个答案:

答案 0 :(得分:0)

是.. 现在发现很多在线后我得到你需要不同的方法来处理音乐播放器中的每个事件(如专辑,歌曲,流派)。

这是在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();

}