0

我无法播放放入列表视图的音乐。我认为这是 prepare() 函数或索引的问题(我不知道为什么会这样。我对此进行了很多研究并反复试验。我仍然无法弄清楚。谢谢所有的帮助。

源代码:

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

}
4

1 回答 1

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

                }


            });
于 2013-11-05T03:59:48.303 回答