简单的Android MP3播放器-总是崩溃-代码在这里 package com.example.hhh.Test; 导入java.io.File; 导入java.io.FilenameFilter; 导入java.io.IOException; 导入java.util.ArrayList; 导入java.util.List; 导入android.app.ListActivity; 导入android.media.MediaPlayer; 导入android.os.Bundle; 导入android.view.view; 导入android.widget.AdapterView; 导入android.widget.ArrayAdapter; 导入android.widget.ListView; 类Mp3Filter实现FilenameFilter{ 公共布尔接受(文件目录,字符串名称){ 返回(name.endsWith(“.mp3”); } } 公共类MainActivity扩展了ListActivity{ 字符串SD_PATH=新字符串(“/sdcard/”); 列表歌曲=新建ArrayList(); MediaPlayer mp=新的MediaPlayer(); 列表视图列表; 文件主目录=新文件(SD_路径); ArrayAdapter歌曲列表; @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); updateSongList(); list=(ListView)findViewById(R.id.ListView); list.setOnItemClickListener(新的AdapterView.OnItemClickListener(){ @凌驾 public void onItemClick(AdapterView父对象、视图、整型位置、长id){ 试一试{ mp.reset(); mp.setDataSource(SD_路径+songs.get(位置)); mp.prepare(); mp.start(); } 捕获(IOE异常){ e、 printStackTrace(); } } }); } 私有void updateSongList(){ 文件主目录=新文件(SD_路径); if(home.listFiles(新的Mp3Filter()).length>0){ 对于(文件:home.listFiles(新的Mp3Filter())){ songs.add(file.getName()); } 歌曲列表=(ArrayAdapter)歌曲; setListAdapter(歌曲列表); } } }

简单的Android MP3播放器-总是崩溃-代码在这里 package com.example.hhh.Test; 导入java.io.File; 导入java.io.FilenameFilter; 导入java.io.IOException; 导入java.util.ArrayList; 导入java.util.List; 导入android.app.ListActivity; 导入android.media.MediaPlayer; 导入android.os.Bundle; 导入android.view.view; 导入android.widget.AdapterView; 导入android.widget.ArrayAdapter; 导入android.widget.ListView; 类Mp3Filter实现FilenameFilter{ 公共布尔接受(文件目录,字符串名称){ 返回(name.endsWith(“.mp3”); } } 公共类MainActivity扩展了ListActivity{ 字符串SD_PATH=新字符串(“/sdcard/”); 列表歌曲=新建ArrayList(); MediaPlayer mp=新的MediaPlayer(); 列表视图列表; 文件主目录=新文件(SD_路径); ArrayAdapter歌曲列表; @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); updateSongList(); list=(ListView)findViewById(R.id.ListView); list.setOnItemClickListener(新的AdapterView.OnItemClickListener(){ @凌驾 public void onItemClick(AdapterView父对象、视图、整型位置、长id){ 试一试{ mp.reset(); mp.setDataSource(SD_路径+songs.get(位置)); mp.prepare(); mp.start(); } 捕获(IOE异常){ e、 printStackTrace(); } } }); } 私有void updateSongList(){ 文件主目录=新文件(SD_路径); if(home.listFiles(新的Mp3Filter()).length>0){ 对于(文件:home.listFiles(新的Mp3Filter())){ songs.add(file.getName()); } 歌曲列表=(ArrayAdapter)歌曲; setListAdapter(歌曲列表); } } },java,android,Java,Android,使用以下代码 package com.example.hhh.Test; import java.io.File; import java.io.FilenameFilter; import java.io.IOException; import java.util.ArrayList; import java.util.List; import android.app.ListActivity; import android.media.MediaPlayer; import an

使用以下代码

package com.example.hhh.Test;

import java.io.File;
import java.io.FilenameFilter;  
import java.io.IOException;
import java.util.ArrayList; 
import java.util.List;
import android.app.ListActivity;  
import android.media.MediaPlayer;
import android.os.Bundle;  
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter;
import android.widget.ListView; 

class Mp3Filter implements FilenameFilter {
    public boolean accept(File dir, String name) {
            return (name.endsWith(".mp3"));
    } 
}

public class MainActivity extends ListActivity {

    String SD_PATH = new String("/sdcard/");
    List<String> songs = new ArrayList<String>();
     MediaPlayer mp = new MediaPlayer();
    ListView list;
    File home = new File(SD_PATH);
     ArrayAdapter<String> songList;

     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);

        updateSongList();

             list = (ListView) findViewById(R.id.listView);
             list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                 @Override
                 public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                     try {
                         mp.reset();
                         mp.setDataSource(SD_PATH + songs.get(position));
                         mp.prepare();
                         mp.start();
                     }
                     catch (IOException e) {
                         e.printStackTrace();
                     }

                 }
             });
         }


     private void updateSongList() {
         File home = new File(SD_PATH);
         if (home.listFiles(new Mp3Filter()).length > 0) {
             for (File file : home.listFiles(new Mp3Filter())) {
                 songs.add(file.getName());
             }
             songList = (ArrayAdapter<String>) songs;
             setListAdapter(songList);

         }
    } 
}
package com.materialSample;
导入android.app.ListActivity;
导入android.media.MediaPlayer;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
导入java.io.File;
导入java.io.FilenameFilter;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.List;
类Mp3Filter实现FilenameFilter{
公共布尔接受(文件目录,字符串名称){
返回(name.endsWith(“.mp3”);
}
}
公共类PlayerActivity扩展了ListActivity{
字符串SD_PATH=新字符串(“/sdcard/”);
列表歌曲=新建ArrayList();
MediaPlayer mp=新的MediaPlayer();
ListView ListViewSSS;
文件主目录=新文件(SD_路径);
ArrayAdapter歌曲列表;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
/*setContentView(R.layout.activity\u播放器)*/
listViewssss=getListView();
updateSongList();
ListViewSSS.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
试一试{
mp.reset();
mp.setDataSource(SD_路径+songs.get(位置));
mp.prepare();
mp.start();
}捕获(IOE异常){
e、 printStackTrace();
}
}
});
}
私有void updateSongList(){
文件主目录=新文件(SD_路径);
if(home.listFiles(新的Mp3Filter()).length>0){
对于(文件:home.listFiles(新的Mp3Filter())){
songs.add(file.getName());
}
songList=new ArrayAdapter(这是android.R.layout.simple_list_item_1,歌曲);
setListAdapter(歌曲列表);
}
}
}

