1

我一直在为此努力,但没有成功。我希望这些代码能够转换,Service以便我的应用程序可以在foreground. 任何帮助将不胜感激。

我有 (1)SongsManager.java我从 sdCard 访问歌曲并将其放在ArrayList<HashMap<String,String>>. (2)PlayListActivity.java我把所有歌曲ListView从哪里放SongsManager.java,当我点击一个项目时,它会转到(3)HirouMusic.java,它会从那里传递songIndex数据,PlayListActicity这将触发播放什么歌曲索引。

这是我的代码。

(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;
        }
    }
}

}
4

0 回答 0