我正在开发一个简单的媒体播放器应用程序,但在Marshmallow API 23中构建apk时,我的应用程序崩溃了。这是我的代码。
if (home.listFiles(new FileExtensionFilter()).length > 0) {
for (File file : home.listFiles(new FileExtensionFilter())) {
HashMap<String, String> song = new HashMap<String, String>();
song.put("songTitle", file.getName().substring(0, (file.getName().length() - 4)));
song.put("songPath", file.getPath());
// Adding each song to SongList
songsList.add(song);
}
}
这是SongsManager的完整代码
package ph.zyber.zybermp;
import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.HashMap;
public class SongsManager {
// SDCard Path
final String MEDIA_PATH = new String("/sdcard/");
private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
// Constructor
public SongsManager(){
}
/**
* Function to read all mp3 files from sdcard
* and store the details in ArrayList
* */
public ArrayList<HashMap<String, String>> getPlayList(){
File home = new File(MEDIA_PATH);
if (home.listFiles(new FileExtensionFilter()).length > 0) {
for (File file : home.listFiles(new FileExtensionFilter())) {
HashMap<String, String> song = new HashMap<String, String>();
song.put("songTitle", file.getName().substring(0, (file.getName().length() - 4)));
song.put("songPath", file.getPath());
// Adding each song to SongList
songsList.add(song);
}
}
// return songs list array
return songsList;
}
/**
* Class to filter files which are having .mp3 extension
* */
class FileExtensionFilter implements FilenameFilter {
public boolean accept(File dir, String name) {
return (name.endsWith(".mp3") || name.endsWith(".MP3"));
}
}
}
我正在学习本教程。
http://www.androidhive.info/2012/03/android-building-audio-player-tutorial/#
请帮帮我。 提前谢谢。
答案 0 :(得分:0)
在Eclipse中,您需要找到包含音乐的文件夹的路径:
Window-Show View-Other-file explorer
(手机必须连接到计算机)。
在搜索完整路径的地方,我转过它 - “/ storage / extSdCard / Music”。 我把它放在代码中后就可以了:
final String MEDIA_PATH = new String("/storage/extSdCard/Music");
答案 1 :(得分:0)
像这样修改SongsManger,你必须在该活动中创建songsmanger的对象期间传递适当活动的上下文
我已经纠正了getplaylist()函数的代码,并且不要忘记在manifest中添加运行时权限 使用对话框检查权限
例如:
SongsManager plm = new SongsManager(PlayListActivity.this);
// get all songs from sdcard
this.songsList = plm.getPlayList();
public class SongsManager {
private ArrayList<hashmap<string, string="">> songsList = new ArrayList<hashmap<string, string="">>();
Cursor cursor;
Context context;
// Constructor
public SongsManager(Context context){
this.context = context;
}
/**
* Function to read all mp3 files from sdcard
* and store the details in ArrayList
* */
public ArrayList<hashmap<string, string="">> getPlayList(){
String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";
String[] projection = {
MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Audio.Media.DURATION
};
ContentResolver contentResolver = context.getContentResolver();
cursor = contentResolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,projection, selection,null,null);
while(cursor.moveToNext()) {
HashMap<string, string=""> song = new HashMap<string, string="">();
song.put("songID",cursor.getString(0));
song.put("songTitle",cursor.getString(2));
song.put("songPath",cursor.getString(3));
// Adding each song to SongList
songsList.add(song);
}
// return songs list array
return songsList;
}
}