2013-11-05 27 views
0

我無法播放列表視圖中的音樂。我相信這是prepare()函數或索引的一個問題(我不知道爲什麼會是這種情況,我已經研究了很多,試驗和錯誤,但仍然無法弄清楚。所有幫助MediaPlayer - 只有listview中的第二個元素正在播放

的源代碼:。!

import java.io.IOException; 

import android.annotation.SuppressLint; 
import android.app.ListActivity; 
import android.database.Cursor; 
import android.media.AudioManager; 
import android.media.MediaPlayer; 
import android.net.Uri; 
import android.os.Bundle; 
import android.provider.ContactsContract.Contacts; 
import android.provider.MediaStore; 
import android.provider.MediaStore.Audio; 
import android.support.v4.widget.CursorAdapter; 
import android.support.v4.widget.SimpleCursorAdapter; 
import android.view.Menu; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ListView; 



public class ListViewActivity extends ListActivity{ 

    ListView lv; 
    MediaPlayer mp; 
    int music_column_index; 
    Cursor c; 
    int currentPosition; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) 
     { 
     super.onCreate(savedInstanceState); 
     lv = getListView(); 


     c = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
     null, null, null, MediaStore.Audio.Media.TITLE + " ASC"); 
     String[] cols = new String[] {MediaStore.Audio.Media.TITLE}; 
     int[] views = new int[] {android.R.id.text1}; 
     SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
       android.R.layout.simple_list_item_1, c, cols, views,0); 
     this.setListAdapter(adapter); 


     lv.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, 
        long id) { 
       // TODO Auto-generated method stub 

       //System.out.println(c.getString(position)); 
       try { 

        mp = new MediaPlayer(); 
        //mp.setDataSource(c.getString(position)); 
        mp.setDataSource(c.getString(position)); 
        mp.prepare(); 
        mp.start(); 
       } catch (Exception ex) { 
        // TODO Auto-generated catch block 
        System.out.println(ex); 
       } 

      } 


     }); 

     } 











    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.list_view, menu); 
     return true; 
    } 

} 
+0

c是一個遊標,你應該使用c.movetoposition(position),然後得到這首歌的URI確定遊標有數據,位置不在遊標的邊界之外。 –

回答

0

是儘量媒體準備之前,請將光標位置好運c.moveToPosition(位置);

lv.setOnItemClickListener(new OnItemClickListener() { 

       @Override 
       public void onItemClick(AdapterView<?> parent, View view, int position, 
         long id) { 
        // TODO Auto-generated method stub 

        //System.out.println(c.getString(position)); 
        try { 
         c.moveToPosition(position); 
         mp = new MediaPlayer(); 
         //mp.setDataSource(c.getString(position)); 
         mp.setDataSource(c.getString(position)); 
         mp.prepare(); 
         mp.start(); 
        } catch (Exception ex) { 
         // TODO Auto-generated catch block 
         System.out.println(ex); 
        } 

       } 


      }); 
相關問題