简单的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>