使用服务类播放歌曲

时间:2013-08-25 10:34:22

标签: android android-service

我一直在努力,但无法取得成功。我希望这些代码在Service中转换,以便我的应用程序可以在前台运行。任何帮助将非常感谢。我是android的新手,我需要立即行动。

我有(1)SongsManager.java,我从sdCard访问歌曲并将其放在ArrayList>上。 (2)PlayListActivity.java,我将所有歌曲放在SongsManager.java的ListView中,当我点击一个项目时,它将转到(3)HirouMusic.java,它将传递来自PlayListActicity的songIndex数据,这将触发什么歌曲索引玩。

这是我的代码。

(1)SongsManager.java

public class SongsManager {

private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String,     String>>();

public SongsManager(){

}


public ArrayList<HashMap<String, String>> getPlayList(Context c) {

final Cursor mCursor = c.getContentResolver().query(
        MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
        new String[] { MediaStore.Audio.Media.DISPLAY_NAME
                    ,MediaStore.Audio.Media.ARTIST
                    ,MediaStore.Audio.Media.DURATION
                    ,MediaStore.Audio.Media.ALBUM_ID
                    ,MediaStore.Audio.Media.DATA
                    ,MediaStore.Audio.Media.MIME_TYPE }
                    , null
                    , null,
                    "LOWER(" + MediaStore.Audio.Media.TITLE + ") ASC");


String songs_name = "";
String song_artist= "";
String song_duration= "";
String song_album_id= "";
String mAudioPath = "";

/* run through all the columns we got back and save the data we need into the arraylist for our listview*/
if (mCursor.moveToFirst()) {
    do {

    String file_type = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.MIME_TYPE));


        songs_name = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME));
        song_artist = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));
        song_duration = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));
        song_album_id= mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID));
        mAudioPath = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
        HashMap<String, String> song = new HashMap<String, String>();

        song.put("songTitle", songs_name);
        song.put("songArtist", song_artist);
        song.put("songDuration",song_duration);
        song.put("songAlbumId", song_album_id);
        song.put("songPath", mAudioPath);

        songsList.add(song);

    } while (mCursor.moveToNext());
}   

mCursor.close();
return songsList;
 }   
 }

(2)PlaListActivity.java

public class PlayListActivity extends ListActivity {

// Songs list
public ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String,                   String>>();

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.playlist);

ArrayList<HashMap<String, String>> songsListData = new ArrayList<HashMap<String,     String>>();

SongsManager plm = new SongsManager();
// get all songs from sdcard
this.songsList = plm.getPlayList(this);

// looping through playlist
for (int i = 0; i < songsList.size(); i++) {
    // creating new HashMap
    HashMap<String, String> song = songsList.get(i);

    // adding HashList to ArrayList
    songsListData.add(song);
}

// Adding menuItems to ListView
ListAdapter adapter = new SimpleAdapter(this, songsListData,
        R.layout.playlist_item, new String[] { "songTitle","songArtist"}, new int[] {
                R.id.songTitle, R.id.songArtis });

setListAdapter(adapter);


// selecting single ListView item
ListView lv = getListView();
// listening to single listitem click
lv.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
        // getting listitem index
        int songIndex = position;

        // Starting new intent
        Intent in = new Intent(getApplicationContext(),
                HirouMusic.class);

        // Sending songIndex to PlayerActivity
        in.putExtra("songIndex", songIndex);

        setResult(100, in);

        // Closing PlayListView
        finish();

    }
});

}
}

(3)HirouMusic.java

public class HirouMusic extends Activity implements OnCompletionListener,
SeekBar.OnSeekBarChangeListener {

private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String,         String>>();


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

requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FULLSCREEN);

setContentView(R.layout.player);

