2015-01-17 53 views
0

我的應用搜索SD卡並顯示歌曲,但是當我點擊歌曲時它不會播放,也不會崩潰。我應該添加到代碼以使其播放。 adb trace中沒有顯示錯誤。Android音樂列表視圖

private MediaPlayer mMediaPlayer; 
private String[] mMusicList; 
private String[] mAudioPath; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_medias); 
    mMediaPlayer = new MediaPlayer(); 

    ListView mListView = (ListView) findViewById(R.id.listView1); 

    mMusicList = getAudioList(); 

    ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, mMusicList); 
    mListView.setAdapter(mAdapter); 

    mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
           long arg3) { 
      try { 
       playSong(mMusicList[arg2]); 
      } catch (IllegalArgumentException e) { 
       e.printStackTrace(); 
      } catch (IllegalStateException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

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

    int count = mCursor.getCount(); 
    String[] songs = new String[count]; 
    String[] mAudioPath = new String[count]; 
    int i = 0; 
    if (mCursor.moveToFirst()) { 
     do { 
      songs[i] = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME)); 
      mAudioPath[i] = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA)); 
      i++; 
     } while (mCursor.moveToNext()); 
    } 

    mCursor.close(); 

    return songs; 
} 

private void playSong(String path) throws IllegalArgumentException, 
     IllegalStateException, IOException { 
    String extStorageDirectory = Environment.getExternalStorageDirectory() 
      .toString(); 

    path = extStorageDirectory + File.separator + path; 

    mMediaPlayer.reset(); 
    mMediaPlayer.setDataSource(path); 
    mMediaPlayer.prepare(); 
    mMediaPlayer.start(); 
} 

請幫我

回答

0

要傳遞到mMediaPlayer.setDataSource(路徑)的路徑字符串是錯誤的...

返回「mAudioPath」陣列,而不是在getAudioList「歌曲」陣()方法和更改playSong()方法是這樣的。

private void playSong(String path) throws IllegalArgumentException, IllegalStateException, IOException { 
    mMediaPlayer.reset(); 
    mMediaPlayer.setDataSource(path); 
    mMediaPlayer.prepare(); 
    mMediaPlayer.start(); 
} 
+0

它對你有用嗎? – Chandrakanth