2013-02-12 17 views
1

此代码加载ListView中的所有音乐,播放歌曲,我选择,我需要打所有的音乐列表,但是当我做到这一点与whilefor,我不能选择另一首歌曲,而播放。Android的一览。如何发挥所有的音乐,并选择歌曲

import android.app.Activity; 
import android.content.Context; 
import android.database.Cursor; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.BaseAdapter; 
import android.widget.ListView; 
import android.widget.MediaController; 
import android.widget.MediaController.MediaPlayerControl; 
import android.widget.TextView; 
import android.widget.AdapterView.OnItemClickListener; 

public class MainActivity extends Activity { 
    ListView musiclist; 
    Cursor musiccursor; 
    int music_column_index; 
    int count; 
    MediaPlayer mMediaPlayer; 
MediaController mc; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     init_phone_music_grid(); 

    } 

    @SuppressWarnings("deprecation") 
private void init_phone_music_grid() { 
     System.gc(); 
     String[] proj = { MediaStore.Audio.Media._ID, 
MediaStore.Audio.Media.DATA, 
MediaStore.Audio.Media.DISPLAY_NAME, 
MediaStore.Video.Media.SIZE }; 
     musiccursor = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
proj, null, null, null); 
     count = musiccursor.getCount(); 
     musiclist = (ListView) findViewById(R.id.listView1); 
     musiclist.setAdapter(new MusicAdapter(getApplicationContext())); 

     musiclist.setOnItemClickListener(musicgridlistener); 

     mMediaPlayer = new MediaPlayer(); 


    } 

    private OnItemClickListener musicgridlistener = new OnItemClickListener() { 
     public void onItemClick(AdapterView parent, View v, int position, 
long id) { 

      System.gc(); 
       music_column_index = musiccursor 
.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA); 
       musiccursor.moveToPosition(position); 

       String filename = musiccursor.getString(music_column_index); 

       try { 
        if (mMediaPlayer.isPlaying()) { 
          mMediaPlayer.reset(); 
        } 
        mMediaPlayer.setDataSource(filename); 
        mMediaPlayer.prepare(); 
        mMediaPlayer.start(); 
       } catch (Exception e) { 

       } 



      // 

     } 

    }; 

    private OnItemClickListener musicgridlistener1 = new OnItemClickListener() { 
     public void onItemClick(AdapterView parent, View v, int position, 
long id) { 

     System.gc(); 
      music_column_index = musiccursor 
.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA); 
      musiccursor.moveToPosition(position); 

      String filename = musiccursor.getString(music_column_index); 

      try { 
        if (mMediaPlayer.isPlaying()) { 
         mMediaPlayer.reset(); 
        } 
        mMediaPlayer.setDataSource(filename); 
        mMediaPlayer.prepare(); 
        mMediaPlayer.start(); 
      } catch (Exception e) { 

      } 
     try{ 
      while(mMediaPlayer.isPlaying()){} 

     } catch (Exception e) 
     { 
      //handle the exception 
      e.printStackTrace(); 
      } 
      while(musiccursor.getPosition()!= musiccursor.getCount()){ 
       mMediaPlayer.reset(); 
      musiccursor.moveToNext(); 

       filename = musiccursor.getString(music_column_index); 

       try { 
        if (mMediaPlayer.isPlaying()) { 
          mMediaPlayer.reset(); 
        } 
        mMediaPlayer.setDataSource(filename); 
        mMediaPlayer.prepare(); 
        mMediaPlayer.start(); 

       } catch (Exception e) { 

       } 
       while(mMediaPlayer.isPlaying()){} 
      } 

      // 
     } 

}; 

    public class MusicAdapter extends BaseAdapter { 
     private Context mContext; 

     public MusicAdapter(Context c) { 
       mContext = c; 
     } 

     public int getCount() { 
       return count; 
     } 

     public Object getItem(int position) { 
       return position; 
     } 

     public long getItemId(int position) { 
       return position; 
     } 

     public View getView(int position, View convertView, ViewGroup parent) { 
      System.gc(); 
      String id = null; 
      TextView tv; 
      if (convertView == null) { 
      tv = new TextView(mContext.getApplicationContext()); 
      } else{ 
      tv = (TextView) convertView; 
      } 

      musiccursor.moveToPosition(position); 

      music_column_index = musiccursor 
      .getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME); 
      id = musiccursor.getString(music_column_index); 
      music_column_index =   musiccursor.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE); 
      id += " Size(KB):" + musiccursor.getString(music_column_index); 
      tv.setText(id); 
      return tv; 
      } 
    } 
} 

回答

1

您应该建立一个播放列表队列,而不是循环播放数据。然后,您可以根据需要填充和删除它,并且不需要担心数据源更改。

+1

去做 ? – 2013-02-12 13:41:13

-1

对于导入默认的音乐播放器:

要简单地启动音乐播放器做:

Intent intent = new Intent(MediaStore.INTENT_ACTION_MUSIC_PLAYER); 
startActivity(intent); 

请注意,这个我怎样才能只能在SDK API 8级了

+1

但这是默认播放器,我想自己创建 – 2013-02-12 13:34:04

相关问题