btnPlay = (ImageButton) findViewById(R.id.btnPlay);
btnForward = (ImageButton) findViewById(R.id.btnForward);
btnBackward = (ImageButton) findViewById(R.id.btnBackward);
btnNext = (ImageButton) findViewById(R.id.btnNext);
btnPrevious = (ImageButton) findViewById(R.id.btnPrevious);
btnPlaylist = (ImageButton) findViewById(R.id.btnPlaylist);
btnRepeat = (ImageButton) findViewById(R.id.btnRepeat);
btnShuffle = (ImageButton) findViewById(R.id.btnShuffle);
songProgressBar = (SeekBar) findViewById(R.id.songProgressBar);
songTitleLabel = (TextView) findViewById(R.id.songTitle);
songAlbum = (TextView) findViewById(R.id.songAlbum);
songCurrentDurationLabel = (TextView) findViewById(R.id.songCurrentDurationLabel);
songTotalDurationLabel = (TextView) findViewById(R.id.songTotalDurationLabel);
details =(Button) findViewById(R.id.btnDetails);
songAlbumArt = (ImageView) findViewById(R.id.songAlbumArt);

    mp = new MediaPlayer();
    songManager = new SongsManager();
    utils = new Utilities();

    // Listeners
    songProgressBar.setOnSeekBarChangeListener(this); // Important
    mp.setOnCompletionListener(this); // Important

    // Getting all songs list
    songsList = songManager.getPlayList(this);

    // By default play first song
    //playSong(0);


btnPlay.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // check for already playing
            if(mp.isPlaying()){

                if(mp!=null){
                    mp.pause();

                    btnPlay.setImageResource(R.drawable.btn_play);
                }
            }else{
                // Resume song
                if(mp!=null){
                    mp.start();
                    // Changing button image to pause button
                    btnPlay.setImageResource(R.drawable.btn_pause);
                }
            }

        }
    });

btnNext.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {

            if(isShuffle){
                Random rand = new Random();
                currentSongIndex = rand.nextInt((songsList.size() - 1) - 0 + 1) + 0;
                playSong(currentSongIndex);
            }
            else{
                        // check if next song is there or not
                    if(currentSongIndex < (songsList.size() - 1)){
                        playSong(currentSongIndex + 1);
                        currentSongIndex = currentSongIndex + 1;
                    }else{
                        // play first song
                        playSong(0);
                        currentSongIndex = 0;
                        }   
            }

        }
    });

    /**
     * Back button click event
     * Plays previous song by currentSongIndex - 1
     * */
btnPrevious.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            if(currentSongIndex > 0){
                playSong(currentSongIndex - 1);
                currentSongIndex = currentSongIndex - 1;
            }else{
                // play last song
                playSong(songsList.size() - 1);
                currentSongIndex = songsList.size() - 1;
            }

        }
    });


protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == 100) { 
    currentSongIndex = data.getExtras().getInt("songIndex");
    // play selected song
    playSong(currentSongIndex);
}


} // end

/**
 * Function to play a song
 * */
public void  playSong(int songIndex){
// Play song
try {
    mp.reset();
    mp.setDataSource(songsList.get(songIndex).get("songPath"));
    mp.prepare();
    mp.start();
    // Displaying Song title
    String songTitle = songsList.get(songIndex).get("songTitle");
    songTitleLabel.setText(songTitle);
    String songAlbum2 = songsList.get(songIndex).get("songArtist");
    songAlbum.setText(songAlbum2);

@Override
public void onCompletion(MediaPlayer arg0) {

// check for repeat is ON or OFF
if(isRepeat){
    // repeat is on play same song again
    playSong(currentSongIndex);
} else if(isShuffle){
    // shuffle is on - play a random song
    Random rand = new Random();
    currentSongIndex = rand.nextInt((songsList.size() - 1) - 0 + 1) + 0;
    playSong(currentSongIndex);
} else{
    // no repeat or shuffle ON - play next song
    if(currentSongIndex < (songsList.size() - 1)){
        playSong(currentSongIndex + 1);
        currentSongIndex = currentSongIndex + 1;
    }else{
        // play first song
        playSong(0);
        currentSongIndex = 0;
    }
}
}

 }

1 个答案:

答案 0 :(得分:0)

public ArrayList<HashMap<String, String>> getPlayList4(Context resolver){


    Cursor cursor = resolver.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
            new String [] {"ARTIST", "DURATION", "TITLE", "_DATA", "ALBUM"}, null, null, null);

    while(cursor.moveToNext()) {

    HashMap<String, String> song = new HashMap<String, String>();

    song.put("artist", cursor.getString(0));

    song.put("duration", cursor.getString(1));

    song.put("songTitle", cursor.getString(2));

    song.put("songPath",cursor.getString(3));

    song.put("album",cursor.getString(4));

    // Adding each song to SongList

    songsList.add(song);

    }

    return songsList;

}