2011-07-17 97 views
0

我正在嘗試自定義媒體播放器。目前,我通過檢索所有從手機的歌曲:找到Audio.Media項目的路徑

audioCursor = this.managedQuery(Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, Audio.Media.TITLE+" ASC"); 
     startManagingCursor(audioCursor); 

     String[] columnsToMap = new String[] { 
       Audio.Media.TITLE, 
       Audio.Media.ARTIST, 
       Audio.Media.DISPLAY_NAME 
     }; 
     int[] mapTo = new int[] { 
       R.id.song_tf_1, 
       R.id.song_tf_2, 
       R.id.song_tf_path 
     }; 

     ListAdapter mAdapter = new SimpleCursorAdapter(
       this, 
       R.layout.song_list_song, 
       audioCursor, 
       columnsToMap, 
       mapTo 
     ); 

     setListAdapter(mAdapter); 

唯一的問題是,我不知道熱,以獲得歌曲的路徑,所以我可以將其添加到

player.reset(); 
player.setDataSource(songPath); 
player.prepare(); 
player.start(); 

如何獲得每首歌曲的歌曲路徑並將其保存在字段中(R.id.song_tf_path)...或者有其他方法可以做得更好嗎?最好不用手動掃描所有文件夾中的音樂等。

回答

2

它看起來像你可以用DATA代替DISPLAY_NAME,它應該工作得很好。請記住,這是一條絕對的道路,而且可能會相當長。

由於您使用的是setListAdapter()我假設您正在使用列表活動。在這種情況下,請在您的課堂中添加一個onListItemClick()方法,以便在接收到點擊時執行操作。該方法應該給你一個id所以你知道哪個項目被點擊。

像這樣的工作

protected void onListItemClick (ListView l, View v, int position, long id) { 
    String[] projection = new String[] {Audio.Media._ID, Audio.Media.DATA}; 
    Cursor c = managedQuery(ContentUris.withAppendedId(Audio.Media.EXTERNAL_CONTENT_URI, id), 
                projection, 
                null, 
                null, 
                null); 
    c.moveToFirst(); 
    String p = c.getString(c.getColumnIndex(Audio.Media.DATA)); 

    //your code to load this path into your media player 
    //and play it goes here 

} 

歌曲的路徑將被存儲在P,你可以做任何你想用它喜歡。