[英]Get System Ringtones and Mp3 files on SD Card in a quicker way - Android
我正在使用SoundManager类来获取SD卡上的系统铃声(TYPE_ALL)和mp3文件。 我最终使用HashMaps(在活动代码段中)填充列表视图(带有CheckedTextViews),以允许用户选择一种音调(铃声或歌曲)。 该代码有效,我能够使用媒体播放器播放所选的音调。这就是代码。
但是,这需要很多时间 。 我不知道是因为SongsManager文件还是其他原因。 是否有其他方法可以加快此过程?
SoundManager.java
public class SongsManager {
final String MEDIA_PATH = Environment.getExternalStorageDirectory()
.getPath() + "/";
private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
private String mp3Pattern = ".mp3";
// Constructor
public SongsManager() {
}
/**
* Function to read all mp3 files and store the details in
* ArrayList
* */
public ArrayList<HashMap<String, Ringtone>> getAllSounds(Context context){
RingtoneManager ringtoneMgr = new RingtoneManager(context);
ringtoneMgr.setType(RingtoneManager.TYPE_ALL);
Cursor alarmsCursor = ringtoneMgr.getCursor();
int alarmsCount = alarmsCursor.getCount();
if (alarmsCount == 0 && !alarmsCursor.moveToFirst()) {
return null;
}
ArrayList<HashMap<String, Ringtone>> alarms = new ArrayList<HashMap<String, Ringtone>>();
while(!alarmsCursor.isAfterLast() && alarmsCursor.moveToNext()) {
int currentPosition = alarmsCursor.getPosition();
HashMap<String, Ringtone> soundMap = new HashMap<String, Ringtone>();
Ringtone ringtone = ringtoneMgr.getRingtone(currentPosition);
soundMap.put("Sound",ringtone);
alarms.add(soundMap);
}
alarmsCursor.close();
return alarms;
}
public ArrayList<HashMap<String, String>> getPlayList() {
System.out.println(MEDIA_PATH);
if (MEDIA_PATH != null) {
File home = new File(MEDIA_PATH);
File[] listFiles = home.listFiles();
if (listFiles != null && listFiles.length > 0) {
for (File file : listFiles) {
System.out.println(file.getAbsolutePath());
if (file.isDirectory()) {
scanDirectory(file);
} else {
addSongToList(file);
}
}
}
}
// return songs list array
return songsList;
}
private void scanDirectory(File directory) {
if (directory != null) {
File[] listFiles = directory.listFiles();
if (listFiles != null && listFiles.length > 0) {
for (File file : listFiles) {
if (file.isDirectory()) {
scanDirectory(file);
} else {
addSongToList(file);
}
}
}
}
}
private void addSongToList(File song) {
if (song.getName().endsWith(mp3Pattern)) {
HashMap<String, String> songMap = new HashMap<String, String>();
songMap.put("songTitle",
song.getName().substring(0, (song.getName().length() - 4)));
songMap.put("songPath", song.getPath());
// Adding each song to SongList
songsList.add(songMap);
}
}
}
来自MyActivity.java的片段
SongsManager songsManager = new SongsManager();
ArrayList<HashMap<String, String>> songsMap = songsManager.getPlayList();
ArrayList<HashMap<String, Ringtone>> soundMap = songsManager.getAllSounds(getApplicationContext());
将此功能与Android Manifest文件中的“ 外部存储”权限一起使用。
public ArrayList<HashMap<String, String>> getSDCardAudioFiles() {
ArrayList<HashMap<String, String>> audioFilesList = new ArrayList<HashMap<String, String>>();
Cursor mCursor = getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
new String[] { MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Audio.Media.DATA }, null, null, null);
int count = mCursor.getCount();
HashMap<String, String> audioFileMap;
while (mCursor.moveToNext()) {
audioFileMap = new HashMap<String, String>();
audioFileMap.put("FileName",mCursor.getString(mCursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME)));
audioFileMap.put("FilePath", mCursor.getString(mCursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA)));
audioFilesList.add(audioFileMap);
}
mCursor.close();
return audioFilesList;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.