不要错过更改活动名称。

要获取歌曲,请避免给出类似
/sdcard/
的路径。这样它就不会从内部目录中获取每首&每首歌曲

使用内容提供商获取歌曲列表&问题可能会出现,因为路径不适合您的情况

试试下面的代码,它对我有用

package com.materialexample;

import android.app.ListActivity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

class Mp3Filter implements FilenameFilter {
    public boolean accept(File dir, String name) {
        return (name.endsWith(".mp3"));
    }
}

public class PlayerActivity extends ListActivity {

    String SD_PATH = new String("/sdcard/");
    List<String> songs = new ArrayList<String>();
    MediaPlayer mp = new MediaPlayer();
    ListView listViewssss;
    File home = new File(SD_PATH);
    ArrayAdapter<String> songList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        /*setContentView(R.layout.activity_player);*/
        listViewssss = getListView();
        updateSongList();
        listViewssss.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                try {
                    mp.reset();
                    mp.setDataSource(SD_PATH + songs.get(position));
                    mp.prepare();
                    mp.start();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        });
    }

    private void updateSongList() {
        File home = new File(SD_PATH);
        if (home.listFiles(new Mp3Filter()).length > 0) {
            for (File file : home.listFiles(new Mp3Filter())) {
                songs.add(file.getName());
            }

            songList = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, songs);
            setListAdapter(songList);
        }
    }
}
公共类活动扩展活动{
私人媒体播放器;
私有列表视图列表;
私人ArrayList songsList;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.home\u屏幕\u滑块);
mp=新媒体播放器();
updateSongList();//最好使用AsynTask
list=(ListView)findViewById(R.id.ListView);
list.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
试一试{
如果(mp!=null){
mp.reset();
mp.setDataSource(songsList.get(position.get(“songPath”));
mp.prepare();
mp.start();
}
}捕获(IOE异常){
e、 printStackTrace();
}
}
});
list.setAdapter(newsongAdapter(this.songsList));
findViewById(R.id.btnStop).setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(mp!=null&&mp.isPlaying())
mp.stop();
}
});
}
私有void updateSongList(){
songsList=newarraylist();
字符串[]STA
    public class SongActivity extends Activity {
        private MediaPlayer mp;
        private ListView list;
        private ArrayList<HashMap<String, String>> songsList;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.home_screen_slider);
            mp = new MediaPlayer();
            updateSongList();// Use of AsynTask is preferable
            list = (ListView) findViewById(R.id.listView);
            list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                    try {
                        if (mp != null) {
                            mp.reset();
                            mp.setDataSource(songsList.get(position).get("songPath"));
                            mp.prepare();
                            mp.start();
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                }
            });
            list.setAdapter(new SongAdapter(this.songsList));
            findViewById(R.id.btnStop).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (mp != null && mp.isPlaying())
                        mp.stop();
                }
            });
        }


        private void updateSongList() {
            songsList = new ArrayList<HashMap<String, String>>();
            String[] STAR = {"*"};
            Cursor cursor;
            Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
            String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";
            cursor = getContentResolver().query(uri, STAR, selection, null, null);
            if (cursor != null) {
                if (cursor.moveToFirst()) {
                    do {
                        String songName = cursor
                                .getString(cursor
                                        .getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
                        String path = cursor.getString(cursor
                                .getColumnIndex(MediaStore.Audio.Media.DATA));
                        String albumName = cursor.getString(cursor
                                .getColumnIndex(MediaStore.Audio.Media.ALBUM));
                        int albumId = cursor
                                .getInt(cursor
                                        .getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
                        HashMap<String, String> song = new HashMap<String, String>();
                        song.put("songTitle", albumName + " " + songName + "___" + albumId);
                        song.put("songPath", path);
                        songsList.add(song);
                    } while (cursor.moveToNext());
                }
            }

        }

        private class SongAdapter extends BaseAdapter {
            public ArrayList<HashMap<String, String>> listSongs;
            int size = 0;

            public SongAdapter(ArrayList<HashMap<String, String>> listSongs) {
                this.listSongs = listSongs;
                if (listSongs != null && !listSongs.isEmpty())
                    size = listSongs.size();
            }

            @Override
            public int getCount() {
                return size;
            }

            @Override
            public HashMap<String, String> getItem(int position) {
                return this.listSongs.get(position);
            }

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

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                // Here you can use ViewHolder for View Resuability
//https://stackoverflow.com/a/34349311/1140237
                convertView = LayoutInflater.from(SongActivity.this).inflate(android.R.layout.simple_list_item_1, parent, false);
                TextView txt = (TextView) convertView.findViewById(android.R.id.text1);
                HashMap<String, String> song = this.listSongs.get(position);
                txt.setText(song.get("songTitle"));
                return convertView;
            }
        }
    }
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relative_home"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffc699">


    <Button
        android:id="@+id/btnStop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:text="Stop" />


    <ListView
        android:id="@+id/listView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_below="@id/btnSelect"></ListView>
</RelativeLayout>